在 Postgresql 中创建一百万条记录的最快方法?
Fastest way to create a million records in Postgresql?
创建百万条记录的最快方法是什么,其中第一列是增量数字(不是主键),其他字段使用默认值?
我是否必须创建一个 PG 过程才能更快,因为它是内部的,即不通过数据库驱动程序??!!
您可以使用 generate_series
并省略所有应使用默认值的列:
insert into test(id) select generate_series(1,1000000);
要将相同的序列插入到多个列中,可以重复使用序列:
insert into test(id,id2)
select seq,seq
from generate_series(100,110) v(seq);
我会用insert into...select...from generate_series(1,1e6)
,因为它最简单,速度不是一切,但它不是最快的。
insert into foobar (id,id2) select x,x from generate_series(1,1e6) f(x);
INSERT 0 1000000
Time: 4346.187 ms (00:04.346)
copy foobar (id,id2) from program 'perl -le "print qq{$_\t$_} foreach 1..1_000_000"';
COPY 1000000
Time: 2720.630 ms (00:02.721)
谁知道呢,可能还有更快的东西。
创建百万条记录的最快方法是什么,其中第一列是增量数字(不是主键),其他字段使用默认值?
我是否必须创建一个 PG 过程才能更快,因为它是内部的,即不通过数据库驱动程序??!!
您可以使用 generate_series
并省略所有应使用默认值的列:
insert into test(id) select generate_series(1,1000000);
要将相同的序列插入到多个列中,可以重复使用序列:
insert into test(id,id2)
select seq,seq
from generate_series(100,110) v(seq);
我会用insert into...select...from generate_series(1,1e6)
,因为它最简单,速度不是一切,但它不是最快的。
insert into foobar (id,id2) select x,x from generate_series(1,1e6) f(x);
INSERT 0 1000000
Time: 4346.187 ms (00:04.346)
copy foobar (id,id2) from program 'perl -le "print qq{$_\t$_} foreach 1..1_000_000"';
COPY 1000000
Time: 2720.630 ms (00:02.721)
谁知道呢,可能还有更快的东西。