Golang pq sql驱动程序:批量导入后获取记录ID

时间:2015-01-08 08:30:51

标签: sql postgresql go

使用goq的pq sql驱动程序,我按照in the pq docs所述进行批量导入。有没有办法可以获取创建记录的ID?

1 个答案:

答案 0 :(得分:0)

我假设您在COPY语句中引用的id列基于此类语句创建的序列生成序列:

CREATE SEQUENCE my_serial_name;

这意味着您可以像这样查询id的当前值:

SELECT currval('my_serial_name');

将返回id计数器的当前值。

回答对这种方法的任何进一步怀疑:

  • 此声明线程本地且完全隔离
  • 上述声明证明此方法在多用户环境中非常有用,并且将使用此序列在表上执行未经其他插入查询修改的正确值

如需进一步阅读,请参阅网址:

  

序列函数,如表9-42所示(包括currval),   提供简单,多用户安全的方法来获得连续的   来自序列对象的序列值。

https://www.postgresql.org/docs/9.3/static/functions-sequence.html

  

因为nextval和setval调用永远不会回滚,所以顺序   如果"无间隙"序列号的分配是   需要。可以通过使用独占来构建无间隙分配   锁定包含柜台的桌子;但这个解决方案很多   比序列对象更昂贵,特别是如果很多事务   同时需要序列号。

https://www.postgresql.org/docs/9.5/static/sql-createsequence.html

  

要设置事务的事务隔离级别,请使用   命令SET TRANSACTION。

     

重要说明:某些PostgreSQL数据类型和函数有特殊规则   关于交易行为。特别是对a做出的改变   序列(因此使用serial声明的列的计数器)   对所有其他事务立即可见,并且不会滚动   如果进行更改的事务中止,则返回。见第9.16节   和第8.1.4节。

https://www.postgresql.org/docs/9.5/static/transaction-iso.html

我希望这能回答你的问题。 Postgresql是一个很棒的数据库,在掌握了详细信息后可以成为一个非常强大的工具。祝好运! :d