我们有一个基于 PostgreSQL 的系统,安装在 20 个客户处。
有时我会在所有系统上运行 SQL 查询。到目前为止,我使用这样的命令行工具来执行parallel
此操作:
parallel -q -j0 ssh {} "echo {}; psql -tAc \"select count(*) from auth_user\";echo" ::: $(ssh j list-systems prod)
我缺少对输出进行排序的能力。我想避免肮脏的 shell 脚本,并使用 SQL 智慧。
如何将 N 个 SQL 查询放入 PostgreSQL,以便我可以在其上运行普通 SQL?
(子问题:这种问题有匹配的标签吗?我的意思是 SQL 跨越多个数据库的问题?)
如果您需要经常这样做并且可以直接连接到所有这些服务器,我会设置一个 Postgres 实例作为所有其他服务器上的“统一”视图。
为此,请创建一个新的 Postgres 数据库(或服务器)并安装postgres_fdw扩展。
然后为每个要查看的数据库创建一个外部服务器。
然后在您的新数据库中创建一个(空)表,它看起来与其他服务器上的相应表完全一样,例如
然后为每个服务器创建一个外部表,例如:
在定义外部表时包含该选项可能是个好主意,
updatable 'false'
以防止从集成服务器到远程服务器的意外更新。如有必要,上述步骤都可以编写脚本。
定义所有表后,您可以执行一个简单的操作:
在您的“集成”服务器上,Postgres 将自动查询所有远程表。