トップページ⇒php
933コメント644KB

PHP + PostgreSQL

■ このスレッドは過去ログ倉庫に格納されています
0001りさあ NGNG
語りません?
0002名無しさん@お腹いっぱい。 NGNG
語ることがない。
石井君のページにでも行ってくれ。
0003名無しさん@お腹いっぱい。 NGNG
フリーの割りに高性能。<pgsql
7.1からOUTER JOINもサポートされるし。
初心者、金は無いがスキルを磨きたい物にはうってつけだ。
0004いしい NGNG
Apache+PHP+PostgreSQLは最強の解といえるでしょう。
0005名無しさん@お腹いっぱい。 NGNG
ひょっとして、結論が出てしまったのでしょうか?
0006名無しさん@お腹いっぱい。 NGNG
ポストグレは遅いよ。ていうか海外ではぜんぜん人気ないし。
やっぱマイでしょ、マイ。
0007名無しさん@お腹いっぱい。 NGNG
>>4
>Apache+PHP+PostgreSQLは最強の解といえるでしょう。

最強ダッテ...
あイタタタタタタ。。。。
0008いC NGNG
君たち、僕の著書をよんでないようだね(藁
0009名無しさん@お腹いっぱい。 NGNG
痛ずぎ....
0010名無しさん@お腹いっぱい。 NGNG
8K制限なくなった…
0011いC NGNG
みなさん、こんなとこで勉強しないで、僕がコンサルしてあげるよ。タダとは言わないからさ。
0012名無しさん@お腹いっぱい。 NGNG
4=馬鹿
0013名無しさん@お腹いっぱい。 NGNG
>>11
oracleと同等の性能出せるんなら考えてもいいよ。
0014名無しさん@お腹いっぱい。 NGNG
OracleだろーがPostgreSQLだろーがMySQLだろーがはたまたInterBaseだろーが
要は適材適所。

別にPostgeSQLがOracleと同等の性能を出す必要は無し。

コンサル受ける必要は全く無いが(w
0015名無しさん@お腹いっぱい。 NGNG
vacuum が無くなればそれなりなんだけどな。>pgSQL
けどモノは使いようでメンテ必須という名目で保守契約結ぶとか
バックアップきっちり取れるとか悪いことばかりじゃないし。

取りあえずdbに金出さない貧乏クライアントは逝ってよし。
0016名無しさん@お腹いっぱい。 NGNG
遊ぶだけなのに何百万も払いたくない>Oracle
0017名無しさん@お腹いっぱい。 NGNG
ほかの板だと、Oracle劇遅っつーのが、一般的見解なんだが、
ここは、Oracle最高っつー奴らばかりなのか?
00181 NGNG
ORACLE最高とかPostgres最強とかそんなことどーでもいいんだけどさ・・
やっぱ低レベルだわここの人達。。。
0019anonymous NGNG
>>18
「語れ」しかいえないお前が一番低レベル。
「語れ」だけで高レベルな情報を得ようというのは虫が良すぎ。
0020名無しさん@お腹いっぱい。 NGNG
まぁ、ここの人たちってさ、>>7みたいに、理由もなく何かを貶めて、
自己のアイデンティティーを確立しようとするような奴らが多いからさ、
そのへん割り引いてくれよ。
0021名無しさん@お腹いっぱい。 NGNG
>>20
7もだが4も理由無しだな。どっちもどっち。
0022電動ナナシ NGNG
でもさー、何でデータベースの話になるとすぐ
Oracle vs PostgreSQL
PostgreSQL vs MySQL
みたいに実装系の比較の話になっちゃうの?
ほかに話すこといろいろありそうじゃん。

データベース板とか作ってもらったら?
隔離板になっちゃうかもしれないけどね。
0023電動ナナシ NGNG
でさー、こういう実装系の話をするときって、
・ある実装系が向いている仕様にはどんなものがあるか?
・ある実装系が向いていない仕様にはどんなものがあるか?
って観点で話さないと全然意味ないと思うよ。どんな実装系にだって設計思想があって、
それによって得意・不得意が出てくるんだから。

例えばデータサイズで言えば、
・単一ファイルシステムのサイズの限界があるか?
 yes: PostgreSQL, MySQL
 no: Oracle
となる以上、ファイルシステムの上限 (例えば 4GB) を超えるデータを MySQL 等で
扱うのはおかしいって話だよね。

逆に、オブジェクト指向言語実装系において、あるオブジェクトを永続化させるのに
便利なデータベースは?って問題なら
Yes!!: PostgreSQL (テーブル定義に継承が利用できるので、クラス定義と同じ構成の
    テーブルを作成できる)
Yes: Enterprise Edition なら、オブジェクト型 (View) の定義ができる
No: その他(自分でインピーダンス不整合を解消する必要がある)
という風になるでしょ?だからこういった言語処理系を前提にしたならば、PostgreSQL か
Oracle かって話しになることが多いだろうね。

こういう前提条件無視してまともな議論になるはずがないんだと思うけど?
0024電動ナナシ NGNG
あとさー、最近のトレンドは「データベース抽象化」でしょ?
つまり、どのデータベースの実装系かってことを意識しないですむようにコーディング
するのが普通になってきているわけだよね。

何でこんなことをするかって言うと、
・開発時のデータベースと運用時のデータベースが違う(高くて買えない場合等)
・データベースに求められる仕様が変更される(例えば性能から安定性へ変わった場合)
という場合がありうるので、移植の手間を省くためにそういうことをするわけだ。さらに
抽象化は、そのためのクラスを通じて行うけど、これを大勢が何度も使うことによって
クラスの品質と使い勝手が向上して、より再利用しやすくなるって副作用もあるよね。

そうだとすると、そんな PostgreSQL はどうよ?とか MySQL はどうよ?的な質問は
意義を失ってくると思うんだが、どうよ?
# だいたい大半の人間は標準 SQL の範囲内でしか SQL 使ってないでしょ?関数とかは
 実装依存になるけど、じゃあ CASE とか /*++ とか使ってる人ってどのくらい
 いるんだろ?

まあそのうちゆり戻しがくるだろうけどさ、それは性能が最優先課題になる場合くらいしか
出てこないだろうね。
0025電動ナナシ NGNG
あーうー、いかん。case も標準 SQL だ。
例をあげるなら型キャストとかだったな・・。
鬱出し脳。
0026名無しさん@お腹いっぱい。 NGNG
>Oracle vs PostgreSQL
>PostgreSQL vs MySQL
頭の中のこんな図式持ってる奴はマカー死ねとかFreeBSD氏ねとか言ってる
のと同次元だ。
00271 NGNG
データベース版依頼だそうかな?
なんか人来なそうだな(わ

やっぱりORACLEはpostgresよりはえーぜ!
とか
Myが最高!!
とかここみたく言う人ばかりだろうね

0028名無しさん@どっと混む NGNG
お前も人のこと言えんのかこのポストグレス厨房
0029名無しさん@お腹いっぱい。 NGNG
これ以上荒らすな、バカヤロ。
厨房はお前だ。
0030名無し NGNG
PostgreSQL だ MySQL だ Oracle だ とかって、そこまで熱くなれる人たちって、ある意味羨ましいです。
どうしたら、そこまでのめり込めるのでしょうか。
冒頭で書いたようなバカっぽいことでウダウダ言ってる割に、技術的には素人から見て凄そうなので
前から不思議に思ってました。UNIX板のスレなど。
煽りじゃないです。

0031電動ナナシ NGNG
宗教だねえ、ここまでくると。
作っている人間が熱くなるならわかるけど、作っている本人よりも取り巻きの方が
熱かったりするからねえ。

確かにそこまでのめりこんで見えるものがあるのも事実だと思うけど・・。
# でも最近のメーリングリストの内容の水準の低下を見るとそうでもないか?
 どこでもインストールネタばっかりだし。
00321 NGNG
ども厨房26歳の1です。

一応Oracle、SQLSerer、My、Postgersとこの4つで開発やってるんですが、
まだドキュメントとかPostgresは少ないからチューニングの仕方がわからないんですよね。
SQLの書き方によるパフォーマンスっていろいろ試してわかってきたんですけど。
Oracleほどインデックスの効果がでないとか。。
サーバ側でいろいろチューニング試した方とかいらっしゃいますかね??
Oracleゴールドなんか持ってっても全然意味ないな。。。。
これじゃ
00331 NGNG
あ
私の作ってるサイト(携帯コンテンツ)はかなりのアクセスがあるんで
トランザクションの数が尋常じゃないもんで
それに耐えうるような方法とかご存知でしたら知りたい・・
0034いC NGNG
知ってるけど教えてあげない。コンサルする?
0035名無しさん@お腹いっぱい。 NGNG
SQL Serverはどうよ
http://www.microsoft.com/Japan/SQL/
0036>35 NGNG
なんでPHP版に?
バカチョンって感じかな。。
メンテとかはしやすい

チューニングは意味ない
0037電動ナナシ NGNG
PostgreSQL って Oracle ほどシステム統計取れない(というか全然取れない)
からチューニングは一苦労だよね。
http://www.linux.or.jp/JF/JFdocs/PostgreSQL-FAQ.html の
3.7, 4.9, 4.10, 4.23 あたりは読んだ?
あとはこの辺かな。
http://www.itboost.co.jp/postgresql/pgsql_tips.php3
あと Vacuum かけないと Index は効果半減。Vacuum と Index の関係については
以下が参考になるかも?
http://www.geocrawler.com/archives/3/6/2000/3/50/3402101/

以上に書いてない事柄で、自分が知っているのはこれくらい。
1 もこれくらいは知っているだろうけど。

・PostgreSQL は遺伝的アルゴリズムを用いてアクセスパスを決定しているが、
 非常に複雑なクエリーの場合、計算量が増えすぎてしまって、そこで余計な
 時間をつぶすことがある。
 $PGDATA/pg_geqo (pg_geqo.sample をコピー) の Generations をぐっと
 減らすと、効率は悪くなるが計算時間も減るので、割と単純なクエリーの
 場合には効果が大きい。

・Join することがないテーブル群がある場合、別々のデータベースに格納し、
 かつそれぞれのデータベースを別のディスク I/O に置く。詳細は Admin Guide の
 Chapter 10 "Disk Management" を参照。
 先のリンクにあるようにテーブルを作って別のディスク上に移動し ln -s
 するのでもよし。

・PostgreSQL のセッションコンテキストの変数を操作することで、アクセス
 パスを手動で最適化することができる(これは今回はじめて知った・・)。
 詳細は Users Guide の 17. Understanding Performace と 19. の sql-set を
 参照。

# 探せば結構出てくるじゃん。
0038電動ナナシ NGNG
>>37
> 割と単純なクエリーの 場合には効果が大きい
割と複雑な・・・の間違い。

あと、テーブル構成とかはきちんと設計できてるんだよね?

join 操作はコストが大きいから、むやみやたらにテーブルを分けるのはまずい、
場合によっては非正規化も検討するとよいってよく言われる。ただしデータの
整合性を維持するのに Trigger 使うくらいなら join した方が 100 倍いい。

あと index は本当に効果的な場合(つまり WHERE で条件として指定される場合)に
限定して使わないと、レコードを変更・追加するときのコストが大きくなる。

さらにファイル断片化とか起きないように、非常に大きなテーブルは専用の区画を
用意するとか、ときどき export & drop table & import してクリーニング
するとか・・・。

# まあこの辺は PostgreSQL に限らず、常識的な内容ばかりで・・。
0039電動ナナシ NGNG
つか、何が悲しくて PHP 板に PostgreSQL の話を書かないといけないんだ!?

ということで話題を変更。

PHP スクリプトのデータベースアクセスにも改善の余地はないの?
細かくアクセスするよりまとめてレコード取得したほうが速いってのは
いいだろうけど、コネクションを永続化するとか、日付計算ごときでデータベースを
呼ばないとかはしているよね。

それでもダメなら Zend Optimizer 試してみて、それでもダメなら Zend
Cache 使ってみれば(試用可能)?
0040名無しさん@お腹いっぱい。 NGNG
>>電動ナナシ
あんたすごいね
00411 NGNG
>>電動ナナシ
超参考になりました

やっぱちゃんと開発前に時間とっていろいろ考えないとだめですよね。。
でも開発の時間のけつは決まってるし、開発と運用両刀じゃすでに終わってる感じ

インデックス張ってんのにやたらおせーと思ったらそうゆうことでしたか。。。
バキュームね
004222世紀を目指す名無しさん NGNG
bakyu-mu kowai mukashi view ga kowaretayo
0043電動ナナシ NGNG
>>40
全然すごくない。厨房レベルだよ。

>>41
RDBMS はテーブル設計が超重要だからね、事前に時間をとってきちんと設計しないと結構
悲惨なことになるよ。特に忙しいサイトだとね。データ見せられてすぐに第三正規化できる
程度に正規化には習熟しておこう。

『Oracle パフォーマンスチューニング』読んでみるといいよ。Oracle と書いてあるけど、
ベースになる思考や知識は共通。だって RDBMS じゃん。メモリアクセスやディスク
アクセスのパターンがそんなに劇的に変わるはずがない。

Vacuum は index から使われないエントリを削るので、頻繁に削除・変更が起きるなら
必須だね。Rebuild はしてくれないような話も聞くが・・・。explan 使って index が
使われているか確認してみたら?

>>42
Vacuum で何か壊れたって経験はないなあ。自分の面倒見ている範囲では、もう vacuum
回数は 1 万回以上にもなるけど、何か壊れたことはない。ディスク障害とか別の原因が
あったんじゃないの?
0044名無しさん@お腹いっぱい。 NGNG
Vacuumしなきゃいけない構造はそのうち変えるつもりだって
本家のMLでいってたな<Postgres

PHP+PostgreSQLってやはり最初はとっつきだよなやすい組合せだよな
0045? NGNG
電動ナナシ=いしい
?
0046名無しさん@お腹いっぱい。 NGNG
>45
うそ。141氏なら、文書の最後は。じゃなくて"."
0047名無しさん@お腹いっぱい。 NGNG
今日初めてPostgreSQL+PHP3の組合せに取り組みました。
早速本などを参考にデータベースよりデータを取り出してみようと思ったのですが、
いきなりエラーです。

エラーは
"Unable to connect to PostgreSQL server. FATAL 1: SetUserId :
user' nobody' is not in 'pg_shadow' in /usr/local/apache/...(略)... on
line 10"
みたいに出て来ました。
これはapacheのconfiguファイルで、接続先を設定しなければならないエラーなのでしょ
うか?
0048名無しさん@お腹いっぱい。 NGNG
nobody に テーブルに対するアクセス権限を認めてあげましょう。
004947 NGNG
>>48
これは/usr/local/pgsql/data/pg_hba.confのlocalとhostで編集でしょうか。
今このファイルを見ましたら、デフォルト設定になっていました。
一応どちらもallになっており、更にはこのファイルもreadonlyモードにしてみました。
しかし、やっぱり結果は同じでした・・・

本当に右も左も判らない私・・・
005048 NGNG
>>47

マニュアルのこの部分を読んで設定してください。
http://www.pjam.jpweb.net/pgsql-doc/ej/user/sql-grant.htm

もし上のが意味不明に思えるなら下記の一連のスレッドをお読みください。
http://sidecar.ics.es.osaka-u.ac.jp/php-jp/archives/msg02923.html


0051別人28号 NGNG
私の場合、pg_connect(user=postgres table=xxxx)
このuserはcreateuserでつくったのに、上記の同じエラーが
出るのですが、さっぱりわけがわかりません。
createuserを使うと、pg_passwdとpg_shadowのどちらのファイルに
記述されるんでしょう。
pg_shadowはテキスト・エディターで開いても、文字化けして読めません。

0052名無しさん@お腹いっぱい。 NGNG
バイナリファイルを開いて「文字化け」とはかわいいね。
0053名無しさん@お腹いっぱい。 NGNG
> うそ。141氏なら、文書の最後は。じゃなくて"."

句読点を「,」「.」にしてるやつ最高にうざい・・・・

# レスキューもまねして,.使ってたな。
005447 NGNG
>>48
ありがとうございます。
早速上のマニュアルを参考に、テーブルのアクセス権を変更してみました。
GRANT ALL ON XXXX(テーブル名) TO PUBLICでenterしたら、
chengeのような表示が出ました。
もう一度ブラウザ上でファイルを読みだしたところ、今度は違うエラー表示です。
これは多分私が真似したスクリプトが違うようで、
Parse error:
parse error in /usr/local/apache/htdocs/ユーザー/test01.php3 on line 10
でした。これはスクリプトの10行目が何かおかしいよ、という意味で解釈してい
いのでしょうか。

もしそうなら、データベース自体への接続は出来たのかと一安心してます。
0055名無しさん@お腹いっぱい。 NGNG
>>51
pg_connectってtableの引数ないんじゃ?

0056別人28号 NGNG
>>55
functionでおま。
問題は解決。
データベースのデータがページに出力されたのをみた瞬間、
ニヤリと笑ってしまった。ああ、プログラムの喜びよ(おおげさ)
0057名無しさん@お腹いっぱい。 NGNG
これからPostgreSQL+PHPの勉強を始めようと思います。
今まで少しだけWindowsでidc+htx+odbc+Accessという組合せでデータベースを
ウエブ上に表示させたり、そこから更新や新規登録などをかじってみました。

そこで質問ですが、idc+htxという組合せだと
サイト訪問者--->htmlファイル等で問合せ--->idcファイルが問合せの処理--->htx
ファイルにその結果を表示
という流れだと思うのですが、PHPの場合は
サイト訪問者--->htmlファイル等で問合せ--->phpファイルが問合せの処理+その処理
結果を表示
という流れと考えていいのでしょうか?
0058初期不良 NGNG
>>56
ODBC ドライバ使って MS Access から pg のデータを
編集できたときもうれしかったですわ。
データを作るならこの方がやりやすいしね。
MySQL でもこういう子とできるのかな?
0059初期不良 NGNG
できるみたい。
http://www.softagency.co.jp/mysql/Win/win.html
とりあえず試してみます。
0060初期不良 NGNG
簡単にできた
■ このスレッドは過去ログ倉庫に格納されています