From 7d56c25e286959c8ec44df0f0da8285e752747fb Mon Sep 17 00:00:00 2001 From: Marco Slot Date: Wed, 14 Sep 2022 16:43:24 +0200 Subject: [PATCH] Fix escaping in sequence dependency queries (#6345) Co-authored-by: Marco Slot --- .../distributed/commands/alter_table.c | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/backend/distributed/commands/alter_table.c b/src/backend/distributed/commands/alter_table.c index 59a9d8bbc..64baa28a2 100644 --- a/src/backend/distributed/commands/alter_table.c +++ b/src/backend/distributed/commands/alter_table.c @@ -1604,6 +1604,8 @@ ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands, } else if (ShouldSyncTableMetadata(sourceId)) { + char *qualifiedTableName = quote_qualified_identifier(schemaName, sourceName); + /* * We are converting a citus local table to a distributed/reference table, * so we should prevent dropping the sequence on the table. Otherwise, we'd @@ -1612,8 +1614,8 @@ ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands, StringInfo command = makeStringInfo(); appendStringInfo(command, - "SELECT pg_catalog.worker_drop_sequence_dependency('%s');", - quote_qualified_identifier(schemaName, sourceName)); + "SELECT pg_catalog.worker_drop_sequence_dependency(%s);", + quote_literal_cstr(qualifiedTableName)); SendCommandToWorkersWithMetadata(command->data); } @@ -1903,11 +1905,17 @@ CreateWorkerChangeSequenceDependencyCommand(char *sequenceSchemaName, char *sequ char *sourceSchemaName, char *sourceName, char *targetSchemaName, char *targetName) { + char *qualifiedSchemaName = quote_qualified_identifier(sequenceSchemaName, + sequenceName); + char *qualifiedSourceName = quote_qualified_identifier(sourceSchemaName, sourceName); + char *qualifiedTargetName = quote_qualified_identifier(targetSchemaName, targetName); + StringInfo query = makeStringInfo(); - appendStringInfo(query, "SELECT worker_change_sequence_dependency('%s', '%s', '%s')", - quote_qualified_identifier(sequenceSchemaName, sequenceName), - quote_qualified_identifier(sourceSchemaName, sourceName), - quote_qualified_identifier(targetSchemaName, targetName)); + appendStringInfo(query, "SELECT worker_change_sequence_dependency(%s, %s, %s)", + quote_literal_cstr(qualifiedSchemaName), + quote_literal_cstr(qualifiedSourceName), + quote_literal_cstr(qualifiedTargetName)); + return query->data; }