PostgreSQL:如何将大型数据集插入表中?

时间:2014-12-10 12:31:32

标签: postgresql dataset

我在PostgreSQL数据库中有一个表,我需要向它添加200万行。 当我尝试使用INSERT INTO查询时,它会抛出

ERROR:  canceling statement due to statement timeout
CONTEXT:  PL/pgSQL function cdb_checkquota() line 11 at IF

我尝试重新配置 postgresql.conf 文件(放大 work_mem statement_timeout ),但它无效。

谁能告诉我这里想念的是什么? 顺便说一下,我正在使用INSERT INTO查询,因为我需要复制表数据,所以我在没有主键的情况下处理表数据,以防止重复键。

1 个答案:

答案 0 :(得分:1)

我最清楚,只有在statement_timeout设置时才会触发错误:

denis=# select pg_sleep(2);
 pg_sleep 
----------

(1 row)
denis=# set statement_timeout to 1;
SET
denis=# select pg_sleep(2);
ERROR:  canceling statement due to statement timeout

你试过完全禁用它吗?

set statement_timeout to 0

这应该是默认值,顺便说一句。根据{{​​3}}(强调我的):

  

statement_timeout(整数)   从命令从客户端到达服务器的时间开始,中止任何超过指定毫秒数的语句。如果log_min_error_statement设置为ERROR或更低,则还将记录超时的语句。 值为零(默认值)会将其关闭。

     

建议不要在postgresql.conf中设置statement_timeout,因为它会影响所有会话。