]> granicus.if.org Git - postgresql/commitdiff
Make DISCARD SEQUENCES also discard the last used sequence.
authorRobert Haas <rhaas@postgresql.org>
Mon, 7 Oct 2013 19:55:56 +0000 (15:55 -0400)
committerRobert Haas <rhaas@postgresql.org>
Mon, 7 Oct 2013 19:55:56 +0000 (15:55 -0400)
Otherwise, we access already-freed memory.  Oops.

Report by Michael Paquier.  Fix by me.

src/backend/commands/sequence.c
src/test/regress/expected/sequence.out
src/test/regress/sql/sequence.sql

index eba7cad6ec36138f9982c6cc62212d6b4008d12d..f3344c6207d513f1d795fdc5cf3169df05d9d5f4 100644 (file)
@@ -1617,4 +1617,6 @@ ResetSequenceCaches(void)
                free(seqtab);
                seqtab = next;
        }
+
+       last_used_seq = NULL;
 }
index 37e9a8cfa1afdea6b749b6813fbd6e5b4d0a08b0..8fcb70015fb58e5b22355e48f89fd2d25276d4aa 100644 (file)
@@ -344,6 +344,9 @@ SELECT lastval();
       99
 (1 row)
 
+DISCARD SEQUENCES;
+SELECT lastval();
+ERROR:  lastval is not yet defined in this session
 CREATE SEQUENCE seq2;
 SELECT nextval('seq2');
  nextval 
index 31cbc926c029a468c3407e2ad9d9f4e22bdb04b0..be5e9a97bf40e8c5afd8951faebd6fb0b491bdb8 100644 (file)
@@ -154,6 +154,8 @@ SELECT nextval('seq');
 SELECT lastval();
 SELECT setval('seq', 99);
 SELECT lastval();
+DISCARD SEQUENCES;
+SELECT lastval();
 
 CREATE SEQUENCE seq2;
 SELECT nextval('seq2');