2013-03-04 182 views
7

我需要檢查一行是否存在。如果不存在,應該插入。如果一行不存在,插入其他不要插入postgres

這是在postgres,我想通過shell腳本插入行。當我運行該腳本時,它不顯示錯誤,但即使沒有匹配的行存在,它也不會插入到表中。

+6

請發表您使用的腳本,您使用的是測試是否有「不匹配行」聲明。 – Aushin 2013-03-04 15:08:39

+1

看到這個鏈接http://stackoverflow.com/questions/4555966/merge-syntax-used-to-upsert-or-insert-on-duplicate-update – Kuberchaun 2013-03-04 15:09:17

+0

如果你可以使用Ruby作爲你的腳本語言,你可以試試[ 'Upsert'](https://github.com/seamusabshere/upsert) – 2013-03-04 17:58:38

回答

21

我喜歡的解決方案,他們提here

INSERT INTO table (id, field, field2) 
     SELECT 3, 'C', 'Z' 
     WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3); 
+0

我試過這個解決方案,它不能像低版本那樣工作。因此,我想將它們分成兩個不同的查詢。 – JumpOffBox 2013-03-04 21:20:46

+0

Postgres現在還有一個Upsert命令,您可以在其中插入或更新一行: https://wiki.postgresql.org/wiki/UPSERT – 2017-08-17 21:42:52

+0

在9.5+上,「INSERT ... ON CONFLICT DO NOTHING」或「INSERT ...在衝突更新上https://stackoverflow.com/a/17267423/1386245 – Rohmer 2017-12-07 21:31:01