簡體   English   中英

使用HugSQL通過ON CONFLICT DO UPDATE一次將多行插入PostgreSQL表中

[英]Using HugSQL to INSERT multiple rows at once into PostgreSQL table with ON CONFLICT DO UPDATE

我正在使用PostgreSQL,並希望使用ON CONFLICT DO UPDATE語句一次INSERT多行。

我有這樣的事情:

-- :name add-things! :! :n
INSERT INTO my_table (
  p,
  foo
)
VALUES :tuple*:values
ON CONFLICT (p) DO UPDATE
SET my_table.foo = foo

其中p是主鍵。

我這樣稱呼:

(add-things! {:values [[1 1] [2 3]]})

但這返回: org.postgresql.util.PSQLException: ERROR: column reference "foo" is ambiguous

使用SET my_table.foo = :foo (帶有關鍵字參數)會導致clojure.lang.ExceptionInfo: Parameter Mismatch: :foo parameter data not found ,因為在使用:tuple*:values語法時沒有關鍵字參數。

任何想法如何做到這一點? 也許通過在HugSQL查詢中使用Clojure代碼?

這里的問題是在沖突解決方案中僅使用foo “插入數據”中有一個foo,而實際表中有一個。 您需要以某種方式解決“插入數據”以解決該沖突。 文檔中所述的解決方案是:

conflict_action指定了另一種ON CONFLICT動作。 它可以是DO NOTHINGDO UPDATE子句,用於指定發生沖突時要執行的UPDATE操作的確切詳細信息。 ON CONFLICT DO UPDATESETWHERE子句可以使用表名(或別名)訪問現有行,並使用特殊excluded表訪問建議插入的行

所以

...
SET foo = excluded.foo

解決沖突。

暫無
暫無

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

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