你知道的一种方式来运行的更新,其中更新将自动插入一个新的数值到数字顺序,以逗号分隔字符串?更新排序顺序
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