Оболочка сторонних данных postgres_fdw не существует (даже если она существует)

Используя 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 по-прежнему не может видеть/использовать оболочку сторонних данных postgres_fdw, как будто последней не существует? Нужны ли дополнительные шаги?


person Jivan    schedule 20.04.2020    source источник
comment
Я подозреваю, что вы делаете что-то отличное от того, что вы говорите, что делаете, иначе ваше второе утверждение потерпит неудачу.   -  person Laurenz Albe    schedule 20.04.2020
comment
@LaurenzAlbe, вы были правы, я сначала попытался создать оболочку, а затем установил расширение. Начиная снова с новой установки и не создавая оболочку самостоятельно (только устанавливая расширение), к сожалению, приводит к тому же результату.   -  person Jivan    schedule 20.04.2020
comment
Затем вы должны запускать операторы в разных базах данных.   -  person Laurenz Albe    schedule 20.04.2020
comment
ах!!! это должно быть! Я наивно полагал, что внешние обертки данных не зависят от базы данных — РЕДАКТИРОВАТЬ: так оно и было, спасибо за вашу помощь. Вы можете сделать это ответом, который я приму для будущих людей, которые столкнутся с этой проблемой.   -  person Jivan    schedule 20.04.2020


Ответы (1)


Поскольку сторонние оболочки данных не живут в схеме, единственным объяснением может быть то, что CREATE EXTENSION и CREATE SERVER запускались в разных базах данных (чужие оболочки данных не являются глобальными объектами). Вы должны запускать эти операторы в одной и той же базе данных.

Кстати, явное CREATE FOREIGN DATA WRAPPER привело бы к ошибке, так как оболочка сторонних данных с таким именем уже создана расширением.

person Laurenz Albe    schedule 20.04.2020