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

いやあ、ついつい忘れてしまうんで、今回はブログに書いておこう。
(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!

トラックバック(0)

このブログ記事を参照しているブログ一覧: 違う文字コードでDB作る時は、template0をテンプレートに指定しようぜ

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/2078

コメントする

このブログ記事について

このページは、shinodaが2012年4月21日 18:35に書いたブログ記事です。

ひとつ前のブログ記事は「「一龍」の焼き飯は美味かった~」です。

次のブログ記事は「昨日は「祖生公民館寄席」に行って来た」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら