Импортировать дамп psql без изменений в pg_hba.conf?
Некоторое время я работал над сценарием установки Tryton ERP в системах Linux. Между тем, большинство вещей работает, но я не могу обойти одну проблему:
Мне нужно предоставить возможность импортировать шаблон базы данных, содержащий несколько настроек, чтобы упростить доступ к Tryton. Используя эту команду:
psql -U $db_user -d $db_version < *.sql
работает, но сначала мне нужно изменить в pg_hba.conf строку
local all all peer
к
local all all trust
или похожие.
Существует ли какой-либо способ выполнить такую команду без этого изменения? - Сценарий установки запускается с привилегиями sudo, поэтому я ищу команду, достаточно мощную, чтобы игнорировать ограничения, установленные вpg_hba.conf
.
Существует ли что-то подобное?
3 ответа
У вас должна быть возможность импортировать дамп от имени суперпользователя (PostgreSQL). При создании кластера PostgreSQL для пользователя, который будет запускать кластер базы данных, создается (супер)пользователь PostgreSQL. В системах Debianpostgres
системный пользователь создан для запуска кластера(ов) PostgreSQL. По умолчанию для системного пользователя не создается пользователь PostgreSQL.
Со стандартной линией
local all all peer
пользователю системы разрешен доступ только к гипотетической учетной записи PostgreSQL. Если эта учетная запись не существует, вы не сможете подключиться при запуске от имени .
Если вы замените эту строку на
local all all trust
тогда любой локальный пользователь сможет подключиться как любой пользователь PostgreSQL, что, конечно, нежелательно. Но это позволяет вам запускатьpsql
какroot
системный пользователь и пользователь PostgreSQL.
Правильное решение вашей проблемы — не изменять конфигурацию по умолчанию вpg_hba.conf
и импортировать ваш дамп с помощью команды типа
sudo -u postgres -- psql -d $db_version < *.sql
Ваши дампы должны содержать команды, необходимые для установки владельца объектов базы данных в$db_user
Пользователь PostgreSQL.
The --
часть отделяет команду, котораяsudo
запустится из вариантов. Я добавил его, чтобы гарантировать, что он не будет пытаться интерпретировать-d $db_version
. Не уверен, нужно ли это.
На форуме Tryton я получил решение:
Добавьте в команду -h localhost, чтобы не вносить никаких изменений в pg_hba.conf:
psql -U DB_user -d database_name -h localhost < DB_dump_name.sql
Особая благодарность Эдди! (:
К сожалению, возникла еще одна проблема:
При регистрации базы данных с помощью установки Tryton (команда trytond-admin) появляется следующее сообщение об ошибке:
psycopg2.errors.DuplicateTable: relation "ir_configuration_id_seq" already exists
Эта проблема не возникает, когда я выполняю импорт от своего собственного пользователя базы данных («я») (что потребует изменения pg_hba.conf). Я предполагаю, что запуск команды psql с привилегиями «postgres», но для «me»-пользователя базы данных, решит проблему. Могу ли я добиться этого?
Заранее спасибо большое, Вольф