переименовать базу данных postgresql из командной строки

Я запускаю эту команду из bat-файла:

start/wait/d "C:\Program Files\PostgreSQL\9.1\bin\" psql.exe --port 5432 --username postgres --dbname alter_db --file ./batch/rename_database.sql

И я получаю эту ошибку журнала:

ОШИБКА CEST: синтаксическая ошибка в или около

«ï»¿ALTER» в символе 1 CEST STATEMENT: ALTER DATABASE postgres RENAME TO postgres_old;

rename_database.sql имеет следующее содержание: ALTER DATABASE postgres RENAME TO postgres_old;


person pmelch    schedule 12.08.2013    source источник


Ответы (2)


Я бы сказал, что ваш файл ./batch/rename_database.sql был создан с меткой порядка следования байтов Unicode. psql это не нравится. Удалите спецификацию и повторите попытку.

Цитирую статью по ссылке:

Представление UTF-8 спецификации — это последовательность байтов 0xEF, 0xBB, 0xBF. Текстовый редактор или веб-браузер, интерпретирующий текст как ISO-8859-1 или CP1252, отобразит для этого символы .

person Craig Ringer    schedule 12.08.2013
comment
Спасибо @Крейг Рингер! Это работает - как я получил отметку, я понятия не имею. - person pmelch; 12.08.2013

Шаг 1-> Прежде всего, отключитесь от базы данных, которую необходимо переименовать.

Шаг 2-> отключите всех клиентов от базы данных, которую нужно переименовать.

SELECT pg_terminate_backend(pid )
FROM pg_stat_activity
WHERE pid <> pg_backend_pid( )
    AND datname = 'db_name_to_be_renamed';

Шаг 3-> Затем переименуйте базу данных

ALTER DATABASE "db_name_to_be_renamed" RENAME TO "new_db_name";
person Nishant Bajracharya    schedule 05.06.2017
comment
Я могу переименовывать базы данных только при подключении к psql с пользователем с достаточными правами и без указания какой-либо конкретной базы данных. Голая команда psql ИЛИ psql -U postgres должна позволять переименовывать ваши БД. Подключение с использованием -U с другим пользователем, а затем изменение с помощью заданной роли postgres у меня не работает. - person user1767316; 18.07.2017
comment
то, что @user1767316 прокомментировал выше, было единственным способом переименовать базу данных, что вызвало у меня проблемы в Postgres. - person muammar; 23.01.2020