簡體   English   中英

ON CONFLICT 中的 Postgresql 多列

[英]Postgresql multiple columns in ON CONFLICT

如果該行中的每個單元格都是唯一的(當然不包括 id 字段),我只想插入一行所以我試過這個

INSERT INTO test (val, val2, val3) VALUES ('g', 'h', 'j') 
ON CONFLICT (val, val2, val3) DO NOTHING RETURNING id;

但事實證明這是無效的,因為傳遞給ON CONFLICT的字段必須受UNIQUE約束。 但我不希望那樣,我只希望 val、val2 和 var3 的排列是唯一的,我不希望它們單獨唯一。 在插入之后,無論是否插入,我都想返回 id 字段。 我該怎么做?

我通過像這樣創建 UNIQUE 解決了這個問題:

CREATE TABLE test (
  id SERIAL,
  val varchar(100),
  val2 varchar(100),
  val3 varchar(100),
  UNIQUE (val, val2, val3)
);

然后像這樣插入:

INSERT INTO test (val, val2, val3) VALUES ('a', 'b', 'c') ON CONFLICT (val, val2, val3) DO UPDATE SET val='a' RETURNING id;

即使沒有任何更新,它也會返回id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM