0

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

我尝试使用postgresql 中的返回语法插入它们。但插入大约需要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. 但不明白这是否可能。

4

1 回答 1

1

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

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;
于 2013-10-23T19:05:36.030 回答