我在另一个postgreSQL数据库中实现了postgreSQL 9.3中的Foreign data wrapper
CREATE SERVER app_db
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'postgres', host 'localhost');
CREATE USER MAPPING for postgres
SERVER app_db
OPTIONS (user 'postgres', password 'XXXX');
CREATE FOREIGN TABLE location_local
(
id integer,
name character varying
)
SERVER app_db OPTIONS (table_name 'location')
SELECT * FROM location_local;
这一切都工作得很好,因为位置表在公共模式中。但我还想访问pg_catalog中的数据。当我按照相同的程序访问数据时,它会给我错误。
ERROR: relation "public.pg_catalog.pg_index" does not exist
是否可以使用FDW或其他方式访问目录中的数据?
您可以尝试在外部表定义中使用schema_name
选项:
CREATE FOREIGN TABLE foreign_index (
-- ...
)
SERVER app_db
OPTIONS (
schema_name 'pg_catalog',
table_name 'pg_index'
);
但是这可能不起作用,因为pg_catalog
实际上不是一个模式,而是一个系统编目。如果是这种情况,您仍然可以使用dblink
模块在外部数据库上运行查询。