我已经try 使用主机变量PGPASSWORD.pgpass,这两个变量都不允许我对数据库进行身份验证.我已经获得了相应的权限,并try 了:

export PGPASSWORD=mypass and PGPASSWORD=mypass

密码确实包含一个\,但是我把它用单引号PGPASS='mypass\'括起来,它仍然不会进行身份验证.

我在 run :

pg_dump dbname -U username -Fc

我仍然收到

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"

推荐答案

The Quick Solution

问题是它试图根据您当前的用户名执行本地peer身份验证.如果要使用密码,必须用-h指定主机名.

pg_dump dbname -U username -h localhost -F c

Explanation

这是因为在你的pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

这告诉Postgres对本地用户使用peer身份验证,这要求Postgres用户名与您当前的系统用户名匹配.第二行是指使用主机名的连接,允许您通过md5方法使用密码进行身份验证.

My Preferred Development Config

NOTE:这只能在单用户 workstation 上使用.这可能会在生产或多用户机器上导致严重的安全漏洞.

在针对本地postgres实例进行开发时,我喜欢将本地身份验证方法更改为trust.这将允许任何没有密码的用户通过本地unix套接字连接到postgres.只需将peer改为trust并重新加载postgres即可.

# Don't require a password for local connections
local   all             all                                     trust

Postgresql相关问答推荐

到第二天的Postgres计时器

为什么32632投影中的几何图形并不完美?

在插入时创建一个触发器,在PostgreSQL中的另一个表上创建另一个触发器

使用psql的copy语句时如何压缩数据?

PostgreSQL - 我应该如何使用 first_value()?

postgresql 更新错误ERROR: invalid input syntax for type boolean:

表或列名不能以数字开头?

在执行 postgresql 函数时提交事务

!= 和 <> 运算符有什么区别?

在 Spring Boot 上使用 Hibernate 映射 PostGIS 几何点字段

Docker Compose + Spring Boot + Postgres 连接

将 PostgreSQL 配置为仅适用于 LOCALHOST 或指定的 ip + 端口

设置 Phoenix 框架和 Ecto 以使用 UUID:如何插入生成的值?

为 postgresql 存储过程设置隔离级别

获取json列键为空的记录

try 为 ror 应用程序设置 postgres,出现错误 - fe_sendauth:no password supplied

PostgreSQL:如何在用户级别设置 search_path?

PostGIS - 将多面体转换为单面体

实时监控 PostgreSQL 查询的应用程序?

使用 PostgreSQL 进行字母数字排序