【发布时间】:2021-12-21 21:11:24
【问题描述】:
我有一个如下所示的访问者表结构,并且我已经为这个表创建了 upsert 过程。当我调用该过程时,它返回ERROR: pq: there is no unique or exclusion constraint matching the ON CONFLICT specification。任何人都可以建议所需的更改。
CREATE TABLE visitors
(
id SERIAL NOT NULL,
facebook TEXT DEFAULT NULL,
github TEXT DEFAULT NULL,
linkedin TEXT NOT NULL,
twitter TEXT DEFAULT NULL
);
ALTER TABLE visitors ADD CONSTRAINT visitors_primary_key PRIMARY KEY (id);
ALTER TABLE visitors ADD CONSTRAINT visitors_urls UNIQUE (facebook, github, linkedin, twitter);
upsert 过程:
CREATE OR REPLACE PROCEDURE visitors_upsert
(
_facebook TEXT DEFAULT NULL,
_github TEXT DEFAULT NULL,
_linkedin TEXT DEFAULT '',
_twitter TEXT DEFAULT NULL
)
LANGUAGE SQL
AS $$
INSERT INTO visitors
(
facebook,
github,
linkedin
)
VALUES
(
_facebook,
_github,
_linkedin,
_twitter
)
ON CONFLICT (linkedin)
DO UPDATE
SET
facebook = _facebook,
github = _github,
twitter = _twitter
$$;
CALL visitors_upsert('facebook', 'github', 'linkedin', 'twitter')
演示:https://dbfiddle.uk/?rdbms=postgres_13&fiddle=21ed4fa7526a0744feecbbe43f8944f6
【问题讨论】:
标签: sql postgresql stored-procedures upsert