导入 psql 转储而不更改 pg_hba.conf?

导入 psql 转储而不更改 pg_hba.conf?

一段时间以来,我一直在为 Linux 系统上的 Tryton ERP 编写安装脚本。与此同时,大多数事情都正常进行,但我无法克服一个挑战:

我需要提供导入数据库模板的选项,该模板包含多个设置,以便更轻松地访问 Tryton。使用此命令:

psql -U $db_user -d $db_version < *.sql

可以,但我首先必须在 pg_hba.conf 中更改行

local   all all peer

local   all all trust

或类似的东西。

是否存在任何方法可以在不进行此更改的情况下执行这样的命令pg_hba.conf? - 安装脚本以 sudo 权限运行,因此我正在寻找一个足够强大的命令来忽略设置的限制pg_hba.conf

有这样的事情存在吗?

答案1

您应该能够以 (PostgreSQL) 超级用户的身份导入转储。创建 PostgreSQL 集群时,将为运行数据库集群的用户创建一个 PostgreSQL (超级)用户。在 Debian 系统上,将postgres创建一个系统用户来运行 PostgreSQL 集群。默认情况下,不会为系统用户创建 PostgreSQL 用户root

使用标准线pg_hba.conf

local all all peer

系统root用户仅被允许访问一个假设的PostgreSQL 帐户。如果此帐户不存在,则在以root身份运行时无法连接。psqlroot

如果你将该行替换为

local all all trust

然后任何本地用户可以连接任何psqlPostgreSQL 用户,这当然是不可取的。但是这允许您以root系统用户和 PostgreSQL 用户身份运行$db_user

解决您的问题的正确方法是不要修改默认配置,pg_hba.conf而是使用如下命令导入转储

sudo -u postgres -- psql -d $db_version < *.sql

您的转储应该包含将数据库对象所有者设置为 PostgreSQL 用户所需的命令$db_user

--部分将要运行的命令sudo与选项分开。我添加了它以确保它不会尝试解释-d $db_version。不确定是否需要它。

答案2

不幸的是,又出现了一个问题:

使用 Tryton 安装(trytond-admin 命令)注册数据库时出现此错误消息:

psycopg2.errors.DuplicateTable: relation "ir_configuration_id_seq" already exists

当我使用我自己的(“我”)数据库用户执行导入时,不会出现此问题(这需要更改 pg_hba.conf)。我猜想,以“postgres”权限运行 psql 命令,但对于“我”数据库用户,可以解决问题。我能做到这一点吗?

提前感谢,Wolf

答案3

来自Tryton 论坛,我得到了解决方案:

在命令中添加 -h localhost,这样就不需要在 pg_hba.conf 中进行任何更改:

psql -U DB_user -d database_name -h localhost < DB_dump_name.sql

特别感谢 Eddy!(:

相关内容