【发布时间】:2021-07-31 23:59:28
【问题描述】:
我有一个带有GENERATED ALWAYS AS IDENTITY 列id 的非空PostgreSQL 表。我使用 C++ 绑定 pqxx::stream_to 进行批量插入,我假设它使用 COPY FROM。我的问题是我想知道新创建的行的ids,但是COPY FROM 没有RETURNING 子句。我看到了几种可能的解决方案,但我不确定它们中的任何一个是否是好的,或者哪个是最不坏的:
-
通过
COPY FROM手动提供ids,注意提供身份序列将提供的值,然后将序列与setval(...)同步。 -
首先将数据流式传输到具有自定义索引列的临时表以进行排序。然后做类似
并且取决于身份序列产生升序数字以将它们与INSERT INTO foo (col1, col2) SELECT ttFoo.col1, ttFoo.col2 FROM ttFoo ORDER BY ttFoo.idx RETURNING foo.idttFoo.idx相关联的事实(我也不能这样做RETURNING ttFoo.idx,因为只有插入的行可用于不包含idx的行) -
在插入之前查询标识序列的当前值,然后检查哪些行是新的。
我认为这是一种常见情况,但我没有看到明显正确的解决方案。你有什么推荐的?
【问题讨论】:
标签: postgresql libpqxx