From 16a906f535082fcf3d8c6732d8e941e037bc6d5e Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Mon, 7 Oct 2013 15:55:56 -0400 Subject: [PATCH] Make DISCARD SEQUENCES also discard the last used sequence. Otherwise, we access already-freed memory. Oops. Report by Michael Paquier. Fix by me. --- src/backend/commands/sequence.c | 2 ++ src/test/regress/expected/sequence.out | 3 +++ src/test/regress/sql/sequence.sql | 2 ++ 3 files changed, 7 insertions(+) diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index eba7cad6ec..f3344c6207 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -1617,4 +1617,6 @@ ResetSequenceCaches(void) free(seqtab); seqtab = next; } + + last_used_seq = NULL; } diff --git a/src/test/regress/expected/sequence.out b/src/test/regress/expected/sequence.out index 37e9a8cfa1..8fcb70015f 100644 --- a/src/test/regress/expected/sequence.out +++ b/src/test/regress/expected/sequence.out @@ -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 diff --git a/src/test/regress/sql/sequence.sql b/src/test/regress/sql/sequence.sql index 31cbc926c0..be5e9a97bf 100644 --- a/src/test/regress/sql/sequence.sql +++ b/src/test/regress/sql/sequence.sql @@ -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'); -- GitLab