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
これはちょっとまずそうだ。別のデータベースを検討しよう。