diff options
author | Robert Haas | 2013-10-07 19:55:56 +0000 |
---|---|---|
committer | Robert Haas | 2013-10-07 19:55:56 +0000 |
commit | 16a906f535082fcf3d8c6732d8e941e037bc6d5e (patch) | |
tree | 06a53e2a1a093341bf963d15af1cc7c6e664b435 | |
parent | 689746c045b169edbc694d6cf9176fe5f6c0b264 (diff) |
Make DISCARD SEQUENCES also discard the last used sequence.
Otherwise, we access already-freed memory. Oops.
Report by Michael Paquier. Fix by me.
-rw-r--r-- | src/backend/commands/sequence.c | 2 | ||||
-rw-r--r-- | src/test/regress/expected/sequence.out | 3 | ||||
-rw-r--r-- | src/test/regress/sql/sequence.sql | 2 |
3 files changed, 7 insertions, 0 deletions
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index eba7cad6ec3..f3344c6207d 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 37e9a8cfa1a..8fcb70015fb 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 31cbc926c02..be5e9a97bf4 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'); |