在Postgres中创建指向视图的外部表

15

使用Postgres Foreign Data Wrapper,是否可能创建一个指向视图而不是表的外部表?

3个回答

17

是的,这是可能的!

以下查询非常完美地运行:

CREATE FOREIGN TABLE facts(name character varying(255))
SERVER my_server 
OPTIONS (table_name 'facts');

facts 是在 my_server 中的视图而不是表格。


2
据我所知,如果与外键表的名称相同,则不必指定 table_name 选项。 - fphilipe
1
如果您使用IMPORT FOREIGN SCHEMA,则无需指定表定义,但必须在LIMIT TO子句中明确包含视图。 - OrangeDog

9

最近我也需要做同样的事情,以下是对我有效的步骤。所有这些命令都在本地 postgreSQL 数据库上运行。

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');

1
我有同样的问题。在pgadmin4中使用GUI命令:Create->Foreign Table...,应用于表格时可以正常运行;但是应用于视图时无法正常运行,会得到一个空表。
对于视图,我使用了以下代码,它可以正常工作:
IMPORT FOREIGN SCHEMA remote_schema_name
LIMIT TO (remote_view_name)
FROM SERVER remote_host_map_name INTO local_shema_name;

原因是,对于表格而言,pgadmin4可以在构建SQL语句时创建与远程表相同的列,但对于视图而言,在构建SQL语句时不会创建任何列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接