仅当复合主键尚不存在时,如何批量插入行?

Posted

技术标签:

【中文标题】仅当复合主键尚不存在时,如何批量插入行?【英文标题】:How can I bulk insert rows only if a compound primary key don't already exist? 【发布时间】:2021-09-29 12:38:40 【问题描述】:

我有下一个简单的数据:

INSERT INTO test_table values
(19156a48-5097-412b-8564-ce3e1e430ea3, 1, 2020-12-11 09:21:48.380494),
(c6b91bf3-af67-4557-8c58-cb3664948723, 1, 2020-12-11 09:31:48.380494),
(103f3010-81a7-419c-8b35-6005dd880f07, 3, 2020-12-11 09:21:48.380494)

我想在表格中插入三个示例行。但我想从第 1 行或第 2 行(其中任何一个)插入一个,因为这些行在第 2 列具有相同的值;并且将插入第 3 行,因为只有该行具有第 2 列中的值 3。

你明白我的意思吗?

我不知道该怎么做。

【问题讨论】:

这是用于 Redshift DB 还是 postgres? 【参考方案1】:

在 PG 中有“on conflict”子句,当查询出现错误时执行操作:

INSERT INTO test_table values
(19156a48-5097-412b-8564-ce3e1e430ea3, 1, 2020-12-11 09:21:48.380494),
(c6b91bf3-af67-4557-8c58-cb3664948723, 1, 2020-12-11 09:31:48.380494),
(103f3010-81a7-419c-8b35-6005dd880f07, 3, 2020-12-11 09:21:48.380494)
ON CONFLICT (id) DO NOTHING;

只需将 id 更改为 pk col 的名称

【讨论】:

以上是关于仅当复合主键尚不存在时,如何批量插入行?的主要内容,如果未能解决你的问题,请参考以下文章

用于更改表添加复合主键的批量 SQL 语句

尝试插入具有复合主键的记录时出错

Cassandra 中使用复合主键的慢插入时间

java 主键重复处理

如何在 documentclient.batchWrite() 中使用复合主键?

使用 Cloudformation 创建具有复合主键的 DynamoDB