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

huh*_*bhb 4 database postgresql

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

sudo -u postgres pg_dump -t _stats db30 | psql db8;
Run Code Online (Sandbox Code Playgroud)

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

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

Tom*_*ico 7

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

你必须做3个步骤:

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

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

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

注意:您可以使用trustpg_hba.conf 中的身份验证方法并避免第 2 步和第 3 步,但这确实过于宽松,您不应该使用它,即使在 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
Run Code Online (Sandbox Code Playgroud)

大概是在/etc/postgresql/9.3/main/pg_hba.conf或类似的。

编辑文件并更改已经存在的行(在文件末尾):

local   all             all                                     md5
host    all             all             127.0.0.1/32            md5
Run Code Online (Sandbox Code Playgroud)

现在重新启动服务器

sudo service postgresql restart
Run Code Online (Sandbox Code Playgroud)

为用户 postgres 设置密码

首次登录psql:

sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)

现在,在 psql 中,更改密码:

ALTER USER postgres PASSWORD 'your-password';
Run Code Online (Sandbox Code Playgroud)

pgpass 文件

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

chown $USER:$USER ~/.pgpass
chmod 600 ~/.pgpass
Run Code Online (Sandbox Code Playgroud)

现在在文件中写入这些行:

localhost:5432:*:postgres:your-password
127.0.0.1:5432:*:postgres:your-password
Run Code Online (Sandbox Code Playgroud)

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

准备好。现在您psql -U postgres无需输入密码即可登录 postgres 。