gpt4 book ai didi

ruby-on-rails - 对报告的建议

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:02 26 4
gpt4 key购买 nike

我必须创建一个每月自动编译的报告。该报告只需要是 2 个应用程序(Rails 应用程序,称它们为应用程序 A 和 B)的电话号码的唯一计数。每个应用程序都有一个 PostgreSQL 数据库,电话号码是表中的列。在每个应用程序中获取唯一的电话号码计数很容易,它只是一个“SELECT COUNT(DISTINCT phone_number)...”查询。但是,我无法想出一种简单/有效的方法来跨两个应用程序执行此操作(此外,应用程序 A 在表中有 500k 条记录,而应用程序 B 有 8k)。看来我必须从两个表中取出所有电话号码,将它们放在一起并扔掉重复项。问题是内存中要处理的记录太多。

有人对执行此操作的最佳方法有建议吗?这里有一些额外的信息:

  • 两个应用都在同一台服务器上
  • 数据库服务器也在这台服务器上
  • 应用程序在不同的数据库上
  • 生成/通过电子邮件发送报告将是一个 cron 作业
  • 我更喜欢用 ruby​​ 进行大部分编程,最好是在其中一个应用程序中进行

最佳答案

要访问不同的数据包装器,请根据您的 Pg 版本查看 dblink 和/或外部数据包装器。

然后您可以完全在 PostgreSQL 中完成此操作。请记住,您可能想要做一些事情,例如确保两个服务器只返回非重复记录。因此,假设您正在使用 fdw,并假设您设置了外部表 pna 和 pnb,例如:

 WITH pnas (phone_number) AS (
SELECT phone_number
FROM pna
GROUP BY phone_number
),
pnbs (phone_number) as (
SELECT phone_number
FROM pnb
GROUP BY phone_number
),
pns (phone_number) AS (
SELECT phone_number
FROM pnas
UNION
SELECT phone_number
FROM pnbs
)
SELECT count(*)
FROM pns;

这当然应该只适用于 9.1,但您可以对 dblink 和 PostgreSQL 8.4 及更高版本执行类似的操作。

关于ruby-on-rails - 对报告的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9407226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com