Django用にPostgreSQLを使おうとする。

PostgreSQLのインストール

Django用にデータベースをインストールする。PostgreSQLを選んだ。バージョン9.0が最新のようなので、MacPortsからインストールする。

$ sudo port install postgresql90
$ sudo port install postgresql90-server

インストール時のメッセージは以下の通り。

###########################################################
# A startup item has been generated that will aid in
# starting postgresql90-server with launchd. It is disabled
# by default. Execute the following command to start it,
# and to cause it to launch at startup:
#
# sudo port load postgresql90-server
###########################################################
--->  Installing postgresql90-server @9.0.2_0

To create a database instance, after install do
 sudo mkdir -p /opt/local/var/db/postgresql90/defaultdb
 sudo chown postgres:postgres /opt/local/var/db/postgresql90/defaultdb
 sudo su postgres -c '/opt/local/lib/postgresql90/bin/initdb -D /opt/local/var/db/postgresql90/defaultdb'

素直に全部のsudoを実行した。全部問題なく実行できたようだ。下のメッセージが表示される。

...
Success. You can now start the database server using:

    /opt/local/lib/postgresql90/bin/postgres -D /opt/local/var/db/postgresql90/defaultdb
or
    /opt/local/lib/postgresql90/bin/pg_ctl -D /opt/local/var/db/postgresql90/defaultdb -l logfile start

起動したいのだが、上のようにやっても起動しない。ユーザpostgresでないと起動できないらしい。postgresなんてユーザーは作った覚えはないのだが。たぶん、インストール時に勝手にやったな。それならば、

$ sudo su postgres -c '/opt/local/lib/postgresql90/bin/postgres -D /opt/local/var/db/postgresql90/defaultdb'

こうしてみる。

Password:
LOG:  database system was shut down at 2011-01-13 19:39:52 JST
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections

プロンプトが返ってこないのだが...。このまま放っておいていいのか?

psycopg2のインストール

py26-psycopg2をインストールする。

$ port install py26-psycopg2

これだけやって、データベースを作成しようとすると、エラーになる。

$ ./manage.py syncdb
...
  File "/Library/Python/2.6/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 24, in <module>
    raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named psycopg2

そこで、確認してみる。

$ python
>>> import psycopg2
ImportError: No module named psycopg2

やっぱりエラーになる。psycopg2がどこにあるか確認する。/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/psycopg2/にある。こんなところにはパスが通っていないはず。しょうがないので、.profileファイルで、PYTHONPATHを定義する。

 export PYTHONPATH=/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages

これで、再びデータベースを作ろうとすると、またエラー。

  File "/Library/Python/2.6/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 24, in <module>
    raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/psycopg2/_psycopg.so, 2): no suitable image found.  Did find:
	/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/psycopg2/_psycopg.so: mach-o, but wrong architecture

これはちょっとまずそうだ。別のデータベースを検討しよう。