可能重複:
convert MySQL SET data type to Postgresarray_append如果元素不存在
我的PostgreSQL 8.4。
我試圖建立沒有成功的查詢。如果元素不在conserning行中,我想將元素插入到數組中。
表 「測試」:
+------------------+------------------+
| id | varchar(20) |
| timestp | timestamp |
| place | varchar(20) |
| myarray[][] | varchar[14][254] |
+------------------+------------------+
+---------+---------------------+-----------+----------------+
| xyz | 2010-01-01 10:10:10 | nowhere | "{abc,qwert}" |
+---------+---------------------+-----------+----------------+
所以我想補充 「{FGH,gfdsa}」 到MYARRAY WHERE(ID = '某某' AND timestp =「2010-01-01 10:10 :10" ,地點=‘無處’)如果不是已經在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[])
莫名其妙,但我不能找出如何..
最好wolud是我PLPGSQL功能。
多次嘗試後一種可能的解決> UPDATE測試 SET myArray的= array_append(myarray中, '{FGH,gfdsa}') WHERE ID = XYZ AND timestp =「2010-01-01 10:10 :10「 AND place ='無處' AND NOT EXISTS(SELECT 1 FROM test where'{fgh,gfdsa}'= ANY(myarray))); 這可能有副作用或隱藏的故障。我必須好好測試一下。在更大的DBS中也沒有性能經驗... – ykat
在我看來,好像你想在Postgres中使用SET類型。 [將MySQL SET數據類型轉換爲Postgres](http://stackoverflow.com/questions/8424283/convert-mysql-set-data-type-to-postgres)建議了可以完成的方法並直接應用於您的場景。 –