1

我希望能够有效地将我们的 postgre 生产数据库的内容克隆到无主的本地数据库中。我已经成功地做到了,但这是一个费力的过程,有以下步骤

$ pg_dump [prod_db] > tempfile

[Go through tempfile manually removing all 60ish references to the owner, named 'postgres']

$ cat tempfile > psql [local_db]

否则,当我运行最后一步时,我收到一堆 SQL 错误消息说ERROR: role "postgres" does not exist. 我尝试使用匹配的'postgres'所有者重新创建本地数据库,但是a)我仍然遇到相同类型的错误,并且b)我不想为我的本地数据库设置所有者,如果这意味着我将拥有登录它。

如果我想在将来重新克隆它,是否有最佳实践/有效的方法?

4

2 回答 2

2

使用 -O 开关在转储中不定义所有者。

于 2017-03-22T01:07:21.463 回答
0

没有所有者集不是正常的 Postgres 设计。为了避免必须登录到您的 postgres 数据库,您可以设置一个 .pgpass 文件。这是一个纯文本文件,应设置为 600 权限。内容将如下所示:

hostname:port:database:username:password

每个连接可以在一条线上。

此外,对于本地数据库连接,假设您已正确设置其余安全性(ssh 证书等),您可以编辑 pg_hba.conf 文件并将本地连接身份验证方法设置为“信任”。这显然不建议用于生产或敏感数据。该行将如下所示:

local   all             all                                     trust

默认方法是“对等”。除非您在 .pgpass 文件中设置您的用户名,否则您仍然需要连接,psql -U postgres但您不需要输入密码。

于 2017-03-20T23:41:04.183 回答