2014-09-20 93 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