« 新幹線now | トップページ | ◆総天然色立体・化学参考書 »

postgreSQLをWindowsでPHPで使う

メモ:

 WindowsでPostgreSQL(ぽすぐれ)を動かしPHPからアクセスする

本にある通りでは全く動かない。9.0ではあれが無いこれが無いというエラーが 入れても入れても数珠つなぎで、最後にはdllのバージョンが合わなくなるのか 「除数###がXXX.dllから見つかりませんでした」といったエラーになる。
8.4を使う。
8.4であれば起動、停止などもコマンドプロンプトでなく画面から 行うコマンドが用意されている。

### 2012/5/3
Windows7-64bitに9.1.3を導入(ダウンロードインストールした)。 スタックビルダでXAMPPとApacheの競合と思われるインストールエラーが出たが 無事動いた。
postgre-shellも動いた。起動時にClient Encodingを聞いてくるようになった。しかもデフォルトがSJIS なのでWindowsでの作業にはありがたい。
管理ツールも良くできている。
しかし、Windows7-64bitではxampp1.7.7のphpがまとな速度では動かない。 まったく同じものをWindows-XP/32bit環境に置くと普通に動く。 wampというライブラリだと phpは動くが今度はPEARがまともに入らず、なによりpostgresqlの動作は絶望的な状態。

phpにあるlibpq.dllをC:\WINDOWS\system32\にコピーする。<--必須
多分必要なのはlibpq.dllだけだと思うが9.0の作業で何か いじった可能性もある。libintl-8.dllは入れたが外した。

libpq.dllを入れたら、ControlPanelは[exit]で一旦抜け、改めて起動しなおす必要がある。

php.iniで
extension=php_pgsql.dll
を有効にする。

DBの追加、サービスの起動などはコマンドプロンプトから ではなく、pgAdminから行う。

 アンインストール時の注意

アンインストールした後はコマンドプロンプトで
net user postgres /delete
でアカウントの削除を行う必要がある。
もし「システムエラー 5が発生しました。アクセスが拒否されました」と なるようなら、
 スタート->プログラム->アクセサリ->コマンドプロンプト
を右クリックし
 管理者として実行
を選び、管理者としてコマンドプロンプトを実行すること。

アンインストールでは古い設定が残り次のインストールが失敗することがある。
フォルダが残っている場合これも削除しなくてはならない

 C:\Program Files\PostgreSQL
それで終わりと思うと甘い。
C:\Users\にpostgresユーザ情報が残ったままとなるので、このフォルダも 消さなければならない。
クリック一発インストール、アンインストールなどという記述に騙されてはいけない。
postgreSQLはとんでもなく面倒なのだ!

 SQL手作業

手作業でSQLアクセスを行うにはSQLShellを起動する。


Server [localhost]:
Database [postgres]:
Port [5432]:
Username [postgres]:
psql (8.4.1)
"help" でヘルプを表示します.
postgres=# CREATE TABLE testTable (name text PRIMARY KEY,info text);
NOTICE:  CREATE TABLE / PRIMARY KEY縺ッ繝・・繝悶Ν"testTable"縺ォ證鈴サ咏噪縺ェ繧、
CREATE TABLE繧ケ"testTable_pkey"繧剃ス懈・縺励∪縺・
postgres=# INSERT INTO testTable (name,info) VALUES('abc','xyz');
INSERT 0 1
postgres=# SELECT * FROM testTable;
 name | info
------+------
 abc  | xyz
(1 行)


postgres=#
この例ではルート権限のpostgresでそのまま作業をしているが、 本来はCREATE ROLEを用いて一般ユーザを作成し、作業する必要がある。
んが、なぜかCREATE ROLEで作成したユーザは「ログインすることが許されていません」 というエラーになる。

SQL SHELLをWINDOWSで使う場合次のコマンドで文字コードを変更しないと上の例のように文字化けする。

postgres=# \encoding SJIS

テーブル一覧を出すのは\d(逆スラッシュd)。
SHOW TABLES;なんてものは用意されていない。ネットで検索すると、とんでもなく 複雑なSQL文で表示させる方法が出てくる。

 PHPでSELECTしてみる。

テーブルtestTableはnameとinfoの2つのフィールドからなっているとして、次のように name指定でinfoを取り出すことができる。
pg_queryで得られる結果はpg_fetch_xxxに与えて初めて普通のデータとなる。
そのままでは"resouce id #3"などといったリソースを示すものとなっている。
<?php
$dbconn= pg_connect('host=localhost port=5432 dbname=postgres user=postgres password=postgres');
if(!$dbconn){
   exit('DB connect failed');
   }
?>
<html>
  <head>
    <title>DB Connect Test</title>
  </head>
  <body>
    <strong>DB Connect Succeeded.</strong>
    <?php
      $result= pg_query($dbconn,"SELECT info FROM testTable WHERE name='abc';");
      echo "result=".pg_fetch_result($result,0,0) ;
    ?>
  </body>
</html>

 いやあ大変だった

postgreSQLは勧めない。

MySQLに皆乗り換える訳だ。

|

« 新幹線now | トップページ | ◆総天然色立体・化学参考書 »

トラックバック


この記事へのトラックバック一覧です: postgreSQLをWindowsでPHPで使う:

« 新幹線now | トップページ | ◆総天然色立体・化学参考書 »