そもそもなぜ作り直したか
なぜか特定レコードだけ更新が行えなくなり、原因不明の時間が続きました。
じゃあ、ダンプして作りなしちゃえばいいんじゃない?ということになり、作り直しを行うに至りました。
バックアップファイルの作成
pg_dump
を使用します。
PostgreSQLのデータをバックアップする際の手法ですね。
対象DBの確認
psql -l
で、データベース名を確認します。
バックアップファイル作成
pg_dump -t table_name db_name > table_name.sql
でバックアップファイルを作成します。
こんな感じで実行しました。
pg_dump -t スキーマ.テーブル名 DB名 > 出力ファイル名.sql
の形式でバックアップ作成。
作り直したいテーブルの削除
テーブルの削除については、手動で行いました。
DROP TABLE テーブル名;
ですね。
テーブルの作り直し
削除が確認できたら作り直しです。
先ほど作成したバックアップファイルを流し込みます。
psql DB名 < バックアップファイル(出力ファイル名).sql
です。
簡素ですが、こんな具合にテーブルを作り直しました。
余談
特定レコードの更新が行えない場合ですが、インデックスが破損している可能性があります。
その場合は、REINDEXを用いることで解消することがあります。
少し古い記事ではありますが、こんなものもありました。
・PostgreSQL:データの更新ができない
そしてこのREINDEXですが、indexの再構築を行うため、その間のSELECTはブロックされてしまいます。
サービス提供者としては手痛いことではありますので、ケースバイケースでご自身の判断で行うようにしてください。
・[PostgreSQL]本当は怖いREINDEX