我有一个表格,我想在每个查询 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
来获得更好的性能。
但是不明白这是否可能。
答案 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;