在不使用sudo -u postgres和密码的情况下运行psql和pg_dump

5
我正在尝试从一个数据库复制一张表到另一个数据库:
sudo -u postgres pg_dump -t _stats db30 | psql db8;

然而,我总是被要求输入密码,而我不知道这是什么密码。有没有一种方法可以不使用pg_dump来实现这个过程?有没有一种方法,使得当我运行psql时不需要输入密码?

请注意,要进入postgres,我必须运行sudo -u postgres psql而不是仅仅运行psql。


为什么你必须使用 sudo 命令?难道不能只使用 psql -U postgres 命令吗?如果需要提供密码,请参考:https://dev59.com/q2w15IYBdhLWcg3wxunL(但是这需要在 Linux 用户 postgres 下执行,而不是你正在使用的用户)。 - user330315
1个回答

9

用户管理和权限是关于PostgreSQL服务器的一个复杂的话题,但您可能只在台式机上安装了一个服务器,并仅在本地主机上使用它,所以安全性并不是那么重要。

您需要执行以下3个步骤:

1) 编辑pg_hba.conf文件并重新启动服务器

2) 使用psql登录并为用户postgres设置密码

3) 编辑(或创建)文件~/.pgpass

注意:您可以在pg_hba.conf中使用身份验证方法trust,并避免步骤2和3,但这样做实在太宽容了,即使在本地主机上也不应该使用它。

pg_hba.conf文件

要了解pg_hba.conf文件,请阅读此处:http://www.postgresql.org/docs/9.4/static/auth-pg-hba-conf.html

基本上,如果您的服务器位于本地主机上且安全性不重要,则可以简单地允许所有用户使用 md5 身份验证方法连接。 如果您不知道该文件在哪里,请使用此命令:

locate pg_hba.conf

可能在 /etc/postgresql/9.3/main/pg_hba.conf 或类似位置。

编辑该文件并更改已经存在的行,使其变为如下(在文件末尾):

local   all             all                                     md5
host    all             all             127.0.0.1/32            md5

现在请使用以下命令重新启动服务器:
sudo service postgresql restart

为用户postgres设置密码

首先登录psql:

sudo -u postgres psql

现在,在psql中更改密码:

ALTER USER postgres PASSWORD 'your-password';

pgpass文件

现在,您可以使用psql -U postgres(不需要sudo -u postgres)登录psql,但必须输入密码。为了避免每次都输入密码,您可以设置pgpass文件。如果不存在,请在您的主目录下创建一个名为.pgpass的文件。该文件必须属于您的用户,并且只能由您的用户进行读取:

chown $USER:$USER ~/.pgpass
chmod 600 ~/.pgpass

现在在文件中写入这些代码行:
localhost:5432:*:postgres:your-password
127.0.0.1:5432:*:postgres:your-password

您也可以使用环境变量 PGPASSWORDhttp://www.postgresql.org/docs/9.4/static/libpq-envars.html

准备就绪。现在,您可以使用命令 psql -U postgres 登录到 postgres,而无需输入密码。


即使我更改了密码,它仍然显示“root”用户的密码验证失败。 - huhh hhbhb
只需运行 psql -U postgres,无需使用sudo。 - Tom-db
我的用户名是rahul,所以这个命令是像 chown $rahul:$rahul ~/.pgpass 吗?因为它仍然在要求密码,我已经将 .pgpass 和我的 databasedumpscript.py 文件放在同一个路径下。 - Piyush S. Wanare
请不要使用 $rahul,这是错误的。像答案中所解释的那样,使用 $USER。 - Tom-db

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接