自動インクリメント整数を主キーとして使用する PostgreSQL 9 データベースがあります。1 つまたは 2 つの値を変更しながら、(いくつかのフィルター条件に基づいて) テーブル内のいくつかの行を複製したい、つまり、ID (自動生成されたもの) と場合によっては別の列を除いて、すべての列の値をコピーしたい。
ただし、古い ID から新しい ID へのマッピングも取得したいと考えています。最初にコピーする行を照会してから、一度に 1 つずつ新しい行を挿入するより良い方法はありますか?
本質的に私はこのようなことをしたい:
INSERT INTO my_table (col1, col2, col3)
SELECT col1, 'new col2 value', col3
FROM my_table old
WHERE old.some_criteria = 'something'
RETURNING old.id, id;
ただし、これは失敗しERROR: missing FROM-clause entry for table "old"
、理由がわかります。Postgres は最初に SELECT を実行してから挿入する必要があり、RETURNING
句は新しく挿入された行にのみアクセスできます。