• ベストアンサー

フィールドの入れ替えはできますか?

PostgreSQL 8.1.4を使用しています。 仕様の変更によりテーブルへフィールドの追加を行なったのですが、このフィールドの位置を変更する事はできるのでしょうか。 DDL文を整えて作った空のテーブルへデータをリストアしようとしましたがうまくできませんでした。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tecinfo
  • ベストアンサー率52% (32/61)
回答No.2

ALTER文でカラムの位置を変更することはできません。 どうしてもカラムの位置を変える必要がある場合、(多くの場合、SELECT文等でデータを抽出する時に順番を整えれば良いと思いますが・・・)ANo.1の方がおっしゃるように一度、テーブル内のデータをバックアップして、テーブルを作り直し、再度データを入れる必要があると思います。 > SQL形式でカラム名指定するモードでバックアップ おそらくpg_dump -D [table_name]の大文字Dオプションのことだと思います。 カラム名まで保持したINSERT文を生成するので、テーブルの順序が変更された場合に対応できます。

参考URL:
http://www.postgresql.jp/document/pg826doc/html/app-pgdump.html
hitya
質問者

お礼

ご丁寧にありがとうございます。 カラムの位置を変える必要があるのか、は私も少々疑問です。変更後のDB定義書を見たら項目の最後ではなく途中に追加されていたので、その様に作らなきゃいけないのかなと思ったのですが・・・定義書の方を変えてもらえば良かったかも知れませんね。 フィールドを項目の最後に追加したまま本当は知らんぷりしようかとも思っていたんですが、insert文を書く時に他の人がフィールドを指定せずに実行したら不味いかなと思い、結局無理矢理押し込めました。 大文字Dオプション、なるほどです。今度やってみます。 ありがとうございました。

その他の回答 (1)

  • alte_6
  • ベストアンサー率60% (9/15)
回答No.1

何にひっかかっているかわかりませんが。 SQL形式でカラム名指定するモードでバックアップし テーブル登録して データonlyモードで登録すれば可能かと重います

hitya
質問者

お礼

レスの早さに感動しつつもなかなか試すことができませんでした。。 焦った挙げ句、そのテーブルをcsvでデータを吐いて、エクセルでフィールドを並べ替えて、整えた空テーブルにそのcsvを取り込んで・・・というぜんぜんスマートじゃない手段でやりすごしました。 時間を作って今度は教えていただいたやり方をもう一度やってみたいと思いますので、また何かあったら宜しくお願いします。 どうもありがとうございました。

hitya
質問者

補足

素早いご回答ありがとうございます。返信が遅くなって申し訳ありません。 おっしゃる通りデータonlyモードでリストアしようとしていたのですが、関連付けがおかしいと言う様なエラーで弾かれてしまうのです。 戻そうとしているデータがおかしいのかなとも思い色々とオプションを付けて吐いてみましたが変わりありませんでした。 回答の「SQL形式でカラム名指定するモードでバックアップ」というのが分からず調べてみたのですが見当たりませんでした。これはどういう操作になるのでしょうか。 再度お答えいただけたら幸いです。

関連するQ&A