ОПЦИИ для pgsql_fdw

Я изучаю модуль pgsql_fdw и столкнулся со следующей ситуацией:

У меня есть локальная БД, которая является копией удаленной БД, но данные разные. Разработка против производства. Я хотел создать внешнюю таблицу, указывающую на производственную версию. Поскольку в документах указано, что имя внешней таблицы должно быть уникальным, я решил создать схему fdw и поместить в нее все сторонние таблицы. Я провел:

create foreign table foreign_table(columna bigint, columnb text)  
server foreign_server;

Очевидно, однако, что pgsql_fdw использует сопоставление 1 к 1 между именами таблиц full_qualified, и, конечно, «fdw.foregin_table» не существует на иностранном_сервере, это «public.foreign_table», и поэтому я получаю:

ERROR:  could not execute EXPLAIN for cost estimation  
DETAIL:  ERROR:  schema "fdw" does not exist

В документации есть параметр options для CREATE FOREIGN TABLE:

OPTIONS ( option 'value' [, ...] )  
Options to be associated with the new foreign table.  
The allowed option names and values are specific to each foreign data wrapper  
and are validated using the foreign-data wrapper's validator function.  
Option names must be unique.

Мои вопросы: Какие ВАРИАНТЫ для pgsql_fdw? Есть ли конкретная возможность указать имя внешней таблицы, а не предполагать, что удаленная и локальная таблицы одинаковы?


person Ketema    schedule 06.06.2012    source источник
comment
Выяснил, как вместо этого использовать модуль dblink contrib. Установите модуль dblink contrib, настройте соединение dblink: выберите dblink_connect('connection_name', 'host=hostname dbname=fdbname user=user password=secret');создайте обёртку сторонних данных dblink_fdw validator postgresql_fdw_validator;создайте server dblink_fdw_server обёртка сторонних данных dblink_fdw options (hostaddr 'hostname', dbname 'fdbname'); выберите * из dblink ('connection_name', 'выберите * из public.foreigntable') as external_table (columna bigint, columnb text); postgresql.org/docs/9.1/static/contrib-dblink- connect.html   -  person Ketema    schedule 06.06.2012
comment
Можете ли вы добавить это как решение? Я был бы рад проголосовать.   -  person Chris Travers    schedule 02.04.2013
comment
Я должен буду убедиться, что он не устарел. Я уверен, что код fdw продвинулся вперед после этого вопроса.   -  person Ketema    schedule 02.04.2013
comment
Мой отзыв о 9.2 таков, что изменений было не много. В любом случае, пока это помечено как 9.1, основные функции и поведение не изменятся в стабильной версии.   -  person Chris Travers    schedule 02.04.2013


Ответы (2)


Вам нужны следующие опции:

CREATE FOREIGN TABLE your_local_shema.your_local_table (
  field_1 int, field_2 int, ...
)
SERVER foreign_server
OPTIONS (SCHEMA_NAME 'your_remote_schema', TABLE_NAME 'your_remote_table')
person Andrés    schedule 19.02.2014

В соответствии с просьбой продвигать мое решение для комментариев, чтобы ответить:

Выяснил, как вместо этого использовать модуль dblink contrib. Установите модуль dblink contrib, настройте соединение dblink:

select dblink_connect('connection_name', 'host=hostname dbname=fdbname user=user password=secret');
create foreign data wrapper dblink_fdw validator postgresql_fdw_validator;
create server dblink_fdw_server foreign data wrapper dblink_fdw options(hostaddr 'hostname', dbname 'fdbname');
select * from dblink('connection_name', 'select * from public.foreigntable') as foreign_table(columna bigint, columnb text);

Ссылка: postgresql.org/docs/9.1/static/contrib-dblink-connect .html

person Ketema    schedule 03.04.2013