pgsql_fdw的选项

时间:2012-06-06 15:46:29

标签: postgresql postgresql-9.1

我正在探索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的选项是什么?是否有一个特定的选项来指定外部表名,而不是假设远程和本地是相同的?

2 个答案:

答案 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