電気ウナギ的○○

About Home

違う文字コードでDB作る時は、template0をテンプレートに指定しようぜ

shinoda (2012年4月21日 18:35)
いやあ、ついつい忘れてしまうんで、今回はブログに書いておこう。
(PostgreSQL 使いとしては今更なネタだけど(^^;)

さっき、うちのテスト用のマシン(FreeBSD 8.1-RELEASE on ASUS EeePC 4G-X(笑))で、プログラムの試験用に新しい DB 作ろうとしたんだけど(DBMS は PostgreSQL 9.0.1)、

%createdb hoge_db -E EUC_JP
createdb: database creation failed: ERROR:  new encoding (EUC_JP) is incompatible with the encoding of the template database (UTF8)
HINT:  Use the same encoding as in the template database, or use template0 as template.

って怒られた。
このマシンの DB のディフォルトの文字コードは UTF-8 なんだから、EUC-JP で新しい DB 作ろうとしても駄目やでぇってこと。

PostgreSQL の createdb は、実際には template1 という空の DB をコピーして新しい DB を作成する。
で、この template1 という DB には initdb した時に指定した文字コード情報が登録されているのだ。
だから、「UTF-8 の文字コードを使う DB をコピーして、EUC-JP の文字コードを使う DB は作れんでぇ」と怒られてる。

じゃあ、どうすればいいか?・・・だが、エラーメッセージに HINT として示されているように、template0 を使えば良いわけね。
template0 は、文字コードの情報を持っていない、本当にピュアな DB なので、他の文字コードの DB の元ネタになるってわけだね。

これは PostgreSQL 8.4 からの仕様のようなので、昔 PostgreSQL 使ってて、最近復活したって人は絶対やらかしそうな失敗(笑)
(まあ、うちみたいに、色々なお客さんの色々な文字コードの DB を作ってテストする立場の人間でないと、違う文字コードの DB を作ることもあまりないのかもしれんが)

つーことで、

%createdb hoge_db --encoding=EUC-JP --template=template0
CREATE DATABASE
%psql --list
        List of databases
   Name    |  Owner   | Encoding
-----------+----------+----------
 hoge_db   | postgres | EUC_JP
 postgres  | postgres | UTF8
 template0 | postgres | UTF8
 template1 | postgres | UTF8
(4 rows)

で、バッチリOK!

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/2078

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE