我有一個如下所示的訪問者表結構,我已經為這個表創建了 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);
插入程序:
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
uj5u.com熱心網友回復:
上沒有唯一約束linkedin。要么創建一個,要么使用除INSERT ... ON CONFLICT.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/353898.html
標籤:sql PostgreSQL 存储过程 插入
上一篇:查找該部門教師的最高薪水
下一篇:兩個不同組中具有不同列值的記錄數
