ERROR: pq: there is no unique or exclusion constraint matching the ON CONFLICT specification
ERROR: pq: there is no unique or exclusion constraint matching the ON CONFLICT specification
我有这个访问者 table 结构,如下所示,我已经为这个 table 创建了更新插入过程。当我调用过程时它 returns 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
linkedin
没有唯一约束。要么创建一个,要么使用 INSERT ... ON CONFLICT
.
以外的其他东西
我有这个访问者 table 结构,如下所示,我已经为这个 table 创建了更新插入过程。当我调用过程时它 returns 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
linkedin
没有唯一约束。要么创建一个,要么使用 INSERT ... ON CONFLICT
.