你知道的一種方式來運行的更新,其中更新將自動插入一個新的數值到數字順序,以逗號分隔字符串?更新排序順序
SELECT ids FROM some.place;
ids
-------------------------
{13,24,29,35,42,61,82}
你知道的一種方式來運行的更新,其中更新將自動插入一個新的數值到數字順序,以逗號分隔字符串?更新排序順序
SELECT ids FROM some.place;
ids
-------------------------
{13,24,29,35,42,61,82}
在這種情況下,因爲你的「逗號分隔字符串」是一個有效的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)
看起來像intarray不是一個選項。 #CREATE EXTENSION intarray; 錯誤:無法打開擴展控制文件「/usr/pgsql-9.3/share/extension/intarray.control」:沒有這樣的文件或目錄 – user3486527 2014-09-24 22:13:36
@ user3486527你只需要安裝的contrib包 – 2014-09-24 23:15:34
做的是*不存儲逗號放在第一位*分開列出的最好的事情:http://dba.stackexchange.com/q/55871/7788 – 2014-09-20 07:32:54
替換爲Postgres的命令行客戶端標籤'PSQL 'with'postgresql' – 2014-09-20 07:35:22