UbuntuのPostgreSQLでEUC_JPのデータベースを作る
Ubuntuでポスグレを入れたときにはまったのでメモ。
EUC_JPのデータベースが作れない
ポスグレのインストールはすごく簡単で、
$ sudo apt-get install postgresql
インストール、起動までやってくれます。
で、最初はUTF-8のデータベースばっかり作っていて気づかなかったのですが、いざEUC_JPのデータベースを作ろうとすると下記エラーが出ます。
$ createdb -E EUC_JP -U hoge testdb createdb: database creation failed: ERROR: encoding EUC_JP does not match server's locale ja_JP.UTF-8 DETAIL: The server's LC_CTYPE setting requires encoding UTF8.
先日のエントリにも書いたとおり、UbuntuはデフォルトではUTF-8しか使えないので、それの影響かと思いlocale-genをしたのですが、変わらず。
どうやらinitdbを--no-localeでやっていないことが原因っぽい。
ということでinitdb
とうことで--no-localeでinitdb。
ちなみにPG_DATAフォルダ以下を空にしないとinitdbできないので、rm -rfとかで消しておくこと。
$ /usr/lib/postgresql/8.3/bin/initdb -D /var/lib/postgresql/8.3/main --encoding=UTF8 --no-locale
その後、ポスグレ起動。
$ sudo /etc/init.d/postgresql-8.3 start * Starting PostgreSQL 8.3 database server * The PostgreSQL server failed to start. Please check the log output: 2009-04-22 12:35:52 JST FATAL: could not load server certificate file "server.crt": No such file or directory [fail]
ん、なんじゃこのエラーは。
とりあえずファイルを適当に作ってみる。笑
$ touch main/server.crt /var/lib/postgresql/8.3% sudo /etc/init.d/postgresql-8.3 start * Starting PostgreSQL 8.3 database server * The PostgreSQL server failed to start. Please check the log output: 2009-04-22 12:36:17 JST FATAL: could not load server certificate file "server.crt": no start line [fail]
あ、やっぱりだめっぽい。
調べてみると、どうもserver.crtというサーバ証明書が必要らしい。前こんなのあったけなあ。
とりあえず作る。
$ sudo openssl genrsa -out server.key 1024 Generating RSA private key, 1024 bit long modulus .................++++++ .....++++++ e is 65537 (0x10001)
引き続き。Common Nameは外部からアクセスするためのホスト名か IPアドレスにする必要があるようです。
$ sudo openssl req -new -key server.key -x509 -days 1096 -out server.crt You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:都道府県 Locality Name (eg, city) []:市 Organization Name (eg, company) [Internet Widgits Pty Ltd]:会社名とか Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:自分のIP Email Address []:
んでもってコピー。
$ cp -p /etc/postgresql/8.3/main/server.crt /var/lib/postgresql/8.3/main $ cp -p /etc/postgresql/8.3/main/server.key /var/lib/postgresql/8.3/main
再度再起動。
$ sudo /etc/init.d/postgresql-8.3 start * Starting PostgreSQL 8.3 database server * The PostgreSQL server failed to start. Please check the log output: 2009-04-22 12:49:15 JST FATAL: unsafe permissions on private key file "server.key" 2009-04-22 12:49:15 JST DETAIL: File must be owned by the database user or root, must have no write permission for "group", and must have no permissions for "other". [fail]
まだダメかよ。権限変更。
$ chmod 400 /var/lib/postgresql/8.3/main/server.crt $ chmod 400 /var/lib/postgresql/8.3/main/server.key
再起動。
$ sudo /etc/init.d/postgresql-8.3 start * Starting PostgreSQL 8.3 database server
で、何とかなりました。
あとから気づいたこと。
今までFreeBSDとかでinitdbしてこんなこと一回もなかったよなあと思っていたら、どうもpostgresql.confのssl=trueが怪しい気がしてきました。
これがあるからSSL接続が必要になって、サーバ証明書なんかが必要になったような気がする。
ということでこんなめんどいことをしなくてもinitdb後、postgresql.confをssl=falseにして再起動すればいいのかもしれません...