具有返回ID性能的批量插入

时间:2013-10-23 06:55:32

标签: python sql database postgresql psycopg2

我有一个表格,我想在每个查询 1000个项目周围插入,并在创建后获取它们的PK,以后用作其他表格的FK。

我尝试在postgresql中使用returning语法插入它们。 但插入

需要 10秒

INSERT INTO table_name (col1, col2, col3) VALUES (a1,a2,a3)....(a(n-2),a(n-1),a(n)) returning id;

删除RETURNING我的效果会更好 ~50ms。

我认为如果我可以通过原子操作获取第一个id并同时插入行,则可以通过删除RETURNING来获得更好的性能。 但是不明白这是否可能。

1 个答案:

答案 0 :(得分:1)

使用nextval生成id http://www.postgresql.org/docs/9.1/static/sql-createsequence.html

CREATE TEMP TABLE temp_val AS(
    VALUES(nextval('table_name_id_seq'),a1,a2,a3), 
        (nextval('table_name_id_seq'),a1,a2,a3) 
);
INSERT INTO table_name (id, col1, col2, col3)(
    SELECT column1,column2,column3,column4 
    FROM temp_val
);
SELECT column1 FROM temp_val;