我有一个生产数据库"PRODdb1",具有只读用户帐户。我需要查询(选择语句(此数据库并将数据插入名为"RPTdb1"的辅助数据库中。我最初计划仅根据我的选择在 PRODdb1 中创建一个临时表,但权限是问题所在。
我已经阅读了 dblink & postgres_fdw,但这些中的任何一个都可以解决我的问题吗?我不会创建外部表,因为我的 SELECT 正在从 PRODdb1 连接许多表,所以我不熟悉postgres_fdw是否仍然是我的用例的一个选项。
另一种选择是将 SELECT 的结果获取到 .CSV文件什么的。我在这里的主要障碍是我只有一个只读用户可以使用,但没有办法解决这个问题。
简单的答案是否定的。 如果不在 RPTdb1 中定义外表,则不能使用 postgres_fdw。 不过,这应该不是什么大问题,因为创建外部表非常容易。
我和你在同一条船上。 我们使用第三方产品(基于 Postgres 9.3(作为我们的生产数据库,我们拥有的用户角色非常严格(即只读访问、无复制、无法创建触发器/函数/表/等(。
我相信postgres_fdw具有您正在寻找的功能,但有一个警告。 本地报表服务器需要运行 PostgreSQL 版本 10(或至少运行 9.6(。 我们目前在本地服务器上使用 9.3,虽然简单的查询工作得很好,但任何更复杂的查询都需要很长时间,因为 9.3 中的 FDW 试图在能够执行 JOIN 甚至使用 WHERE 语句之前提取表中的所有数据。
版本 9.6:在返回结果之前将 JOIN 向下推送到远程数据库。
版本 10:在返回结果之前将聚合(如 COUNT 和 SUM(向下推送到远程数据库。
(我不确定哪个版本添加了将 WHERE 语句向下推送到远程数据库的功能,但我知道这在 9.5 中是不可能的(。
本周,我们正在将本地服务器升级到版本 10。 我可以尝试让您了解我们的进展,请随时这样做。