Discussion:
Query plan when using currval
David Rowley
2018-05-09 22:22:04 UTC
Permalink
bcaas=> explain analyze select id from log_statement where id = (select currval('log_statement_id_seq'));
I know Tom has answered your question, but you may be interested in
INSERT RETURNING as this will save you from having to do this to
lookup the ID of the last inserted sequence value.

https://www.postgresql.org/docs/10/static/sql-insert.html
--
David Rowley http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
Steve Baldwin
2018-05-09 22:32:01 UTC
Permalink
Thanks Tom and David. My current logic flow was to do an insert and then a
bit later, and update the same row. The update was using 'where id =
currval(...)' and was getting slower and slower as the table grew (surprise
surprise). I realise I can solve my performance issue in a couple of ways,
but I think I'm going to refactor it and try to avoid the update.

I really appreciate the insight.

Steve
bcaas=> explain analyze select id from log_statement where id = (select
currval('log_statement_id_seq'));
I know Tom has answered your question, but you may be interested in
INSERT RETURNING as this will save you from having to do this to
lookup the ID of the last inserted sequence value.
https://www.postgresql.org/docs/10/static/sql-insert.html
--
David Rowley http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
Loading...