From 82f52a7876c4257d13cb22a733656ca7a9232b38 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Thu, 19 Jan 2017 10:40:01 +0100 Subject: [PATCH] skip RenameSequenceGTM() for SET SCHEMA with the same schema Commit bc4996e6 in upstream changed how CheckSetNamespace() handles moving to the same namespace, e.g. when executing ALTER SEQUENCE s1.s SET SCHEMA s1; On PostgreSQL 9.5 this fails with an error, but since bc4996e6 the command is silently ignored (which was already the case for other object types - ALTER EXTENSION etc). XL however relied on the ERROR interrupting the program flow before the call to RenameSequenceGTM(), so after bc4996e6 it was executed anyway. GTM however does not expect unnecessary sequence renames, and treats this as an error in seq_add_seqinfo. --- src/backend/commands/tablecmds.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 2daeb6403e..ecaa7c32a0 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -12124,7 +12124,8 @@ AlterTableNamespaceInternal(Relation rel, Oid oldNspOid, Oid nspOid, /* Rename also sequence on GTM for a sequence */ if (IS_PGXC_LOCAL_COORDINATOR && rel->rd_rel->relkind == RELKIND_SEQUENCE && - !IsTempSequence(RelationGetRelid(rel))) + !IsTempSequence(RelationGetRelid(rel)) && + (oldNspOid != nspOid)) { char *seqname = GetGlobalSeqName(rel, NULL, NULL); char *newseqname = GetGlobalSeqName(rel, NULL, get_namespace_name(nspOid)); @@ -12333,7 +12334,8 @@ AlterSeqNamespaces(Relation classRel, Relation rel, #ifdef PGXC /* Change also this sequence name on GTM */ if (IS_PGXC_LOCAL_COORDINATOR && - !IsTempSequence(RelationGetRelid(seqRel))) + !IsTempSequence(RelationGetRelid(seqRel)) && + (oldNspOid != newNspOid)) { char *seqname = GetGlobalSeqName(seqRel, NULL, NULL); char *newseqname = GetGlobalSeqName(seqRel, NULL, get_namespace_name(newNspOid)); -- 2.39.5