PostgreSQLへの接続

今までMySQLで通してきたんだけど、PostgreSQLで行ってみようかというテスト。全く未経験でございます。

$this->_dsn = sprintf("%s:host=%s port=%s dbname=%s user=%s password=%s",
                      DB_TYPE,DB_HOST,DB_PORT,DB_NAME,DB_USER,DB_PWD);
$this->smarty->dbh = new PDO($this->_dsn,null,null,array(PDO::ATTR_PERSISTENT => false));

とかやって接続を試みるも失敗。調べてみると、

vi /var/lib/pgsql/data/postgresql.conf

とかで設定ファイルの

#tcpip_socket = false

#tcpip_socket = true

にしろ、というのをあちこちで見かけるんだけど、設定ファイルにそれらしき項目はなし。自分で記述してみても動かない。

更に見ていくと、ホスト名がlocalhostの時と指定なしの時で動作が異なるらしい。localhostだとTCP/IPで接続、指定なしだとソケット接続になるそうな。localhostTCP/IPというのもどうかと思っていたら、やっぱり性能的にも落ちるし、ローカルならソケット接続一択らしい。

ということで、

$this->_dsn = sprintf("%s:dbname=%s user=%s password=%s",DB_TYPE,DB_NAME,DB_USER,DB_PWD);
$this->smarty->dbh = new PDO($this->_dsn,null,null,array(PDO::ATTR_PERSISTENT => false));

で接続してみたら動いた。後から分かったことなんだけど、「#tcpip_socket」の指定が有効なのはPostgreSQL7.x系で、8.0以降は設定項目がなくなったんだそうな。yumで入れたバージョンが8.1.4だから、そりゃ動かんわな。

そんなこんなで、何とか接続してSELECTまで通った…