diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/commands/discard.c | 8 | ||||
-rw-r--r-- | src/backend/commands/sequence.c | 16 | ||||
-rw-r--r-- | src/backend/parser/gram.y | 9 | ||||
-rw-r--r-- | src/backend/tcop/utility.c | 3 |
4 files changed, 34 insertions, 2 deletions
diff --git a/src/backend/commands/discard.c b/src/backend/commands/discard.c index 76f3ab672ad..9010368f577 100644 --- a/src/backend/commands/discard.c +++ b/src/backend/commands/discard.c @@ -18,13 +18,14 @@ #include "commands/async.h" #include "commands/discard.h" #include "commands/prepare.h" +#include "commands/sequence.h" #include "utils/guc.h" #include "utils/portal.h" static void DiscardAll(bool isTopLevel); /* - * DISCARD { ALL | TEMP | PLANS } + * DISCARD { ALL | SEQUENCES | TEMP | PLANS } */ void DiscardCommand(DiscardStmt *stmt, bool isTopLevel) @@ -39,6 +40,10 @@ DiscardCommand(DiscardStmt *stmt, bool isTopLevel) ResetPlanCache(); break; + case DISCARD_SEQUENCES: + ResetSequenceCaches(); + break; + case DISCARD_TEMP: ResetTempTableNamespace(); break; @@ -69,4 +74,5 @@ DiscardAll(bool isTopLevel) LockReleaseAll(USER_LOCKMETHOD, true); ResetPlanCache(); ResetTempTableNamespace(); + ResetSequenceCaches(); } diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index ddfaf3bd293..3ec6b7654aa 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -1602,3 +1602,19 @@ seq_redo(XLogRecPtr lsn, XLogRecord *record) pfree(localpage); } + +/* + * Flush cached sequence information. + */ +void +ResetSequenceCaches(void) +{ + SeqTableData *next; + + while (seqtab != NULL) + { + next = seqtab->next; + free(seqtab); + seqtab = seqtab->next; + } +} diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index a9812af7cfc..0efe1705e24 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -1674,7 +1674,7 @@ CheckPointStmt: /***************************************************************************** * - * DISCARD { ALL | TEMP | PLANS } + * DISCARD { ALL | TEMP | PLANS | SEQUENCES } * *****************************************************************************/ @@ -1703,6 +1703,13 @@ DiscardStmt: n->target = DISCARD_PLANS; $$ = (Node *) n; } + | DISCARD SEQUENCES + { + DiscardStmt *n = makeNode(DiscardStmt); + n->target = DISCARD_SEQUENCES; + $$ = (Node *) n; + } + ; diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index b1023c4e882..fffaa35d344 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -2190,6 +2190,9 @@ CreateCommandTag(Node *parsetree) case DISCARD_TEMP: tag = "DISCARD TEMP"; break; + case DISCARD_SEQUENCES: + tag = "DISCARD SEQUENCES"; + break; default: tag = "???"; } |