Назад | Перейти на главную страницу

PostgreSQL 9.1 не восстанавливается, потому что «пользователь подключен»

Я переношу базу данных в рамках переноса веб-сайта. Я раньше не использовал PostgreSQL, поэтому предполагаю, что я мало о нем знаю (в основном я использую MySQL). Мы не можем напрямую подключить машины для использования pg_dump -h host1 dbname | psql -h host2 dbname уловка.

Я использовал pg_dumpall -c сбросить все базы данных в файл SQL с помощью команд DROP. Затем я загрузил резервную копию на целевой сервер через SCP. Но я не могу импортировать тот же экспортированный файл, используя psql -U root postgres backup.sql из-за этой ошибки:

DROP DATABASE
ERROR:  database "exfi" is being accessed by other users
DETAIL:  There are 1 other session(s) using the database.

Я подозреваю, что это вызвано тем, что приложение Ruby on Rails поддерживает постоянное соединение с базой данных. Мы используем Phusion Passenger 3.0.11 с Apache 2.2.21 на RHEL 16.

Я использовал touch tmp/restart.txt чтобы сообщить Пассажиру перезапустить веб-сайт перед импортом, но, похоже, это не убивает существующего работника.

Из-за Phusion Passenger Apache необходимо выключить, прежде чем вы сможете восстановить базу данных. Ты можешь использовать apachectl graceful-stop перед восстановлением базы данных, затем apachectl start после. Вероятно, есть более изящный способ сделать целевую страницу «Обслуживание системы» во время процесса, но я позволю настоящему системному администратору вмешаться в это (и все остальное, что я пропустил).