外部数据包装 "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 EXTENSION
和 CREATE SERVER
在不同的数据库中 运行(外部数据包装器不是“全局的”对象”)。您必须 运行 这些语句在同一个数据库中。
顺便说一下,显式 CREATE FOREIGN DATA WRAPPER
会导致错误,因为扩展已经创建了同名的外部数据包装器。
使用 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 EXTENSION
和 CREATE SERVER
在不同的数据库中 运行(外部数据包装器不是“全局的”对象”)。您必须 运行 这些语句在同一个数据库中。
顺便说一下,显式 CREATE FOREIGN DATA WRAPPER
会导致错误,因为扩展已经创建了同名的外部数据包装器。