不使用密码运行psql和pg_dump,不使用sudo -u postgres

时间:2015-08-14 05:25:02

标签: database postgresql

我正在尝试将一个表从一个数据库复制到另一个数据库:

sudo -u postgres pg_dump -t _stats db30 | psql db8;

然而,我总是被要求输入密码,我不知道它是什么。有没有办法在没有pg_dump的情况下做到这一点?有没有办法在运行psql时不能要求我输入密码?

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

1 个答案:

答案 0 :(得分:4)

postgres服务器上的用户管理和权限是一个复杂的主题,但您可能只在桌面上安装了一台服务器,并且只在localhost上使用它,因此安全性并不那么重要。

你必须做3个步骤:

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

2)使用psql登录并为用户postgres

设置密码

3)编辑(或创建)〜/ .pgpass

文件

注意:您可以在pg_hba.conf中使用身份验证方法trust并避免执行第2步和第3步,但这确实是 TOO 许可,您不应该使用它,甚至在localhost上。

pg_hba.conf文件

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

基本上,如果您的服务器在localhost上并且安全性无关紧要,您可以简单地允许所有用户使用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而无需输入密码。