小编Mil*_*vic的帖子

如何在 Postgresql 中有效地将数百万行从一个表复制到另一个表?

我有两个数据库表。其中一个包含数亿条记录。让我们称之为那个history。另一个是每天计算的,我想将其所有记录复制到history一个中。

我所做的是运行:

INSERT INTO history SELECT * FROM daily

它在一段时间内起到了作用,但随着记录数量的不断增加,它开始变得越来越慢。现在我有大约 200 万条记录需要在单个操作中从复制daily到复制,history并且需要很长时间才能完成。

是否有另一种更有效的方法将数据从一个表复制到另一个表?

postgresql

43
推荐指数
4
解决办法
8万
查看次数

如何复制巨大的postgres表?

我有巨大的 postgres 表(10GB 数据 - 160M 记录)。表是静态的,没有对其执行写操作。我想复制它,执行写入,重新索引它,然后使用单个快速事务删除旧的并将新的重命名为原始名称。

复制如此巨大的表的最快方法是什么?

postgresql

30
推荐指数
1
解决办法
3万
查看次数

来自 Postgresql 触发器内的日志语句

我有几个 sql 语句在我的一些plpgsql触发器中运行。我已经启用了日志记录log_statement = 'all'。它记录“触发语句”,但不记录查询本身中的语句。

有没有办法在标准 postgres 日志中显示在触发器内执行的语句?

postgresql

6
推荐指数
1
解决办法
4780
查看次数

如何链接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)

postgresql

4
推荐指数
1
解决办法
1032
查看次数

如何使 postgresql SUM 在大量浮点数据上更准确?

我正在尝试REAL使用这样的简单查询对 800 万个浮点 ( ) 值求和:

SELECT SUM(metric) FROM metrics;
Run Code Online (Sandbox Code Playgroud)

但是,它返回的结果非常不准确。它应该返回 137,586.77,但它返回 137,303(283.77 差异)

有没有办法强制查询更精确?

postgresql

4
推荐指数
2
解决办法
1万
查看次数

标签 统计

postgresql ×5