Postgresql Postgres:使用dblink的“角色不存在”,但确实存在

Postgresql Postgres:使用dblink的“角色不存在”,但确实存在,postgresql,postgresql-9.2,dblink,Postgresql,Postgresql 9.2,Dblink,这太奇怪了。我正在尝试使用dblink进行简单的选择,如下所示: 选择*FROM dblink'dbname=my\u db\u name,user=my\u user, 密码=密码,主机地址=127.0.0.1','选择操作,对象, 从我的_表中创建_at,id'作为deACTION VARCHAR,OBJECT VARCHAR, 在时间戳处创建,id INT 我立即收到一条错误消息: PG::SqlclientUnableToEstablishSqlconnection:错误:无法 建立连接

这太奇怪了。我正在尝试使用dblink进行简单的选择,如下所示:

选择*FROM dblink'dbname=my\u db\u name,user=my\u user, 密码=密码,主机地址=127.0.0.1','选择操作,对象, 从我的_表中创建_at,id'作为deACTION VARCHAR,OBJECT VARCHAR, 在时间戳处创建,id INT

我立即收到一条错误消息:

PG::SqlclientUnableToEstablishSqlconnection:错误:无法

建立连接详细信息:致命:角色my_用户不存在

但是如果我在本地连接到psql并使用\du打印出用户列表,您将看到它的列表:

                               List of roles
   Role name   |                   Attributes                   | Member of 
---------------+------------------------------------------------+-----------
 MyName        | Superuser, Create role, Create DB, Replication | {}
 my_user       | Create DB                                      | {}
我真的不知道如何解决这个问题,谷歌搜索也帮不了我什么忙。有没有想过为什么它会给我这个错误信息

当我使用超级用户帐户连接时,我不需要指定密码,dblink运行正常,所以我很困惑。以下是pg_hba.conf提供的:

local   all             all                                     trust
local   all             all                                     md5

host    all             all             192.168.33.1/24         trust

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             127.0.0.1/32            md5

# IPv6 local connections:
host    all             all             ::1/128                 trust
host    all             all             ::1/128                 md5

提前谢谢

您正在连接字符串中使用逗号。错误消息显示:

FATAL: role "my_user," does not exist
这表明了这种情况下的确切错误。这是。您应该仅在连接字符串中用空格分隔项目,如:

SELECT * FROM dblink('dbname=my_db_name user=my_user password=password hostaddr=127.0.0.1', 'SELECT action, object, created_at, id FROM my_table') AS de(ACTION VARCHAR, OBJECT VARCHAR, created_at TIMESTAMP, id INT)

您正在连接字符串中使用逗号。错误消息显示:

FATAL: role "my_user," does not exist
这表明了这种情况下的确切错误。这是。您应该仅在连接字符串中用空格分隔项目,如:

SELECT * FROM dblink('dbname=my_db_name user=my_user password=password hostaddr=127.0.0.1', 'SELECT action, object, created_at, id FROM my_table') AS de(ACTION VARCHAR, OBJECT VARCHAR, created_at TIMESTAMP, id INT)

尝试从连接字符串中删除逗号

SELECT * FROM dblink('dbname=my_db_name  user=my_user password=password hostaddr=127.0.0.1', 'SELECT action, object, created_at, id FROM my_table') AS de(ACTION VARCHAR, OBJECT VARCHAR, created_at TIMESTAMP, id INT)
这将解决它尝试作为my_用户进行身份验证的问题

其次,您的pg_hba配置是一个问题。因为您首先拥有“信任”方法,所以将使用它。请尝试将“md5”项置于“信任”项之前,或删除“信任”项。首先为您自己的postgres帐户设置密码,以便在需要密码时仍然可以进行身份验证

第二个问题的原因是,如果为您连接的主机名启用了“信任”,它将在不需要密码的情况下对用户进行身份验证,并且由于非超级用户没有密码无法连接,因此将无法连接


最后,运行调用dblink的查询的用户必须使用密码进行身份验证。因此,如果您使用“信任”身份验证连接到数据库,然后运行dblink,您也会得到一个错误。要解决此问题,请更改为md5身份验证并使用密码连接。

尝试从连接字符串中删除逗号

SELECT * FROM dblink('dbname=my_db_name  user=my_user password=password hostaddr=127.0.0.1', 'SELECT action, object, created_at, id FROM my_table') AS de(ACTION VARCHAR, OBJECT VARCHAR, created_at TIMESTAMP, id INT)
这将解决它尝试作为my_用户进行身份验证的问题

其次,您的pg_hba配置是一个问题。因为您首先拥有“信任”方法,所以将使用它。请尝试将“md5”项置于“信任”项之前,或删除“信任”项。首先为您自己的postgres帐户设置密码,以便在需要密码时仍然可以进行身份验证

第二个问题的原因是,如果为您连接的主机名启用了“信任”,它将在不需要密码的情况下对用户进行身份验证,并且由于非超级用户没有密码无法连接,因此将无法连接


最后,运行调用dblink的查询的用户必须使用密码进行身份验证。因此,如果您使用“信任”身份验证连接到数据库,然后运行dblink,您也会得到一个错误。若要解决此问题,请更改为md5身份验证并使用密码连接。

也许我的用户是使用前面/后面的空格创建的?选择“>”| | rolname | | | |的输出中是否有可见的空格?可能是my_用户使用前面/后面的空格创建的?select'>'| | rolname | |的输出中是否有可见的空格