Postgers: нет уникального или исключающего ограничения, соответствующего спецификации ON CONFLICT при использовании первичного ключа и столбца UNIQUE - PullRequest
0 голосов
/ 06 апреля 2020

Вот схема

CREATE TABLE instagram_posts (
post_id serial PRIMARY KEY,
user_id int REFERENCES instagram_users ON DELETE RESTRICT,
link TEXT UNIQUE,
caption TEXT, 
num_likes int,
num_comments int,
exsits BOOLEAN NOT NULL DEFAULT TRUE); 

И я бы попытался вызвать команду:

INSERT INTO instagram_posts (link,num_likes,user_id) VALUES (%s,%s,(SELECT user_id from instagram_users WHERE user_account=%s)) ON CONFLICT (post_id, link) DO UPDATE SET num_likes=EXCLUDED.num_likes,user_id=EXCLUDED.user_id;

, которая дает мне Ошибка: нет уникального или исключающего ограничения соответствие спецификации ON CONFLICT

Запрос работает, если я включаю только post_id в качестве ограничения или включаю только ссылку в качестве ограничения (ie ON CONFLICT (post_id) или ON CONFLICT (ссылка)), но не оба. Я не могу придумать причину, почему это так. Кто-нибудь знает почему?

1 Ответ

1 голос
/ 06 апреля 2020

Именно по той причине, что это говорит вам - у вас нет уникального ограничения на (post_id, link) для включения предложения ON CONFLICT. Вы могли бы создать такое ограничение, но это кажется довольно бессмысленным, когда два ключа, составляющие составной ключ, уже индивидуально уникальны. Возможно, ON CONFLICT (link) - это именно то, что вы хотите, но не совсем ясно, чего вы пытаетесь достичь sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...