summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/commands/sequence.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c
index 0ccbe37a1b..ed50208d51 100644
--- a/src/backend/commands/sequence.c
+++ b/src/backend/commands/sequence.c
@@ -182,6 +182,7 @@ DefineSequence(ParseState *pstate, CreateSeqStmt *seq)
GTM_Sequence increment = 1;
bool cycle = false;
bool is_restart;
+ char *seqname;
#endif
/* Unlogged sequences are not implemented -- not clear if useful. */
@@ -279,6 +280,8 @@ DefineSequence(ParseState *pstate, CreateSeqStmt *seq)
if (owned_by)
process_owned_by(rel, owned_by, seq->for_identity);
+ seqname = GetGlobalSeqName(rel, NULL, NULL);
+
heap_close(rel, NoLock);
/* fill in pg_sequence */
@@ -309,8 +312,6 @@ DefineSequence(ParseState *pstate, CreateSeqStmt *seq)
*/
if (IS_PGXC_LOCAL_COORDINATOR)
{
- char *seqname = GetGlobalSeqName(rel, NULL, NULL);
-
/* We also need to create it on the GTM */
if (CreateSequenceGTM(seqname,
increment,
@@ -1212,6 +1213,7 @@ do_setval(Oid relid, int64 next, bool iscalled)
{
xl_seq_rec xlrec;
XLogRecPtr recptr;
+ Page page = BufferGetPage(buf);
XLogBeginInsert();
XLogRegisterBuffer(0, buf, REGBUF_WILL_INIT);
@@ -1222,9 +1224,12 @@ do_setval(Oid relid, int64 next, bool iscalled)
recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG);
+ PageSetLSN(page, recptr);
elm->cached = elm->last;
}
+ END_CRIT_SECTION();
+
UnlockReleaseBuffer(buf);
relation_close(seqrel, NoLock);