Как я могу удалить базу данных Postgres-XL, имя которой начинается с цифры?
Я действительно новичок в Postgres-XL, и я только что создал тестовый кластер, работающий с postgres-xl-9.5r1.3.
Он настроен на три узла, один узел GTM и два с обоими координаторами и датодами на каждом.
Я планирую балансировку нагрузки между этими двумя узлами, но на данный момент я просто подключаю и выполняю SQL-запросы на первом координаторе.
При тестировании некоторых основных команд я создал несколько тестовых баз данных, одна из которых имеет полностью числовое имя "213", а другая с именем, начинающимся с цифры "123test". При попытке удалить любой из них я получаю синтаксическую ошибку:
postgres=# DROP DATABASE "213";
ERROR: syntax error at or near "213"
postgres=# drop database 123test;
ERROR: syntax error at or near "123"
LINE 1: drop database 123test;
postgres=# drop database "123test";
ERROR: syntax error at or near "123"
Удаление базы данных, имя которой начинается с буквы, работает просто отлично.
Кто-нибудь знает, как обойти и удалить эти базы данных? Я что-то не так делаю, или это проблема Postgres-XL?
1 ответ
Я связался с командой Postgres-XL через их список рассылки с сообщениями об ошибках, и кажется, что это ошибка, связанная с тем, как указываются имена баз данных при отправке команд на удаленный узел.
Следующий патч, предоставленный командой Postgres-XL, должен это исправить:
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index cc8e06e..b73be0a 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -807,7 +807,8 @@ standard_ProcessUtility(Node *parsetree,
DropDBCleanConnection(stmt->dbname);
/* Clean also remote Coordinators */
- sprintf(query, "CLEAN CONNECTION TO ALL FOR DATABASE %s;", stmt->dbname);
+ sprintf(query, "CLEAN CONNECTION TO ALL FOR DATABASE %s;",
+ quote_identifier(stmt->dbname));
ExecUtilityStmtOnNodes(query, NULL, sentToRemote, true, EXEC_ON_ALL_NODES, false);
}