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.

以外的其他东西