Как я могу удалить базу данных 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);
                }
Другие вопросы по тегам