Postgres:找不到“ postgres”的用户映射

Vik*_*am 3 sql mapping postgresql postgres-fdw

我已连接到架构“ APM”

尝试执行功能并出现以下错误:

ERROR: user mapping not found for "postgres"

数据库连接信息说:postgres @ PostgreSQL 9.6上的apm

psql版本:PostgreSQL 9.6.3,由Visual C ++ build 1800编译,64位

如何解决此错误。谢谢。

Łuk*_*ski 10

这意味着您正在尝试使用外部表,并且您的角色(在本例中为postgres)没有为远程服务器定义用户和密码。

您可以通过执行以下查询来添加它:

 CREATE USER MAPPING
    FOR postgres
 SERVER remote_server_name
OPTIONS (user 'bob', password 'secret');
Run Code Online (Sandbox Code Playgroud)

您可以像这样获取表的服务器名称:

SELECT srvname
  FROM pg_foreign_table t
  JOIN pg_foreign_server s ON s.oid = t.ftserver
 WHERE ftrelid = 'schemaname.tablename'::regclass
Run Code Online (Sandbox Code Playgroud)


Vao*_*sun 5

https://www.postgresql.org/docs/current/static/sql-createusermapping.html

\n\n
\n

CREATE USER MAPPING \xe2\x80\x94 定义用户到外部服务器的新映射\n

\n
\n\n

您的函数使用某些服务器查询外部表,为此您需要用户映射。显然它是为用户所有者而存在的,而不是为您而存在。或者仅使用已创建用户映射的用户运行该函数。

\n\n

您可以通过以下方式查看它们:

\n\n
SELECT um.*,rolname\n  FROM pg_user_mapping um\n  JOIN pg_roles r ON r.oid = umuser\n  JOIN pg_foreign_server fs ON fs.oid = umserver;\n
Run Code Online (Sandbox Code Playgroud)\n


Zay*_*try 5

如果你想为所有用户创建用户映射,你可以这样做

CREATE USER MAPPING
FOR PUBLIC
SERVER remote_server_name
OPTIONS (user 'bob', password 'secret');
Run Code Online (Sandbox Code Playgroud)