- ベストアンサー
postgreSQLのCOPY コマンド&serial型について
- postgreSQLのCOPYコマンドを使用して、タブ区切りで保存したファイルをテーブルに流し込む方法について説明します
- テーブルを作成する際に、SERIAL型を使用する場合、COPYコマンドでデータを一括登録する際にエラーが発生することがあります
- 12万件近くのデータを手動で登録するのは困難な場合、自動発番が必要なファイルの書き方についても解説します
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
再度。 もしかして、コンソールにコピペしてinsertしようとされているんでしょうか? それは12万件もあると非常に大変なのでは?? コンソールから流し込む場合、通信スピードに流し込むスピードがついていけない(言い方間違ってるかも)ので、そのような事態が起きるようです。 私もよくやってました。(爆) insertで吐き出されたものを保存したテキストをサーバにあげて、テキストのあるディレクトリに移動してからDB操作が出来る状態にし、そこから「\i テキスト名」で実行できると思います。 DB操作が出来る状態じゃなくても、「psql ~」で実行できるコマンドがあったような気がするんですが、ちょっと忘れてしまいました...すみません。
その他の回答 (1)
- noopee
- ベストアンサー率38% (114/297)
こんにちは。 私はcopyコマンドはなぜかうまくいかないことが多いので、普段あまり使いません。 特にシーケンスなんか絡むと出来ないものもあったりします。 私が知らないだけ、なのかもしれませんけど。 ちょびっと手間がかかりますが...。 まずserialを持たせないtableにデータをcopyします。 そのTableからpg_dumpで「insert into~」の書式付きでデータを吐き出し、本来のテーブルにinsertします。 主旨が違ってたらごめんなさいね。 補足ください。 PostgresSQLはMLもありますので、そちらの過去ログ等も覗いてみてはいかがでしょうか。
補足
noopeeさん、とても分かりやすい回答ありがとうございました。 早速pg_dumpを使ってみました。 「insert into ...」文で、書き出すことには、成功したのですが、本来のテーブルにinsertしようとするときに(エディタ上の「insert into...」文を、コピー&ペーストをしているのですが)、最初の数行は、うまくinsertしてくれますが、10行以上の行を一度にペーストしようとすると、特に返ってくるエラーはないのですが、ペーストもされていません・・・ その状態になると、\qも、select文も(一切のコマンドが)使えなくなって(反応しなくなって)しまいます。 5行づつくらいだと、ペーストはできるのですが、本来、コピー&ペーストをしてもいいものなのでしょうか? それとも、私のやり方が間違っているのでしょうか? 非常に分かりにくい質問かと思いますが、宜しくお願いします。
お礼
noopeeさん、無事に成功しました。 本当にありがとうございました。 これから、もっともっと勉強して、noopeeさんのように 人のお役に立てるようになりたいです。 ありがとうございました。