13

我已连接到 schema apm

试图执行一个函数并得到以下错误:

ERROR:  user mapping not found for "postgres"

数据库连接信息 说:

apm on postgres@PostgreSQL 9.6

psql version: PostgreSQL 9.6.3, compiled by Visual C++ build 1800, 64-bit

如何解决此错误?

4

3 回答 3

18

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

您可以通过执行这样的查询来添加它:

 CREATE USER MAPPING
    FOR postgres
 SERVER remote_server_name
OPTIONS (user 'bob', password 'secret');

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

SELECT srvname
  FROM pg_foreign_table t
  JOIN pg_foreign_server s ON s.oid = t.ftserver
 WHERE ftrelid = 'schemaname.tablename'::regclass
于 2017-11-30T14:09:07.650 回答
4

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

CREATE USER MAPPING — 定义用户到外部服务器的新映射

您的函数使用某些服务器查询外部表,您需要对其进行用户映射。显然它存在于用户所有者,而不是你。或者只使用创建了用户映射的用户运行该函数。

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

SELECT um.*,rolname
  FROM pg_user_mapping um
  JOIN pg_roles r ON r.oid = umuser
  JOIN pg_foreign_server fs ON fs.oid = umserver;
于 2017-11-30T14:08:52.977 回答
4

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

CREATE USER MAPPING
FOR PUBLIC
SERVER remote_server_name
OPTIONS (user 'bob', password 'secret');
于 2019-05-17T10:18:11.747 回答