2014-09-20 168 views
0

你知道的一種方式來運行的更新,其中更新將自動插入一個新的數值到數字順序,以逗號分隔字符串?更新排序順序

SELECT ids FROM some.place; 

ids 
------------------------- 
{13,24,29,35,42,61,82} 
+3

做的是*不存儲逗號放在第一位*分開列出的最好的事情:http://dba.stackexchange.com/q/55871/7788 – 2014-09-20 07:32:54

+0

替換爲Postgres的命令行客戶端標籤'PSQL 'with'postgresql' – 2014-09-20 07:35:22

回答

1

在這種情況下,因爲你的「逗號分隔字符串」是一個有效的PostgreSQL數組文本,你可以轉換爲integer[],並使用intarray擴展的sort()方法。

CREATE EXTENSION intarray; 

UPDATE some_place 
SET ids = sort(ids::integer[] || new_value)::text 
WHERE ... 

一般來說,在字段中存儲逗號分隔的列表是非常糟糕的設計。如果必須,請使用數組,但不要將其作爲文本存儲。

例如

regress=> select sort('{13,24,29,35,42,61,82}'::integer[] || 18)::text; 
      sort    
--------------------------- 
{13,18,24,29,35,42,61,82} 
(1 row) 
+0

看起來像intarray不是一個選項。 #CREATE EXTENSION intarray; 錯誤:無法打開擴展控制文件「/usr/pgsql-9.3/share/extension/intarray.control」:沒有這樣的文件或目錄 – user3486527 2014-09-24 22:13:36

+0

@ user3486527你只需要安裝的contrib包 – 2014-09-24 23:15:34