SERIAL型のカラムを持つテーブルへデータを読み込む

SERIAL型のカラムを定義すると、値を生成するシーケンスも同時に作られるのだが、このテーブルにデータをcopyでファイルから読み込むときにはシーケンスの値を更新するのを忘れないようにしないといけない。
idというカラムがSERIAL型と仮定して、具体的には、こう。


DB=> \copy the_table to 'the_table.csv' using delimiters ','
DB=> SELECT setval('the_table_id_seq', (SELECT max(id) FROM the_table));

忘れると、INSERTするときに、ユニーク制約で怒られたり、数字が飛んじゃったりすることになる。
コピーしてからINSERTされるまでに間が開くと、ハマったりするかも。

コメント

  1. emuty より:

    SERIALとかの値を会員IDとかひもづけるのに使っている場合には、アプリ側でいったん生成してINSERT時にセットするようにする(だからSERIAL型じゃ無くintとかcharにしておく)と複数テーブル更新する系のアプリ(会員系サイトなど)とかpgpoolを使った時に幸せになれると思います...という事でリファラから飛んできました(^^)

タイトルとURLをコピーしました