12

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

4

3 回答 3

15

对的,这是可能的!

以下查询完美运行:

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

在哪里facts是视图my_server而不是表。

于 2014-05-16T15:07:08.887 回答
8

最近我不得不做同样的事情,这里是对我有用的步骤。所有这些命令都在本地 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');
于 2018-02-19T09:32:57.837 回答
1

我也有同样的问题。在 postgresql-11 的 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 语句中不创建列。

于 2020-06-22T06:34:25.677 回答