新しいPostgresql 9.5のアップサート機能を使用しようとしています。しかし、何らかの理由で、制約が存在しない(存在する場合)と言っている私のクエリ。
私の質問はこれです
INSERT INTO journals (ext_ids, title) VALUES ('{"nlmid": "000"}', 'blah')
ON CONFLICT ON CONSTRAINT idx_nlmid_journal DO NOTHING;
どこ idx_nlmid_journal
は、このように作成されたjsonbフィールドの一意のインデックスです
CREATE UNIQUE INDEX idx_nlmid_journal ON public.journals ((ext_ids ->> 'nlmid'::text));
エラーが出る
ERROR: constraint "idx_nlmid_journal" for table "journals" does not exist
何が欠けていますか?
一意のインデックスは制約を作成しないため、使用する構文は一意のインデックスには無効です。 ON CONSTRAINT
を削除して、代わりにインデックス式を使用する必要があります。
これは機能します:
INSERT INTO journals (ext_ids, title)
VALUES ('{"nlmid": "000"}', 'blah')
ON CONFLICT ((ext_ids ->> 'nlmid'::text))
DO NOTHING;