Я переношу базу данных в рамках переноса веб-сайта. Я раньше не использовал 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
после. Вероятно, есть более изящный способ сделать целевую страницу «Обслуживание системы» во время процесса, но я позволю настоящему системному администратору вмешаться в это (и все остальное, что я пропустил).