Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd90ced8

Browse files
committed
Add DISCARD SEQUENCES command.
DISCARD ALL will now discard cached sequence information, as well.Fabrízio de Royes Mello, reviewed by Zoltán Böszörményi, with somefurther tweaks by me.
1 parentc64e68f commitd90ced8

File tree

10 files changed

+53
-4
lines changed

10 files changed

+53
-4
lines changed

‎doc/src/sgml/ref/discard.sgml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ PostgreSQL documentation
2121

2222
<refsynopsisdiv>
2323
<synopsis>
24-
DISCARD { ALL | PLANS | TEMPORARY | TEMP }
24+
DISCARD { ALL | PLANS |SEQUENCES |TEMPORARY | TEMP }
2525
</synopsis>
2626
</refsynopsisdiv>
2727

@@ -66,6 +66,15 @@ DISCARD { ALL | PLANS | TEMPORARY | TEMP }
6666
</listitem>
6767
</varlistentry>
6868

69+
<varlistentry>
70+
<term><literal>SEQUENCES</literal></term>
71+
<listitem>
72+
<para>
73+
Discards all cached sequence values.
74+
</para>
75+
</listitem>
76+
</varlistentry>
77+
6978
<varlistentry>
7079
<term><literal>ALL</literal></term>
7180
<listitem>
@@ -83,6 +92,7 @@ UNLISTEN *;
8392
SELECT pg_advisory_unlock_all();
8493
DISCARD PLANS;
8594
DISCARD TEMP;
95+
DISCARD SEQUENCES;
8696
</programlisting></para>
8797
</listitem>
8898
</varlistentry>

‎src/backend/commands/discard.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@
1818
#include"commands/async.h"
1919
#include"commands/discard.h"
2020
#include"commands/prepare.h"
21+
#include"commands/sequence.h"
2122
#include"utils/guc.h"
2223
#include"utils/portal.h"
2324

2425
staticvoidDiscardAll(boolisTopLevel);
2526

2627
/*
27-
* DISCARD { ALL | TEMP | PLANS }
28+
* DISCARD { ALL |SEQUENCES |TEMP | PLANS }
2829
*/
2930
void
3031
DiscardCommand(DiscardStmt*stmt,boolisTopLevel)
@@ -39,6 +40,10 @@ DiscardCommand(DiscardStmt *stmt, bool isTopLevel)
3940
ResetPlanCache();
4041
break;
4142

43+
caseDISCARD_SEQUENCES:
44+
ResetSequenceCaches();
45+
break;
46+
4247
caseDISCARD_TEMP:
4348
ResetTempTableNamespace();
4449
break;
@@ -69,4 +74,5 @@ DiscardAll(bool isTopLevel)
6974
LockReleaseAll(USER_LOCKMETHOD, true);
7075
ResetPlanCache();
7176
ResetTempTableNamespace();
77+
ResetSequenceCaches();
7278
}

‎src/backend/commands/sequence.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,3 +1602,19 @@ seq_redo(XLogRecPtr lsn, XLogRecord *record)
16021602

16031603
pfree(localpage);
16041604
}
1605+
1606+
/*
1607+
* Flush cached sequence information.
1608+
*/
1609+
void
1610+
ResetSequenceCaches(void)
1611+
{
1612+
SeqTableData*next;
1613+
1614+
while (seqtab!=NULL)
1615+
{
1616+
next=seqtab->next;
1617+
free(seqtab);
1618+
seqtab=seqtab->next;
1619+
}
1620+
}

‎src/backend/parser/gram.y

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1674,7 +1674,7 @@ CheckPointStmt:
16741674

16751675
/*****************************************************************************
16761676
*
1677-
* DISCARD { ALL | TEMP | PLANS }
1677+
* DISCARD { ALL | TEMP | PLANS| SEQUENCES}
16781678
*
16791679
*****************************************************************************/
16801680

@@ -1703,6 +1703,13 @@ DiscardStmt:
17031703
n->target = DISCARD_PLANS;
17041704
$$ = (Node *) n;
17051705
}
1706+
|DISCARDSEQUENCES
1707+
{
1708+
DiscardStmt *n = makeNode(DiscardStmt);
1709+
n->target = DISCARD_SEQUENCES;
1710+
$$ = (Node *) n;
1711+
}
1712+
17061713
;
17071714

17081715

‎src/backend/tcop/utility.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2190,6 +2190,9 @@ CreateCommandTag(Node *parsetree)
21902190
caseDISCARD_TEMP:
21912191
tag="DISCARD TEMP";
21922192
break;
2193+
caseDISCARD_SEQUENCES:
2194+
tag="DISCARD SEQUENCES";
2195+
break;
21932196
default:
21942197
tag="???";
21952198
}

‎src/bin/psql/tab-complete.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2378,7 +2378,7 @@ psql_completion(char *text, int start, int end)
23782378
elseif (pg_strcasecmp(prev_wd,"DISCARD")==0)
23792379
{
23802380
staticconstchar*constlist_DISCARD[]=
2381-
{"ALL","PLANS","TEMP",NULL};
2381+
{"ALL","PLANS","SEQUENCES","TEMP",NULL};
23822382

23832383
COMPLETE_WITH_LIST(list_DISCARD);
23842384
}

‎src/include/commands/sequence.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ extern Datum pg_sequence_parameters(PG_FUNCTION_ARGS);
7474
externOidDefineSequence(CreateSeqStmt*stmt);
7575
externOidAlterSequence(AlterSeqStmt*stmt);
7676
externvoidResetSequence(Oidseq_relid);
77+
externvoidResetSequenceCaches(void);
7778

7879
externvoidseq_redo(XLogRecPtrlsn,XLogRecord*rptr);
7980
externvoidseq_desc(StringInfobuf,uint8xl_info,char*rec);

‎src/include/nodes/parsenodes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2543,6 +2543,7 @@ typedef enum DiscardMode
25432543
{
25442544
DISCARD_ALL,
25452545
DISCARD_PLANS,
2546+
DISCARD_SEQUENCES,
25462547
DISCARD_TEMP
25472548
}DiscardMode;
25482549

‎src/test/regress/expected/sequence.out

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,9 @@ SELECT nextval('sequence_test'::text);
163163
99
164164
(1 row)
165165

166+
DISCARD SEQUENCES;
167+
SELECT currval('sequence_test'::regclass);
168+
ERROR: currval of sequence "sequence_test" is not yet defined in this session
166169
DROP SEQUENCE sequence_test;
167170
-- renaming sequences
168171
CREATE SEQUENCE foo_seq;

‎src/test/regress/sql/sequence.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ SELECT setval('sequence_test'::regclass, 32);
7272
SELECT nextval('sequence_test'::text);
7373
SELECT setval('sequence_test'::regclass,99, false);
7474
SELECT nextval('sequence_test'::text);
75+
DISCARD SEQUENCES;
76+
SELECT currval('sequence_test'::regclass);
7577

7678
DROPSEQUENCE sequence_test;
7779

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp