从UNIQUE规则修复没有Exception的PostgreSQL请求

问题描述 投票:0回答:1

我有两张桌子:

CREATE TABLE recruiter (
        nickname TEXT PRIMARY KEY NOT NULL,
        url_account TEXT NOT NULL,
        UNIQUE (nickname)
);

CREATE TABLE proposal (
        header TEXT NOT NULL,
        url_proposal TEXT NOT NULL,
        time_addition TIMESTAMP NOT NULL,
        nickname TEXT NOT NULL,
        UNIQUE (url_proposal, header),
        FOREIGN KEY (nickname) REFERENCES recruiter (nickname)
);

我用脚本在提议表数据中插入:

INSERT INTO proposal (header, url_proposal, time_addition, nickname) VALUES ((?), (?), (?), (?))

有时我有重复和规则UNIQUE (url_proposal, header)抛出:

PSQLException: ERROR: duplicate key value violates unique constraint "proposal_url_proposal_header_key"

请帮我修复我的脚本,以便不抛出异常,但脚本的工作方式相同。没有重复,没有Exception在提案表中插入我的数据(header, url_proposal, time_addition, nickname)在一个请求中。

postgresql
1个回答
2
投票

如果要拒绝新行:

INSERT INTO proposal (header, url_proposal, time_addition, nickname) 
VALUES ('header', 'url', now(), 'nick')
ON CONFLICT (url_proposal, header) DO NOTHING;

或者如果要更新现有行:

INSERT INTO proposal (header, url_proposal, time_addition, nickname) 
VALUES ('header', 'url', now(), 'nick')
ON CONFLICT (url_proposal, header)
DO UPDATE SET time_addition = excluded.time_addition, nickname = excluded.nickname;
© www.soinside.com 2019 - 2024. All rights reserved.