PostgreSQL導入
lispとrubyとpythonと その9 DBアクセス(common lisp) - テンポラリに書いたようにclsql+MySQLだとプリペアドステートメントが使えない。
でPostgreSQLに乗り換える。
しかし、PostgreSQLがさっぱり分からないので、一から調べないといけない。
メンドくさいなぁ。
動くようにはなったからやったことをまとめとく。
間違ってる部分があるかもしれないから鵜呑みにはしないこと。
環境はUbuntu8.10
まずインストール。
Synapticパッケージマネージャで入れるだけ。
インストールするとlinuxのユーザとしてpostgresってユーザを勝手に作るようだ。
/etc/passwdを確認したら増えてるはず。
こいつがPostgreSQLのデーモンを動かすんだろう。たぶん。
PostgreSQLが動いてる状態でps -auxすると
postgres 4650 0.0 0.6 41896 5208 ? S 19:49 0:00 /usr/lib/postgresql/8.3/bin/postgres -D /var/lib/ postgres 4652 0.0 0.2 41896 2172 ? Ss 19:49 0:01 postgres: writer process postgres 4653 0.0 0.1 41896 1296 ? Ss 19:49 0:00 postgres: wal writer process postgres 4654 0.0 0.1 42028 1544 ? Ss 19:49 0:00 postgres: autovacuum launcher process postgres 4655 0.0 0.1 13216 1288 ? Ss 19:49 0:00 postgres: stats collector process
こんな感じだし。
ややこしいけど、PostgreSQLのユーザ(!=linuxのユーザ)にもpostgresが作られてて、こっちはPostgreSQLのAdmin(DBの)となっているらしい。
話を戻して追加されてるpostgresだけど、こいつのパスワードがわからないから、passwdで設定。
xxx@xxx:~$ sudo passwd postgres
で適当なのに変える。
インストールしたての状態だと、linuxのユーザがpostgresじゃないとPostreSQLにつながらない。(多分)
なので、パスワード設定後に端末で
su - postgres
して、(linuxの)ユーザをpostgresに切り替える。
この状態でPostgreSQLにつなぐとPostgreSQL側のユーザ・postgresでつながる。。。みたい。
で、ユーザのDBを作る。
CreateDB
とすればOK。これで、postgresのDBが作られる。
で、端末でpsqlとすればPostgreSQLにつながる。
つながったらこんな表示が出るはず。
postgres@xxx:~$ psql Welcome to psql 8.3.6, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit postgres=#
これで最低限動くようにはなったんだろうけど、端末からつなぐときにいちいち su - postgres するのも面倒くさい。
なので、普段のlinuxのユーザをPostgreSQL側にも作ってみた。
PostgreSQLのユーザはcreateuserコマンドで作れる。
端末で
postgres@xxx:~$ createuser test_user
と打つと、スーパーユーザにするかとか、なんだかんだと質問してくるので適当に答えてあげるとPostrgreSQLのユーザが作成される。
linuxのユーザ名と合わせたユーザをPostgreSQL側に作ったら、いちいちlinuxのユーザをpostgresに変えなくてもよくなった。
あ、こっちのユーザでもCreateDBするのは忘れずに。
で、テーブルを作成。
psqlでつないでから、
xxx=> create table tb0( xxx(> id integer not null unique, xxx(> data1 varchar(10), xxx(> data2 varchar(10), xxx(> CONSTRAINT id_key primary key(id));
その後、データを入れてみる。
MySQLではわりとハマった日本語もすんなり通っているように見える。
xxx=> insert into tb0 values(0,'あああああ','いいいいい'); INSERT 0 1 xxx=> select * from tb0; id | data1 | data2 ----+------------+------------ 0 | あああああ | いいいいい (1 row)
うむ。いい感じ。
ただ、接続するときにパスワードを何も聞かれていないのが気持ち悪い。
http://my-server.homelinux.com/postgresql.php
↑を参考にパスワードを有効化してみる。
まずAlter Userでパスワード設定。
postgres@xxx:~$ psql postgres=# alter user postgres with password 'x';
つぎに設定ファイルの変更。
/etc/postgresql/8.3/main/pg_hda.confを書き換える。
*参考にしたサイトでは/var/lib/pgsql/data/postgresql.confって書いてあったけど、Ubuntuでは/etc/postgresql/8.3/main/にあった。
postgresとlocalのallをmd5に変えてみた。
local all postgres md5 local all all md5
で再起動。
postgres@xxx:~$ /etc/init.d/postgresql-8.3 restart
再起動後はpsqlするとパスワードを聞かれるようになった。
これでいいか。
ついでに。
PostgreSQL側のユーザの一覧を見るのは
select usename from pg_user;
で。usernameじゃなくてusenameなので注意。