【问题标题】:How to load bulk data to table from table using query as quick as possible? (postgresql)如何使用查询尽可能快地将批量数据从表中加载到表中? (postgresql)
【发布时间】:2018-12-23 14:24:36
【问题描述】:

我有一个大表 (postgre_a),它有 100 列的 1 亿条记录。我想将此数据复制到同一张表中。

我尝试使用 sql 来做到这一点

INSERT INTO postgre_a select i1 + 100000000, i2, ... FROM postgre_a;

但是,这个查询现在已经运行了 10 多个小时......所以我想更快地执行此操作。我尝试使用copy 执行此操作,但我找不到将copy from 语句与查询一起使用的方法。

有没有其他方法可以更快地做到这一点?

【问题讨论】:

  • 在操作前你是否删除了所有的索引和约束?
  • @LaurenzAlbe 是的。只有主键约束。我也必须删除主键吗?
  • 如果你想要好的性能,是的。
  • @LaurenzAlbe 谢谢。顺便说一句,您知道任何其他方法/查询,例如使用 COPY 来更快地做到这一点吗?

标签: postgresql select insert copy


【解决方案1】:

您不能直接在COPY FROM 中使用查询,但也许您可以将COPY FROM PROGRAM 与查询一起使用来做您想做的事:

COPY postgre_a
FROM PROGRAM '/usr/pgsql-10/bin/psql -d test'
             ' -c ''copy (SELECT i1+ 100000000, i2, ... FROM postgre_a) TO STDOUT''';

(当然,您必须将psql 的路径和数据库名称替换为您的值。)

我不确定这是否比使用INSERT 更快,但值得一试。

您绝对应该在操作之前删除所有索引和约束,然后重新创建它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 2013-04-24
    • 2018-11-19
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多