外部数据包装 "postgres_fdw" 不存在(即使存在)

Foreign-data wrapper "postgres_fdw" does not exist (even if it does)

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

CREATE EXTENSION postgres_fdw;
GRANT USAGE ON FOREIGN DATA WRAPPER postgres_fdw TO my_user;

然后从 my_user 执行以下操作时:

CREATE SERVER my_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (...);

显示此错误消息:

Query 1 ERROR: ERROR:  foreign-data wrapper "postgres_fdw" does not exist

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

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

怎么会,即使在被授予 USAGE 之后,用户 my_user 仍然无法 see/use postgres_fdw 外部数据包装器,好像后者没有存在吗?是否需要更多步骤?

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

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