2013-03-04 10 views
7

行が存在するかどうかを確認する必要があります。存在しない場合は挿入する必要があります。行が存在しない場合は挿入するelseはポストグルに挿入しない

これはpostgresにあり、シェルスクリプトを通して行を挿入しようとしています。スクリプトを実行すると、エラーは表示されませんが、一致する行がない場合でもテーブルに挿入されません。

+6

に言及ソリューションを好むは、使用しているスクリプトとあなたが「一致する行」がないかどうかをテストするために使用している文を投稿してください。 – Aushin

+1

このリンクを参照してくださいhttp://stackoverflow.com/questions/4555966/merge-syntax-used-to-upsert-or-insert-on-duplicate-update – Kuberchaun

+0

スクリプト言語としてRubyを使用できる場合は、 'Upsert'](https://github.com/seamusabshere/upsert) –

答えて

21

私は、彼らがhere

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

私はこの解決策を試しましたが、それより低いバージョンのものとしては機能しません。したがって、私はそれらを両方とも2つの異なるクエリに分割したいと考えました。 – JumpOffBox

+0

Postgresには、行を挿入または更新できるUpsertコマンドが追加されました。 https://wiki.postgresql.org/wiki/UPSERT –

+0

9.5以降では、「INSERT ... ON CONFLICT DO NOTHING」または「INSERT ... ON CONFLICT UPDATE' https://stackoverflow.com/a/17267423/1386245 – Rohmer

関連する問題