PostgreSQLのDBの文字コード間違って作ってしまった場合の対処

旧サーバーからPostgreSQLのデータをdumpで取り込み直していたんだけども、DB自体の基本の文字コード設定を忘れていて取り込んでしまっていたので、phpPgAdminで開いたときに文字化けしていたのに気がついた(2ヶ月経過後)

phpPgAdminを使わずにPHPスクリプト経由や直接SQLを叩けば正常に更新や追加ができていたので、その後1年半は放置状態で見ないふりをしていたが、新規で導入するWEBアプリケーションの方にDBを統一することになったので結局は文字コードの修正が必要になった。。。

比較的データの少ないDBに関しては個別にphpPgAdminからエクスポートして、ファイルを開いて文字コードを書き換えて、保存する際もファイル自体の文字コードをUTF8に変換してしまえば、新しいサーバーの方でもphpPgAdminを使って気にせずに取り込めた。

しかし、データの多いエクスポートファイルは取り込みに時間が掛かってエラーになってしまったのでCUIで操作しないといけなくなった。※Apacheやphp.iniの設定を変更すればいいが、直すのを忘れたら大惨事になりそうだから回避


*****以下手順******
・スーパーユーザーになる

・dumpデータを保存する場所に移動

・PostgreSQLのデータをエクスポートするよとパスワード付きで宣言

・必要なDBだけをダンプする

ダンプします ユーザーはhogeuser 対象はhogedb ファイル名はhogedb.dump

・いきなり削除するのは怖いので名前を変更してDBを待避
※ALTER DATABASE ・・・データベースへの変更

・DBを削除

・DBを作成
※-E UTF8 ・・・DBの文字コードをUTF8に設定

・dumpデータを流し込む

phpPgAdminから確認してこれで終了


のはずだったが、シーケンスをはっていたところがなんだかエラーがでまくってしまった

PostgreSQLの7.x系から8.X系にしたからなのか、phpPgAdminでシーケンスの設定を見ても正常。しかしシーケンスを削除しようとすると怒られる(テーブルが存在していたからかな?)

phpPgAdmin上ではテーブルは作成されているもののデータが入っていない状態に見える。コマンドではエラーも出てたからデータは入っていないものと思い込んでいたが、phpPgAdminで該当テーブルをバキュームするとデータがでてきた。。。
しかもデータはあっているようだ。
理解不能・・・