diff options
Diffstat (limited to 'src/backend/commands')
| -rw-r--r-- | src/backend/commands/discard.c | 8 | ||||
| -rw-r--r-- | src/backend/commands/sequence.c | 16 |
2 files changed, 23 insertions, 1 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; + } +} |
