外部数据包装器“postgres_fdw”不存在(即使存在)

Jiv*_*van 3 sql postgresql foreign-data-wrapper postgresql-10

使用 PostgreSQL 10.10,来自超级用户postgres

CREATE EXTENSION postgres_fdw;
GRANT USAGE ON FOREIGN DATA WRAPPER postgres_fdw TO my_user;
Run Code Online (Sandbox Code Playgroud)

然后在执行以下操作时my_user

CREATE SERVER my_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (...);
Run Code Online (Sandbox Code Playgroud)

显示此错误消息:

Query 1 ERROR: ERROR:  foreign-data wrapper "postgres_fdw" does not exist
Run Code Online (Sandbox Code Playgroud)

以下是当前活动的外部数据包装器的列表(来自 psql):

postgres=# \dew
                      List of foreign-data wrappers
     Name     |  Owner   |       Handler        |       Validator
--------------+----------+----------------------+------------------------
 postgres_fdw | postgres | postgres_fdw_handler | postgres_fdw_validator
(1 row)
Run Code Online (Sandbox Code Playgroud)

为什么即使在被授予之后USAGE,用户my_user仍然无法看到/使用 postgres_fdw 外部数据包装器,就好像后者不存在一样?还需要采取更多步骤吗?

Lau*_*lbe 5

由于外部数据包装器不在模式中,唯一的解释是CREATE EXTENSIONCREATE SERVER在不同的数据库中运行(外部数据包装器不是“全局对象”)。您必须在同一个数据库中运行这些语句。

顺便说一句,显式CREATE FOREIGN DATA WRAPPER会导致错误,因为扩展已经创建了该名称的外部数据包装器。