POCH-7003 BEATout!

2011-05-09

DebianではPostgreSQL関連コマンドが/usr/binに無いものも

| 12:09

DebianではPostgreSQL関連の基本的なコマンドが/usr/share/postgresql-common/pg_wrapperにリンクしてあるのでそれ以外のコマンドを使うときにパスが通って無くて「ありゃ?」となる。

※8.3の場合

コマンドの場所は

$ ls -la /usr/lib/postgresql/8.3/bin

前にinitdbを使おうと思ったらパスが通ってなかったのを思い出すなぁ・・・

ちなみにDebianのPostgreSQLでinitdbを使いたいとき

| 14:59

前に無理矢理initdbを実行するやり方を書いたんだけど、あの時は別な事もやりたかったので無理矢理になってしまったけどDebianにはちゃんとコマンドも用意されてます。

例えばinitdb --no-locale --encoding=utf-8 -D /var/lib/postgresql/8.3/main なんてコマンドを叩きたいときはこれで↓でOK。

$ pg_createcluster --locale C -e utf-8 8.3 main
### 作成されたディレクトリを確認
$ ls /var/lib/postgresql/8.3/main
base  global  pg_clog  pg_multixact  pg_subtrans  pg_tblspc  pg_twophase  PG_VERSION
pg_xlog  root.crt  server.crt  server.key

ちなみに、pg_createclusterを使う前は

$ pg_dropcluster 8.3 main

クラスタを削除してからと言う事でひとつ。

2010-06-01

initdbは--no-localeをつけて初期化したい

| 12:10

先日のdebian etchからlennyアップグレードしたとき続き。

PostgreSQL8.3を入れたのだが、いきなり起動していきなりinitdbが始まる。localeの設定をする前の話なので、当然思っていた状態にはならず。

自分で初期化する。※あくまでもdebianPostgreSQLの場合

# /etc/init.d/postgresql-8.3 stop
# cd /var/lib/postgresql/8.3
# mv main main.bak
# su - postgres
$ initdb --no-locale --encoding=UTF8 -D /var/lib/postgresql/8.3/main
$ exit
# cd main
# ln -s /etc/postgresql-common/root.crt .
# ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem server.crt
# ln -s /etc/ssl/private/ssl-cert-snakeoil.key server.key
# rm pg_hba.conf
# rm postgresql.conf
# /etc/init.d/postgresql-8.3 start

2010-03-01

EC CUBEをPostgreSQLのUnix ドメイン・ソケットで通信したい

| 19:46

DBを使うときは極力Unix domain socketを使いたいと思う。

EC CUBEはDBとの接続にtcp通信しか許してくれないらしく、ソースをいじる羽目にorz

仕方ないのでハードにコーディングしてしまう。

まずはhtml/install/index.phpを修正。$dsn = の行を検索して編集。db_serverからdb_portまでをunix()に置き換える。4,5カ所あるので全て変更。

// この行を修正
// $dsn = $arrRet['db_type']."://".$arrRet['db_user'].":".$arrRet['db_password']."@".$arrRet['db_server'].":".$arrRet['db_port']."/".$arrRet['db_name'];
//↓
$dsn = $arrRet['db_type']."://".$arrRet['db_user'].":".$arrRet['db_password']."@unix()/".$arrRet['db_name'];

次に、data/class/SC_Initial.phpを修正。function defineDSN()内のdefine("DEFAULT_DSN"のところを変更。

            /** サイト用DB */
            //ここを修正
            //define ("DEFAULT_DSN",
            //        DB_TYPE . "://" . DB_USER . ":" . DB_PASSWORD . "@"
            //        . DB_SERVER . ":" .DB_PORT . "/" . DB_NAME);
            // ↓
            define ("DEFAULT_DSN",
                    DB_TYPE . "://" . DB_USER . ":" . DB_PASSWORD . "@unix()/" . DB_NAME);

これで完了。インストール時のDBサーバ名はlocalhostにでもしておけばOKなはず。

それにしてもEC CUBEはセーフモードでも動いてくれるから好きだ。せっかくphpを使うんだからcgiでは動かしたくないからね。

#パッチなんか作っておいても直ぐにアップデートされるからやめておこう。というか、プロトコルも選択させて欲しい・・・