2016-09-16 1 views
0

したがって、参照を使用して行をペアで挿入する表がある場合は、このような状況があります。ダブルエントリー会計のように、すべての商品はそれとは逆の商品です。この表は次のとおりです。PSQLに相互参照を使用して複数の行ペアを挿入する最も速いクエリですか?

CREATE SEQUENCE tbl_item_id_seq 
    START WITH 1 
    INCREMENT BY 1 
    NO MINVALUE 
    NO MAXVALUE 
    CACHE 1; 

CREATE TABLE tbl_item (
    id integer NOT NULL PRIMARY KEY DEFAULT nextval('tbl_item_id_seq'), 
    pair_id integer, 
    label character varying(50) NOT NULL, 
    FOREIGN KEY (pair_id) REFERENCES tbl_item (id) 
); 

ALTER SEQUENCE tbl_item_id_seq OWNED BY tbl_item.id; 

項目は手続き的に生成されます。通常、一度に複数のペアが生成されます。最終的な目標は、すべてのペアを1つのクエリで挿入することです。私はPHPでこの問題を解決し、行を挿入し、idを返し、pair_idでもう一方の行を挿入し、最初の行を2番目のIDで更新しました。これは、PHPから開始された3 dbクエリを意味し、複数のペアが生成されているため、number_of_pairs * 3クエリを意味します。私は約100ペアあり、それは300クエリを意味し、私が最小限にしたいと思う処理時間の素敵なオーバーヘッドを提供します。

PSQLの1つのテーブルに、お互いのIDを参照する行のペアを挿入する最も速い方法は何ですか?

答えて

0

あなたは、いくつかのIDを予約できます。

select nextval('tbl_item_id_seq') from generate_series(1,200) 

は、手動でID/pair_idを割り当てます。この方法では、挿入物はCOPYステートメント(あなたのPostgresドライバがそれをサポートしていれば)でもかまいません。

関連する問題