我有一个带有只读用户帐户的生产数据库“ PRODdb1”。我需要查询(选择语句)此数据库并将数据插入名为“ RPTdb1”的辅助数据库中。我最初计划仅从我的选择中在PRODdb1中创建一个临时表,但是权限是问题。
我已经阅读了dblink和postgres_fdw,但是这些方法都可以解决我的问题吗?我不会创建外部表,因为我的SELECT从PRODdb1连接了许多表,所以我不知道postgres_fdw是否仍然可以用作我的用例。
另一种选择是将SELECT结果保存到.CSV文件中的任何方法。我在这里的主要阻止因素是,我只有一个只读用户可以使用,但无法解决该问题。
答案 0 :(得分:1)
简单的答案是否定的。如果未在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。我可以尝试让您了解我们的最新进展,随时可以这样做。