Используя postgres_fdw, мне нужно создать внешние таблицы в указанной схеме, чтобы предотвратить столкновение имен. Чтобы изолировать проблему, которую у меня возникла, я настроил две тестовые базы постгрейсов в одном кластере, import_test и export_test. В Export_test есть таблица foreign_schema.aa. На import_test сервере, после выполнения других требований ИДП, я побежал:Почему postgres_fdw схемы с двойной квалификацией?
CREATE FOREIGN TABLE local_schema.aa(
id serial NOT NULL,
dat text
) SERVER export_server OPTIONS (table_name 'foreign_schema.aa');
Тогда:
SELECT * FROM local_schema.aa;
Когда я делаю это, я получаю:
ERROR: relation "local_schema.foreign_schema.aa" does not exist
CONTEXT: Remote SQL command: SELECT id, dat FROM local_schema."foreign_schema.aa"
Если я не» t сделать любую квалификацию схемы, как в:
CREATE FOREIGN TABLE aa(
id serial NOT NULL,
dat text
) SERVER export_server OPTIONS (table_name 'aa');
И переместите таблицу aa в общедоступную схему, выбор работает просто отлично.
Если команда «SELECT id», то FROM_ local_schema. «Foreign_schema.aa» буквально запускается на удаленном сервере, очевидно, почему это не работает: local_schema. «Foreign_schema.aa» действительно не существует на удаленном сервере. По какой-то причине postgres_fdw, как представляется, добавляет имя, указанное для table_name, в схему внешней таблицы.
Мне нужно указать схему в запросе выбора, потому что, если я этого не делаю не видит внешнюю таблицу. Достижение квалификации схемы, предшествующей выбору с настройкой пути поиска, также не помогает.
Есть ли что-то, что я делаю неправильно? Если нет, существует ли обходной путь, который разрешит мне схему - присвоить внешний стол?
EDIT: Per предложений @Craig Рингера, вот самодостаточная PSQL вход:
CREATE USER test_user SUPERUSER PASSWORD 'password';
SET ROLE test_user;
CREATE DATABASE import;
CREATE DATABASE export;
\c export test_user
CREATE SCHEMA export_schema;
CREATE TABLE export_schema.aa (
id serial PRIMARY KEY,
dat text
);
\c import test_user
CREATE EXTENSION postgres_fdw;
CREATE SERVER export_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'export', port '5432');
CREATE USER MAPPING FOR test_user
SERVER export_server
OPTIONS (user 'test_user', password 'password');
CREATE SCHEMA import_schema;
CREATE FOREIGN TABLE import_schema.aa(
id serial NOT NULL,
dat text
) SERVER export_server OPTIONS (table_name 'export_schema.aa');
SELECT * FROM import_schema.aa;
Что дает этот выход:
ERROR: relation "import_schema.export_schema.aa" does not exist
CONTEXT: Remote SQL command: SELECT id, dat FROM import_schema."export_schema.aa"
Просьба создать автономный тестовый сценарий в виде единого сценария SQL, который может быть запущен из 'psql' и передать его в качестве отчета об ошибке в список рассылки pgsql-bugs. Ссылка на этот пост для контекста. –
@CraigRinger У меня такая же проблема. Это когда-нибудь разрешалось? –
Я ничего не заметил. Попробуйте http://archives.postgresql.org/ –