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ことで、パフォーマンスが大幅に向上し、最大 50 ミリ秒になります。

最初の 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 に答える