【发布时间】:2014-05-16 15:07:08
【问题描述】:
是否可以使用 Postgres Foreign Data Wrapper 创建一个指向视图而不是表的外部表?
【问题讨论】:
是否可以使用 Postgres Foreign Data Wrapper 创建一个指向视图而不是表的外部表?
【问题讨论】:
是的,有可能!
以下查询完美运行:
CREATE FOREIGN TABLE facts(name character varying(255))
SERVER my_server
OPTIONS (table_name 'facts');
其中facts 是my_server 中的视图而不是表格。
【讨论】:
table_name 选项与外部表的名称相同,则不必指定它。
IMPORT FOREIGN SCHEMA,也不必指定表定义,但必须在LIMIT TO 子句中显式包含视图。
最近我不得不做同样的事情,以下是对我有用的步骤。所有这些命令都在本地 postgreSQL DB 上运行。
CREATE EXTENSION postgres_fdw;
CREATE SERVER remote_server_name
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '10.10.10.10', port '5432', dbname 'remote_db_name');
CREATE USER MAPPING FOR local_user_name
SERVER remote_server_name
OPTIONS (user 'remote_user', password 'remote_password');
CREATE FOREIGN TABLE local_table_name (
id NUMERIC NOT NULL,
row TEXT,
another_row INTEGER,
whatever_row TEXT
)
SERVER remote_server_name
OPTIONS (schema_name 'public', table_name 'remote_table_name');
【讨论】:
我也有同样的问题。 在 postgresql-11 的 pgadmin4 中,如果使用 GUI 命令:创建 -> 外部表... 在桌子上,它可以工作;但在视图中,它不起作用,你会得到一个空表。
为了查看,我使用此代码,它有效:
IMPORT FOREIGN SCHEMA remote_schema_name
LIMIT TO (remote_view_name)
FROM SERVER remote_host_map_name INTO local_shema_name;
原因是,对于表,pgadmin4 可以在构造 SQL 语句中创建与远程表相同的列,但对于视图,它在构造 SQL 语句中不创建列。
【讨论】: