我有postgresql 8.4。
我正在尝试建立查询但没有成功。如果元素在对齐行中不存在,我想将元素插入到数组中。
表“测试”:
+------------------+------------------+
| id | varchar(20) |
| timestp | timestamp |
| place | varchar(20) |
| myarray[][] | varchar[14][254] |
+------------------+------------------+
+---------+---------------------+-----------+----------------+
| xyz | 2010-01-01 10:10:10 | nowhere | "{abc,qwert}" |
+---------+---------------------+-----------+----------------+
所以我想在myarray WHERE中添加“{fgh,gfdsa}”(id ='xyz'AND timestp =“2010-01-01 10:10:10”AND place ='nowhere')如果它还没有在myarray中
我试过这样的事情>
UPDATE test
SET myarray = array_append(wascon2,'{fgh,gfdsa}')
WHERE (id='xyz' AND timestp="2010-01-01 10:10:10" AND place='nowhere'
AND NOT EXISTS 1 FROM test WHERE (myarray='{fgh,gfdsa}')));
这不起作用,每当我调用它时它都会附加数组。
+---+---------------------------+-------------------------------------------+
|xyz|2010-01-01 10:10:10|nowhere|{"{abc,qwert}","{fgh,gfdsa}","{fgh,gfdsa}"}|
+---+---------------------------+-------------------------------------------+
如果认为我应该使用>
myarray = ANY ('{fgh,gfds}'::varchar[])
不知怎的但我无法知道如何......
最好的问题是对我来说是一个plpgsql函数。
答案 0 :(得分:2)
UPDATE test
SET myarray = myarray || array['fgh','gfdsa']::varchar[][]
WHERE
id = 'xyz'
AND timestp = '2010-01-01 10:10:10'
AND place = 'nowhere'
AND not(myarray @> array['fgh','gfdsa']::varchar[][])
;