PostgreSQL - переименование базы данных - PullRequest
107 голосов
/ 27 сентября 2008

Мне нужно переименовать базу данных, но когда я делаю в PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld" он сказал мне, что не может.

Как я могу это сделать?

( Версия 8.3 в WindowsXP )

Обновление

  • Первое сообщение об ошибке: не удалось, потому что я был подключен к нему. Поэтому я выбрал другую базу данных и выполнил запросы.

  • Я получаю второе сообщение об ошибке, сообщающее, что пользователь установил соединение. Я вижу на экране PGAdmin много PID, но они неактивны ... Я не вижу, как их убить.

Ответы [ 5 ]

163 голосов
/ 27 сентября 2008

Попробуйте не указывать имя базы данных:

ALTER DATABASE people RENAME TO customers;

Также убедитесь, что в данный момент нет других клиентов, подключенных к базе данных. Наконец, попробуйте опубликовать сообщение об ошибке, которое он возвращает, чтобы мы могли получить немного больше информации.

72 голосов
/ 06 октября 2011

Для дальнейшего использования, вы должны быть в состоянии:

-- disconnect from the database to be renamed
\c postgres

-- force disconnect all other clients from the database to be renamed
SELECT pg_terminate_backend( pid )
FROM pg_stat_activity
WHERE pid <> pg_backend_pid( )
    AND datname = 'name of database';

-- rename the database (it should now have zero clients)
ALTER DATABASE "name of database" RENAME TO "new name of database";

Обратите внимание, что таблица pg_stat_activity столбец pid была названа procpid в версиях до 9.2. Поэтому, если ваша версия PostgreSQL ниже 9.2, используйте procpid вместо pid.

7 голосов
/ 25 августа 2013

Я только что наткнулся на это, и вот что сработало:

1) pdAdmin является одной из сессий. Вместо этого используйте psql.
2) Остановите службы pgBouncer и / или планировщика в Windows, поскольку они также создают сеансы

2 голосов
/ 27 сентября 2008

Вместо развертывания ядра (перезапуска сервера) вы должны попытаться закрыть те соединения, которые вас беспокоят, либо узнав, откуда они, и завершив клиентские процессы, либо с помощью функции pg_cancel_backend(). .

2 голосов
/ 27 сентября 2008

Unexist сказал мне в комментарии перезапустить базу данных, и она работает! Перезапуск базы данных уничтожает все существующие подключения, а затем я подключаюсь к другой базе данных и смог переименовать ее с помощью моего первоначального запроса.

Спасибо всем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...