sql - 我可以在没有定义外部表的情况下使用 postgres_fdw 吗?
问题描述
我有一个生产数据库“PRODdb1”,具有只读用户帐户。我需要查询(选择语句)这个数据库并将数据插入到名为“RPTdb1”的辅助数据库中。我最初计划从我的选择中只在 PRODdb1 中创建一个临时表,但是权限是问题所在。
我已经阅读了 dblink 和 postgres_fdw,但是这些都可以解决我的问题吗?我不会创建外部表,因为我的 SELECT 正在加入来自 PRODdb1 的许多表,所以我不熟悉 postgres_fdw 是否仍然是我的用例的一个选项。
另一种选择是将 SELECT 的结果获取到 .CSV 文件或其他内容的任何方法。我的主要障碍是我只有一个只读用户可以使用,但无法解决这个问题。
解决方案
简单回答是不。如果没有在 RPTdb1 中定义外部表,则不能使用 postgres_fdw。不过,这应该不是什么大问题,因为创建外部表非常容易。
我和你在同一条船上。我们为我们的生产数据库使用第 3 方产品(基于 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。我可以尝试让您了解我们的最新进展,您也可以这样做。
推荐阅读
- c++ - 与授予私有类成员访问权限的公共方法相关的编译器错误
- java - 遵循 mkyong 指南后 Postgresql executeBatch 无法正常工作
- javascript - 如何隐藏和显示选中复选框的表格列
- django - 使用 django_filters 在 DRF ListAPIView 中的 JSONField 字段上的 FilterSet 总是返回相同的结果
- ios - 在 Xcode 中为所有项目创建代码片段?
- java - 并发api的AbstractQueuedSynchronizer构建块如何没有任何同步?
- android-studio - 如何使 GlideApp 与 androidx 兼容?
- stripe-payments - Stripe SCA 支付和密钥
- c++ - 如何初始化结构内的对向量?
- kubernetes - 为什么 kubectl run 有时会创建部署