summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Haas2013-10-07 19:55:56 +0000
committerRobert Haas2013-10-07 19:55:56 +0000
commit16a906f535082fcf3d8c6732d8e941e037bc6d5e (patch)
tree06a53e2a1a093341bf963d15af1cc7c6e664b435 /src
parent689746c045b169edbc694d6cf9176fe5f6c0b264 (diff)
Make DISCARD SEQUENCES also discard the last used sequence.
Otherwise, we access already-freed memory. Oops. Report by Michael Paquier. Fix by me.
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/sequence.c2
-rw-r--r--src/test/regress/expected/sequence.out3
-rw-r--r--src/test/regress/sql/sequence.sql2
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');