我想知道是否有办法在 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 中无效,因为它不支持直接在
CREATE FOREIGN TABLE
语句中指定对外部表的查询。
但是,您可以通过在外部服务器端创建一个视图来实现类似的结果,该视图根据需要过滤数据,然后在本地 PostgreSQL 服务器中创建外部表以访问该视图。
CREATE VIEW public.filtered_users AS
SELECT id, login, email, "name"
FROM public."user"
WHERE login LIKE 'app-%';
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
。请注意,此方法要求您有权访问远程服务器以创建视图。