我正在探索pgsql_fdw模块,我遇到了以下情况:
我有一个本地数据库,它是远程数据库的副本,但数据不同。发展与生产。我想创建一个指向生产版本的外表。由于文档表明外表的名称必须是唯一的,所以我决定创建一个fdw模式并将所有外表放在其中。我表演了:
create foreign table foreign_table(columna bigint, columnb text)
server foreign_server;
然而显然pgsql_fdw在fully_qualified表名之间使用1对1映射,当然在foreign_server上不存在“fdw.foregin_table”,它是“public.foreign_table”,所以我得到:
ERROR: could not execute EXPLAIN for cost estimation
DETAIL: ERROR: schema "fdw" does not exist
在documentation中有一个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的选项是什么?是否有一个特定的选项来指定外部表名,而不是假设远程和本地是相同的?
答案 0 :(得分: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')
答案 1 :(得分:1)
根据要求推广我的评论解决方案:
想出如何使用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