Импортировать дамп 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»-пользователя базы данных, решит проблему. Могу ли я добиться этого?
Заранее спасибо большое, Вольф