在使用Amazon Aurora Postgres插入后执行SELECT的好的模式?

时间:2019-08-22 23:56:07

标签: postgresql amazon-rds-aurora

想象一下,您有一个Amazon Aurora Postgres数据库。您在一张表中执行INSERT。然后,您需要执行SELECT才能获取新添加记录的自动生成的CompanyId。您确定在INSERT发生与记录可用于运行SELECT的时间之间通常存在足够大的延迟。

我已经与同事讨论了一些可能的代码模式,以最好地处理此滞后时间。您认为最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

您不需要单独的SELECT语句。最好和最有效的选择是只使用returning子句:

insert into some_table (c1, c2, c3) 
values (...) 
returning *;

除了returning *之外,您还可以指定所需的列,例如:returning company_id


另一种选择是在插入后直接使用currval()lastval()来获取序列的值:

insert into some_table (..) 
values (...);

select lastval();

使用lastval()要求INSERT和SELECT之间的不同顺序不会生成其他值。如果不能保证,请使用currval()并指定序列的名称:

insert into some_table (...) 
values (...);

select currval('some_table_company_id_seq');

如果要避免对序列名称进行硬编码,请使用pg_get_serial_sequence()

select currval(pg_get_serial_sequence('some_table', 'company_id'));