我有两个数据库表。其中一个包含数亿条记录。让我们称之为那个history。另一个是每天计算的,我想将其所有记录复制到history一个中。
我所做的是运行:
INSERT INTO history SELECT * FROM daily
它在一段时间内起到了作用,但随着记录数量的不断增加,它开始变得越来越慢。现在我有大约 200 万条记录需要在单个操作中从复制daily到复制,history并且需要很长时间才能完成。
是否有另一种更有效的方法将数据从一个表复制到另一个表?
我有巨大的 postgres 表(10GB 数据 - 160M 记录)。表是静态的,没有对其执行写操作。我想复制它,执行写入,重新索引它,然后使用单个快速事务删除旧的并将新的重命名为原始名称。
复制如此巨大的表的最快方法是什么?
我有几个 sql 语句在我的一些plpgsql触发器中运行。我已经启用了日志记录log_statement = 'all'。它记录“触发语句”,但不记录查询本身中的语句。
有没有办法在标准 postgres 日志中显示在触发器内执行的语句?
我已经使用 postgresql 规则实现了数据非规范化策略。出于性能原因,我选择了规则而不是触发器。
架构的结构如下:
系统的一部分是将hits每个用户存储在stats表中。命中是一个虚构的指标,它并不真正相关。系统可以收集许多这些指标。统计表中有很多记录(每天> 1,000,000)。
我想知道给定日期内每个用户、每个项目、每个客户端和每个应用程序的点击次数是多少。
为了使其快速运行,我按天对统计信息进行了分组,并将输出存储到 user_hits 表中。在此过程中,还添加了 application_id、client_id 和 project_id(作为列),并创建了适当的索引。
我想通过按 project_id、client_id 和最后的 application_id 对事物进行分组来进一步优化流程。数据管道是这样的:
stats -> user_hits -> project_hits -> client_hits -> application_hits
我想确保当我删除user_hits给定日期的数据时project_hits,同一日期的数据也被删除。这个过程应该传播到链中的最后一个表。
我定义了这些简单的规则:
CREATE RULE delete_children AS ON DELETE TO user_hits
DO ALSO
DELETE FROM project_hits WHERE day = OLD.day;
CREATE RULE delete_children AS ON DELETE TO project_hits
DO ALSO
DELETE FROM client_hits WHERE day = OLD.day;
CREATE RULE delete_children AS ON DELETE …Run Code Online (Sandbox Code Playgroud) 我正在尝试REAL使用这样的简单查询对 800 万个浮点 ( ) 值求和:
SELECT SUM(metric) FROM metrics;
Run Code Online (Sandbox Code Playgroud)
但是,它返回的结果非常不准确。它应该返回 137,586.77,但它返回 137,303(283.77 差异)
有没有办法强制查询更精确?
postgresql ×5