创建一个只有特定列的外部表

问题描述 投票:0回答:1

我想知道是否有办法在 PostgreSQL 中创建仅具有特定列和条件的外部表。例如,我看到有人建议使用此命令,但它实际上不起作用,因为底部的 OPTIONS

(table '')
实际上并不存在。

CREATE FOREIGN TABLE app_users (
id INT NOT NULL,
login VARCHAR(190),
email VARCHAR(190),
"name" VARCHAR(255)
) SERVER fdw_app
OPTIONS (
table '(SELECT id, login, email, "name" FROM public."user" WHERE login like ''app-%'')');

Sql返回可用选项只有

schema_name, table_name, use_remote_estimate, updatable, fetch_size

有实际的方法可以做到这一点还是不可能?

postgresql
1个回答
1
投票

你说得对,你提供的语法在 PostgreSQL 中无效,因为它不支持直接在

CREATE FOREIGN TABLE
语句中指定对外部表的查询。

但是,您可以通过在外部服务器端创建一个视图来实现类似的结果,该视图根据需要过滤数据,然后在本地 PostgreSQL 服务器中创建外部表以访问该视图。

  1. 连接到远程服务器并创建视图:
CREATE VIEW public.filtered_users AS
SELECT id, login, email, "name"
FROM public."user"
WHERE login LIKE 'app-%';
  1. 在您本地的 PostgreSQL 服务器中,创建一个外表来访问远程视图:
CREATE FOREIGN TABLE app_users (
  id INT NOT NULL,
  login VARCHAR(190),
  email VARCHAR(190),
  "name" VARCHAR(255)
) SERVER fdw_app
OPTIONS (
  schema_name 'public',
  table_name 'filtered_users'
);

通过这些步骤,您将在本地 PostgreSQL 服务器中拥有一个名为

app_users
的外部表,它对应于远程服务器中的过滤视图。然后,您可以像查询本地表一样查询
app_users
。请注意,此方法要求您有权访问远程服务器以创建视图。

相关问题
热门问答
最新问题