PostgreSQLデータベースに同時に挿入したい行がたくさんあります。私は挿入されている各行に対してどのidが割り当てられているかを追跡する必要があります。たとえば、私たちはテーブルを持っていると言う:挿入された行以外の値をINSERTから返す方法
CREATE TABLE example
(
id serial,
name text,
CONSTRAINT example_pkey PRIMARY KEY (id),
);
は今、私は(シリアルID列が新しいIDを割り当てますよう)に挿入たくないIDを持ついくつかのデータを持っているが、私はとの間のマッピングを追跡する必要があります古いIDと新しいIDが:
:old id | name
-------------
-1 | foo
-2 | bar
-3 | baz
は、だから私はバックのような何かを得ることを期待し、このクエリ
WITH data(oldid,name) AS (VALUES
(-1,'foo'),
(-2,'bar'),
(-3,'baz')
)
INSERT INTO example(name)
SELECT name FROM data d
RETURNING id, d.oldid
を書きました
id | oldid
-----------
1 | -1
2 | -2
3 | -3
しかし、私はあなたが挿入されていない列を返すことができるとは思わないので、これは動作しません。これを行う別の方法はありますか?
私の意見では最も簡単な方法は、私はRETURNING'は、インサートが作成する行と連携 '考えるあなた' example'テーブルに – cha
を 'oldid'列を追加することです - ので、私は他のセットから列を参照カント –