一段时间以来,我一直在为 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
身份运行时无法连接。psql
root
如果你将该行替换为
local all all trust
然后任何本地用户可以连接任何psql
PostgreSQL 用户,这当然是不可取的。但是这允许您以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!(: