我正在尝试将一个表从一个数据库复制到另一个:
sudo -u postgres pg_dump -t _stats db30 | psql db8;
然而,我总是被要求提供密码,我不知道它是什么。有没有办法在没有pg_dump的情况下做到这一点?有没有办法让我在运行psql
时不会被要求输入密码?
注意,要进入postgres我必须运行sudo -u postgres psql
而不是psql
postgres服务器上的用户管理和权限是一个复杂的主题,但是您可能只在桌面上安装了一个服务器,并且只在本地主机上使用它,因此安全性不是那么重要。
你必须做三个步骤:
1)编辑pg_hba.conf文件并重启服务器
2)使用psql登录,并为postgres
用户设置密码
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与psql -U postgres
(没有sudo -u postgres
),但必须输入密码。为了避免每次都输入数字密码,可以设置pgpass文件。如果还不存在,则必须在主目录中创建一个名为.pgpass
的文件。该文件必须由您的用户拥有,并且只能由您的用户读取:
chown $USER:$USER ~/.pgpass
chmod 600 ~/.pgpass
现在将这些行写入文件:
localhost:5432:*:postgres:your-password
127.0.0.1:5432:*:postgres:your-password
也可以使用环境变量PGPASSWORD
: http://www.postgresql.org/docs/9.4/static/libpq-envars.html
准备好了。现在您可以使用psql -U postgres
登录postgres,而无需输入密码。