1 名前:りさあ [ 2001/02/26(月) 04:20 ID:7I8PBOt. ] 語りません?
99 名前:Error 401 [ 2001/03/19(月) 16:04 ID:JUrUc3Rc ] なかなかよさそうなページ発見。 www.zend.com/codex.php?CID=10 英語では、「抽象化DBクラス」を「Database Abstraction Class」って 言うみたいですね。
100 名前:Error 401 [ 2001/03/19(月) 20:25 ID:JUrUc3Rc ] PHP全般のnews groupも発見。(MLと同じ内容だけど) news.php.net PEARもあるよ。 おまけ:CVS currentなPEARのサンプルです。 require("DB.php"); $db = DB::connect("pgsql://localhost/fdkwf"); if (DB::isError($db)) { &nbsp;&nbsp;exit; } // echo $db->toString() . "<br>\n"; $db->setFetchMode(DB_FETCHMODE_ASSOC); $sql = "select emp_code, emp_name from emp"; if (DB::isError($res = $db->query($sql))) { &nbsp;&nbsp;echo DB::errorMessage($res); &nbsp;&nbsp;exit; } echo "<table>\n"; while ($row = $res->fetchRow()) { &nbsp;&nbsp;echo "<tr><td>$row[emp_code]</td><td>$row[emp_name]</td></tr>\n"; } echo "</table>\n"; $db->disconnect();
101 名前:Error 401 [ 2001/03/19(月) 21:00 ID:JUrUc3Rc ] ついでに、PostgreSQL情報も。 PostgreSQL 7.1beta6が出てたのでインストールしました。 やっとDEBUGメッセージがpsqlにも出るようになった。 これが無いと、デバッグきついからね。 beta5でバグってた、serial型も修正されてた。 マニュアルに、『Porting from Oracle PL/SQL』が追加されてた。 テキスト換算で500行くらいのドキュメント。 マニュアルは、beta5から、かなり増えてる。
102 名前:Error 401 mailto:sage [ 2001/03/19(月) 21:10 ID:??? ] あと、日本語対応のODBCも入ってるみたい。 ChangeLog: > 2001-03-16 08:03 inoue > > * src/interfaces/odbc/: multibyte.c, multibyte.h: Oops I forgot to > add new files for multibyte support. Sorry Eiji. だったらしい。
103 名前:Error 401 mailto:sage [ 2001/03/19(月) 21:12 ID:??? ] なお、ちゃんとした情報は、ChangeLogを参照してください。 ウソ書いてる可能性大。
104 名前:名無しさん@お腹いっぱい。 [ 2001/03/20(火) 01:44 ID:a/ATm0Yw ] PostgreSQLをpostmaster -S -i で起動しておいて telnet www.hoge.com 5432 ってやってなんかコマンドを打ってみたいのですけど なにうてばいいのでしょう?何打っても EInvalid packet lengthConnection closed by foreign host. とでてしまうのです。やさしいお兄さんおしえてください。
105 名前:電動ナナシ [ 2001/03/20(火) 06:42 ID:??? ] この辺にプロトコル仕様出てるよ。 普通に psql の感覚でコマンド打ってもダメだよ。 www.postgresql.org/docs/programmer/protocol.htm
106 名前:電動ナナシ [ 2001/03/20(火) 06:45 ID:??? ] >>101 なかなか 7.1 Release 出ないね・・・。 石井さんは 2 月中って言っていたのに。結構難航しているのかな。
107 名前:名無しさん@お腹いっぱい。 [ 2001/03/21(水) 15:59 ID:DtPUdB3c ] データをフォームより次のページ渡すとき、 GET,Hidden以外でできるのでしょうか? Hiddenを使用しないページは、ユニークなIDが 渡っているような気もしますが・・。 他にデータを格納して、次のページでそのIDを参照し データを取得してるとか・・。 どうされてるんでしょうか?
108 名前:名無しさん@お腹いっぱい。 [ 2001/03/21(水) 16:21 ID:??? ] >>107 PHP4なら、sessionを使えばできる。マニュアルの LXVIIIセッション処理関数 を参照。
109 名前:名無しさん@お腹いっぱい。 [ 2001/03/22(木) 00:10 ID:GJXSK57Q ] 今PHP3のスクリプトを作成していて、どうしても基本的な部分が 判らず困っております。 フォーム(test1.php3)からデータを受取り、それをデータベース(Postgre SQL) へ登録する際、それを処理するページがtest2.php3とお考え下さい。 登録用フォームにはtext形式でname="cr"という項目にデータを入力 してもらいます。 因みにPostgre SQL側ですが、crにはNull不可としてあります。 ここでデータ登録は問題なく処理が出来ました。 しかし、もしデータが何も入っていない時と、test1.php3をブック マークとかに登録されていた場合には、直接このページへ入って来 た時にエラー表示を出したいと思いました。 そこでただinsert処理をしていたスクリプトにエラー処理用のスクリ プトを追加してみたいと思ったのですが、どうにも上手に処理出来ま せん。 この場合、以下のスクリプトで解決する方法はどうすればいいでしょ うか? // ここにfunctionを設定? if(ここに何をいれるのか?) { print('エラーです'\n); } ellse { 現在使用しているinsert処理用のスクリプト } 宜しくお願いいたします。
110 名前:109 [ 2001/03/22(木) 02:07 ID:4SRnrY4g ] ごめんなさい。 自分で解決出来たと思われます。 ついWindowsの癖で、フォームで使用するタグにvalue="$cr"を入れておらず、 それが問題だったような気がします。 if($cr == "") { print("エラーです\n"); } else { insertの処理 } で問題なさそうな気がします。(現在テストした結果ですが) 何か問題があるような場合、ご指摘いただけましたら幸いです。
111 名前:名無しさん@お腹いっぱい。 [ 2001/03/22(木) 13:50 ID:BwCaGgrc ] >>105 電動ナナシさんありがとうございました。 ちょっとむずかしくて解りませんでしたけど。 もしよかったらなんかサンプルコードありませんか? 例えばpg_userにアクセスするような。 HTTPがわかりやすすぎるのでしょうか?はぁ。
112 名前:Error 401 [ 2001/03/23(金) 14:18 ID:PzDdYM6s ] PEAR DBのCVSでUpdateが入ってました。 $ cvs update P common.php P mysql.php P odbc.php P oci.php common.php以外は、PostgreSQLには関係無いけど :-P ちなみに私はPEARに全面移行しました。
113 名前:Error 401 [ 2001/03/23(金) 19:54 ID:PzDdYM6s ] 質問。 持続的接続を使ってる人います? なんか、動きがおかしいんです。 1. php.ini : pgsql.max_persistentの値より、プロセスが増える。 2. 'now'::timestampの値がおかしい。 1.は、テストとして10を設定してるんですが、プロセスが10を超えてしまいます。 どこまで増えるかは不明。 2.は、ストアードファンクションの中で、 insert into tbl(col) values('now'::timestamp) とやると、過去のtimestampが記録されることがあります。 ひょっとすると、過去に立ち上がったプロセスに接続されると、 この現象が起きるのかもしれませんが、良くわかりません。 ・・・というわけで、現在は持続的接続は使っていません。 でも持続的接続にすると、ページあたり、-30ms位になるんだけどなぁ。
114 名前:名無しさん@お腹いっぱい。 [ 2001/03/23(金) 20:59 ID:QOTp2BjA ] ど素人なんですけど 持続的接続はhttpdのpidごとに張るんですよね。 だからプロセスが変わるってのは変なのではないでしょうか? ストアドだから張ったときのnow読んでいるって言う可能性は ないのでしょうか? この板にがんばって発言してみようと思ってるんですけど ほんとど素人であーぱーナこといってすいません。
115 名前:電動ナナシ [ 2001/03/23(金) 21:25 ID:??? ] >>113 ソース見たけどよくわからんなあ。 チェックは働いているみたいなんだけど。 全プロセスで pConnect() してるの? どこかで Close() したりしてない? daemontools 使って PgSQL 側の接続状況調べて、同時に何コネクション 張りにきているか調べてみたら? tanaka-www.cs.titech.ac.jp/~euske/doc/daemontools.html
116 名前:Error 401 mailto:sage [ 2001/03/23(金) 21:27 ID:??? ] >>114 うーん、昨日から持続的接続のテストを始めて、 今日になって、'now'::timestampに昨日の日付のものが 登録されるようになったんです。 サーバは、昨日から立ち上げっぱなし、 クライントは、今日立ち上げたもの です。 持続的接続は、クライアントがいなくなった場合、そのプロセス は残っていて、接続要求があったときに、空いてるプロセス があれば、そこにつなげる、というふうに思ってたんですが、 間違いでしょうか?
117 名前:Error 401 mailto:sage [ 2001/03/23(金) 21:29 ID:??? ] >>115 あ! PEARのDB::close()してるとこがありました。 このことが、何かおかしな状況を作り出す原因なのかな?
118 名前:Error 401 mailto:sage [ 2001/03/23(金) 21:35 ID:??? ] >>115 daemontoolsは、ちょっとスケジュールが厳しいので、 インストールして、調査、っていうのは厳しいなぁ。 来週火曜日までに、ひととおり作り上げ、来月稼動なので。 来週火曜日で承認されたら、また調査してみます。
119 名前:電動ナナシ [ 2001/03/23(金) 21:41 ID:??? ] 持続的接続というのは、あくまで Apache/PHP <--> RDBMS 間の話というのは いいよね。で、close() すると持続的接続でも接続解除されるというのも いいよね。 で、持続的接続の場合には次のようになる。 例えば pgsql.max_persistent = 2 とするよ。 最初に pConnect() するよね。 ・PHP の持続的接続数 = 1 次に pConnect() するよね。 ・PHP の持続的接続数 = 2 次に pConnect() すると失敗 ・持続的接続数 > max_persistent が成立 でも、次の場合はうまくいく。 最初に pConnect() する。 ・PHP の持続的接続数 = 1 次に pConnect() する。 ・PHP の持続的接続数 = 2 どれかがいったん close() ・PHP の持続的接続数 = 1 次に pConnect() する。 ・PHP の持続的接続数 = 2 こんな感じになると思う。間違っていたらスマン。
120 名前:電動ナナシ [ 2001/03/23(金) 21:49 ID:??? ] あ、上のはあくまで別ホストに接続する場合だよ。 pConnect 関数は、過去の接続を覚えていて ・以前接続したのと同じコネクションがあれば、それを再利用 ・そうでなければ接続 を行う。 で、「以前と同じ接続」かどうかは "pgsql_HOSTNAME_PORT_OPTIONS_TTY_DBNAME" という文字列で判断される。つまりホスト名、ポート番号、接続オプション、 端末名、データベース名の組み合わせがいっしょなら同じ接続、 そうでなければ別の接続になる。 pgsql.max_persistent は上記組み合わせの個数を制限するもの。 仮に Apache のプロセス数が 100 あっても、同じホストの同じ DB に接続 するなら、コネクションは一つしか張られないから max_persistent の 制限にはひっかからない。 あるコネクションへのアクセスが許可される Apache のプロセス数ではないよ。
121 名前:電動ナナシ [ 2001/03/23(金) 21:59 ID:??? ] ちなみに何でこのような持続的接続をするとかというと、 ・セッション確立のコストが大きい(メモリと CPU に負荷を与える) ・WWW の場合、リクエスト単位で接続するとセッション確立・破棄が 頻繁に行われることになり、さらに負荷がかかる から。 で、複数リクエストを一つのデータベースセッションで処理することで この問題を解決しようということで、持続的接続というアイデアが 生まれたんだよね。確かもともとはミドルウェア(トランザクション モニタの Connection Pooling 機能)だと思った。
122 名前:Error 401 [ 2001/03/26(月) 14:40 ID:zxG0OE1w ] > 持続的接続というのは、あくまで Apache/PHP <--> RDBMS 間の話というのは > いいよね。で、close() すると持続的接続でも接続解除されるというのも > いいよね。 ん、勘違いしてました。 close()で接続解除されるのは、あくまでも「仮想接続(勝手に名前 付けました)」で、httpd <-> postgresの接続は残るものだと思って ました。じゃないと、postgresのプロセスが死なないことに説明 がつきません。 そもそも、close()しても、このpostgresのプロセスが残る、という のが、何かおかしいのでしょうか? # OracleのBC4Jにおけるコネクションぷーリングの考え方とは # かなり違うなぁ。 ※仮想接続とは、ブラウザ <-> httpdのHTTPセッションを越えた、 複数HTTPセッションにまたがる、仮想的なDBコネクションを 指しています。 > "pgsql_HOSTNAME_PORT_OPTIONS_TTY_DBNAME" > という文字列で判断される。つまりホスト名、ポート番号、接続オプション、 > 端末名、データベース名の組み合わせがいっしょなら同じ接続、 > そうでなければ別の接続になる。 うーむ、テストは同じクライアントから、同じデータベースへの 接続を、同じユーザ名、パスワードで繰り返すものだったから、 やっぱりPostgresのプロセスが増殖していくのは納得いきません。 # PostgreSQL 7.1RC1出てますね。
123 名前:電動ナナシ [ 2001/03/26(月) 16:09 ID:Ak2GGF56 ] >>122 Postgres が残るってのは不思議だなあ。勘違いしてるかもしれないので、 ちょっと調べてみる(ちゃんと確認しているわけじゃなかったので)。 PostgreSQL と Apache/PHP は同じサーバーで動いているの? lsof 入れてみて、どの Postgres プロセスが誰とお話しているか調べて みたらどうだろ?
124 名前:Error 401 mailto:sage [ 2001/03/26(月) 17:17 ID:??? ] >>123 電動ナナシさん、いつもどうもです。 なんか、お手間を取らせてしまってすみません。 今、とんでもなくテンパッテるので、私の方の再試は水曜日以降に なります。
125 名前:名無しさん@お腹いっぱい。 [ 2001/03/26(月) 17:30 ID:pwdcVObI ] >>113 > 2.は、ストアードファンクションの中で、 > insert into tbl(col) values('now'::timestamp) > とやると、過去のtimestampが記録されることがあります。 これは、'now'::text にしなくちゃ、って話じゃなかったらスマソ
126 名前:Error 401 mailto:sage [ 2001/03/26(月) 18:13 ID:??? ] >>125 .> これは、'now'::text にしなくちゃ、って話じゃなかったらスマソ むむ。 test=# select 'now'::text; とやると、 ?column? ---------- now (1 row) となるのですが・・・。 # PostgreSQL 7.1beta6です。 # 運用開始までに、7.1出るのだろうか・・・。
127 名前:名無しさん@お腹いっぱい。 mailto:sage [ 2001/03/26(月) 19:19 ID:??? ] >>126 いや、そうじゃなくて、トリガーとかで 'now'::timestamp って するとトリガー生成時点の 'now' になっちまうんで、'now'::text にしとくって話。
128 名前:Error 401 [ 2001/03/26(月) 20:19 ID:zxG0OE1w ] >>127 あっ。理解できました。 で、いろいろ調べたんですが、 CURRENT_TIMESTAMP -- SQL92準拠 now() -- PostgreSQL固有? 'now' のどれでも、現在時刻を返してくれます。 > いや、そうじゃなくて、トリガーとかで 'now'::timestamp って > するとトリガー生成時点の 'now' になっちまうんで、'now'::text > にしとくって話。 そういえば、この話どこかで見覚えがあるんですが、 マニュアルに載ってるのですか? マニュアルは、ローカルでNamazu化してるんですけど、 検索できませんでした。
129 名前:127 mailto:sage [ 2001/03/26(月) 20:42 ID:??? ] >>128 それが私もどこで見かけたんだか忘れてしまいまして・・・
130 名前:Error 401 [ 2001/03/28(水) 10:42 ID:DXCaFMjw ] 持続的接続の調査をしました。 [環境] PHP 4.0.4pl1 (pearはCVS currentのもの) PostgreSQL 7.1RC1 使ったソースは以下。 -- test.php --------- <?php &nbsp;&nbsp;require("DB.php"); &nbsp;&nbsp;$db = DB::connect("pgsql://localhost/test", true); &nbsp;&nbsp;if (DB::isError($db)) { &nbsp;&nbsp;&nbsp;&nbsp;echo "Connect failed."; &nbsp;&nbsp;&nbsp;&nbsp;exit; &nbsp;&nbsp;} &nbsp;&nbsp;echo "Connect success."; &nbsp;&nbsp;$db->disconnect(); ?> ---------------------- PostgreSQLは、 pg_ctl start -o -i で起動。 -- php.ini ------------------- pgsql.allow_persistent = On ; allow or prevent persistent link pgsql.max_persistent = 10 ; maximum number of persistent links. -1 means no limit pgsql.max_links = -1 ; maximum number of links (persistent+ ------------------------------- 続く。
131 名前:Error 401 [ 2001/03/28(水) 10:43 ID:DXCaFMjw ] ・まずブラウザでtest.phpを表示してみる。 →postgresのプロセスは残ったまま ・そのまま何回かリロードしてみる。 →postgresのプロセスは残ったまま。ただしプロセス数は増えない。 ・時間を置いてリロードしてみる。 →規則性はわからないが、あるタイミングでプロセスは増えていく。 ・どこまで増えるかはわかりません。 ps -ef | grep postgresの結果 postgres&nbsp;19528&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;0&nbsp;09:27&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;./postmaster&nbsp;-D&nbsp;/usr/local/pgsql postgres&nbsp;23715&nbsp;19528&nbsp;&nbsp;0&nbsp;10:02&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;postgres:&nbsp;nobody&nbsp;test&nbsp;127.0.0.1 postgres&nbsp;23723&nbsp;19528&nbsp;&nbsp;0&nbsp;10:04&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;postgres:&nbsp;nobody&nbsp;test&nbsp;127.0.0.1 postgres&nbsp;23813&nbsp;19528&nbsp;&nbsp;0&nbsp;10:12&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;postgres:&nbsp;nobody&nbsp;test&nbsp;127.0.0.1 postgres&nbsp;24841&nbsp;19528&nbsp;&nbsp;0&nbsp;10:26&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;postgres:&nbsp;nobody&nbsp;test&nbsp;127.0.0.1 続く。
132 名前:Error 401 [ 2001/03/28(水) 10:44 ID:DXCaFMjw ] ・lsofをインストールしてみましたが、使い方が良くわかりません(^^; とりあえずオプション無しの結果。 postmaste&nbsp;24841&nbsp;postgres&nbsp;&nbsp;mem&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;&nbsp;&nbsp;3,65&nbsp;&nbsp;1651925&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;817675&nbsp;/home2/local/pgsql7.1RC1/bin/postgres postmaste&nbsp;24841&nbsp;postgres&nbsp;&nbsp;mem&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;&nbsp;&nbsp;&nbsp;3,7&nbsp;&nbsp;&nbsp;492888&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;180226&nbsp;/lib/ld-2.1.3.so postmaste&nbsp;24841&nbsp;postgres&nbsp;&nbsp;mem&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;&nbsp;&nbsp;&nbsp;3,7&nbsp;&nbsp;&nbsp;&nbsp;79474&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;180244&nbsp;/lib/libcrypt-2.1.3.so postmaste&nbsp;24841&nbsp;postgres&nbsp;&nbsp;mem&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;&nbsp;&nbsp;&nbsp;3,7&nbsp;&nbsp;&nbsp;197984&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;180288&nbsp;/lib/libresolv-2.1.3.so postmaste&nbsp;24841&nbsp;postgres&nbsp;&nbsp;mem&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;&nbsp;&nbsp;&nbsp;3,7&nbsp;&nbsp;&nbsp;523855&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;180236&nbsp;/lib/libnsl-2.1.3.so postmaste&nbsp;24841&nbsp;postgres&nbsp;&nbsp;mem&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;&nbsp;&nbsp;&nbsp;3,7&nbsp;&nbsp;&nbsp;&nbsp;72276&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;180272&nbsp;/lib/libdl-2.1.3.so postmaste&nbsp;24841&nbsp;postgres&nbsp;&nbsp;mem&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;&nbsp;&nbsp;&nbsp;3,7&nbsp;&nbsp;&nbsp;545453&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;180228&nbsp;/lib/libm-2.1.3.so postmaste&nbsp;24841&nbsp;postgres&nbsp;&nbsp;mem&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;&nbsp;&nbsp;&nbsp;3,7&nbsp;&nbsp;&nbsp;174341&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;639164&nbsp;/usr/lib/libreadline.so.4.0 postmaste&nbsp;24841&nbsp;postgres&nbsp;&nbsp;mem&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;&nbsp;&nbsp;&nbsp;3,7&nbsp;&nbsp;&nbsp;&nbsp;14837&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;180309&nbsp;/lib/libtermcap.so.2.0.8 postmaste&nbsp;24841&nbsp;postgres&nbsp;&nbsp;mem&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;&nbsp;&nbsp;&nbsp;3,7&nbsp;&nbsp;5309068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;180230&nbsp;/lib/libc-2.1.3.so [考察] うーん、全く進歩なし(^^;
133 名前:Error 401 [ 2001/03/28(水) 11:05 ID:DXCaFMjw ] ふと思いついて、phpinfo()してみた。 さっきのプロセスが残っている状態で見てみると、 Active Persistent Links 0 Active Links 0 disconnect()なしでスクリプトを実行すると、 Active Persistent Links 1 Active Links 1 その状態で、disconnect()すると、 Active Persistent Links 0 Active Links 0 プロセスは1個増えました。 ちなみに、これらのプロセスは24時間たっても消えません。 Apacheを止めると消えます。 [考察] PHPの持続的接続のリンク数の管理はうまくいっているみたい。 プロセスの生成・消滅条件は、いまだわからず。
134 名前:Error 401 mailto:sage [ 2001/03/29(木) 09:00 ID:??? ] えーと、ひょっとして気になさっている方がいるかもしれないので、 報告しておきます。 結局、現状理解の糸口さえ見つからない状態なので、 持続的接続を使うのは、とりあえず止めます。 PHP4.0.5 + PostgreSQL7.1がそろったあたりで、再チャレンジします。
135 名前:Error 401 mailto:sage [ 2001/03/29(木) 18:24 ID:??? ] 持続的接続の謎解明? 仕事の合間に、いろいろとWebを検索してみたら、 「postgresプロセスが死ぬのは、対応するapacheプロセスが 死んだとき」 という情報にあたりました。 どっかの英語のBBSです。 今使っているサーバは、apacheを起動すると、apacheのプロセスが 10個立ち上がります。 で、これに空きがある場合は、HTTPリクエストをこれらのプロセスが 処理します。HTTPセッションが終了しても、これらのプロセスは 残ったままです。 持続的接続で立ち上がったpostgresプロセスは、これらのプロセス との間に、DBセッションを確立します。 だから、close()しても、postgresプロセスは残ったままなんです。 ・・・という線で自分を説得。多分正解。
136 名前:電動ナナシ mailto:sage [ 2001/03/30(金) 06:59 ID:??? ] ふうむ、そういうことなのかあ。 ソースちょっと追ったけど、connect() の場合と pconnect() の場合とで ほとんど同じ処理をしているんだよね。単にリンク数のカウンタ処理部分が 違うくらいで。 connect() だと postgres は死んでくれるの? 謎だあ。もうちょっと追ってみよう。 # 暇ができたらだけど・・・。
137 名前:Error 401 mailto:sage [ 2001/03/30(金) 09:17 ID:??? ] >>136 >connect() だと postgres は死んでくれるの? はい、死んでくれます。 >謎だあ。もうちょっと追ってみよう。 念の為書いときます。 configure optionの --enable-sigchildが、Oracleの持続的 接続を使う場合には必要という情報を見つけ、 リコンパイルしてみたんですが、これは関係ありませんでした。 オプション無しの場合と全く同じ挙動でした。
138 名前:電動ナナシ [ 2001/03/30(金) 17:52 ID:??? ] >>137 なんとなく原因がわかった雰囲気。 ひょっとして PostgreSQL だけでなく、あらゆる持続的接続の Close が きちんとされてないという予測を立てたんだけど、追試できる人っている?
139 名前:名無しさん@お腹いっぱい。 [ 2001/03/30(金) 18:45 ID:PF8gszDA ] きちんとって何? close で close されたら、pconnect の意味なし
140 名前:電動ナナシ mailto:sage [ 2001/03/30(金) 19:45 ID:??? ] え、じゃああれでいいんだ。 馬鹿さらしてしまった。鬱だし脳。
141 名前:名無しさん@お腹いっぱい。 [ 2001/03/30(金) 20:12 ID:PF8gszDA ] pconnect は、apacheのpreforkみたいなもの。 バックエンドをpreforkさせるための便宜的手法。 fastcgi みたいなものと言った方がわかりやすい?
142 名前:Error 401 mailto:sage [ 2001/04/03(火) 17:13 ID:??? ] ひっそりと、PostgreSQL RC2が出てるよsage。 しかし、話題になりませんね・・・。
143 名前:電動ナナシ [ 2001/04/05(木) 08:30 ID:??? ] >>142 PostgreSQL の場合、ホビーよりビジネスでの利用が多いから、 安定性が確認されていないベータ版には興味がないのかもしれないね。 そういえば PHP-jp に pConnect() 時の Backend の数を質問していた人が いたけど、回答がなかったね。 あと一応確認。そんなことも知らんのかって言われそうだけど・・・。 Module 版の PHP の場合、Apache で fork() された分だけプロセスが あると思っていいんだよね?。例えば Process ID が 1000 な httpd と 1001 な httpd がある場合、httpd に組み込まれた PHP はそれぞれ 別々のプロセスとして動作するんだよね。 そうだとすると persistent_links や max_links は httpd プロセス ごとに効くことになるから、Process 数 x {persistent|max} links に なるのは当然ということか。 # これらの数字は PHP/Zend Process ごとに保有されるみたい。
144 名前:名無しさん@お腹いっぱい。 [ 2001/04/05(木) 12:21 ID:JmQP/k0Y ] >>142 >PostgreSQL の場合、ホビーよりビジネスでの利用が多いから、 >安定性が確認されていないベータ版には興味がないのかもしれないね。 7.1前提でシステムを作っている私って・・・ # 4/23リリース予定。それまでにRelease版出るかなー? >そういえば PHP-jp に pConnect() 時の Backend の数を質問していた人が >いたけど、回答がなかったね。 すぐに自己フォローしてたから・・・。 ちなみに、あれは私じゃありません。 >Module 版の PHP の場合、Apache で fork() された分だけプロセスが >あると思っていいんだよね?。例えば Process ID が 1000 な httpd と fork()って、PHPのプロセスのことですか? だったら、fork()はしないと思いますが・・・。 # ここ、暇なときにDSOの仕組みをもう一度調べて、間違ってたら訂正します。 異なるhttpdに接続されたHTTPセッションは、全く関連性が無いと 思います。 # これも、後日訂正の可能性あり。
145 名前:電動ナナシ mailto:sage [ 2001/04/05(木) 12:54 ID:??? ] >>144 > fork()って、PHPのプロセスのことですか? いや、httpd のプロセスのこと。 さっきマニュアル見たらちゃんと書いてあった。httpd の Child Process ごとに 永続的接続するよって。 鬱だし脳。 www.php.net/manual/ja/features.persistent-connections.php
146 名前:名無しさん@お腹いっぱい。 [ 2001/04/05(木) 16:26 ID:tP58bUgQ ] ブラウザ上にフォームで$test_idという項目が設けてあり、そこに2文字(本 来は英数字のみの組合せ)を入力してもらい、それをPHPを通じてPostgreSQL からデータをピックアップ予定です。 この$test_idがselect文において select * from t_test where test_id = $test_id としてデータをピックアップする際の判断材料です。 しかし、フォームの場合だと何も入力しないで送信したり、2文字 と指定していても1文字しか入れないなど、色々問題が考えられま すよね? で、それらはPHP内にエラー処理スクリプトを書いて、自分では 「完璧!」とか思っていたのです。 でも、ちょっと不安だったので、色々とフォームに英数字以外に 記号など(*や!などなど)を入れると、エラーが出ることが判明 しました。 このような記号が入力されたとき、何か上手にエラー対処する方 法などを教えていただけませんでしょうか?
147 名前:名無しさん@お腹いっぱい。 [ 2001/04/05(木) 16:41 ID:??? ] >>146 ereg()とかpreg_xxxx()などの正規表現ライブラリ関数を使って、 妥当性チェックしてみてはいかが?
148 名前:146 [ 2001/04/05(木) 23:25 ID:tP58bUgQ ] >>147 早速ereg("[[:alnum:]]{2}", $test_id)として、ちゃんと指定の 形で英数字2文字だけが入力されているかを判定させてみました。 無事考えていたことが出来ました。 ありがとうございます。
149 名前:名無しさん@お腹いっぱい。 mailto:sage [ 2001/04/06(金) 16:39 ID:??? ] ereg()の正規表現って気持ち悪いね ereg()の正規表現って気持ち悪いね
150 名前:名無しさん@お腹いっぱい。 [ 2001/04/06(金) 23:58 ID:EZv8sM3A ] 149って気持ち悪いね 149って気持ち悪いね
151 名前:名無しさん@お腹いっぱい。 [ 2001/04/07(土) 05:13 ID:vwo99Xeg ] >PostgreSQL の場合、ホビーよりビジネスでの利用が多いから、 >安定性が確認されていないベータ版には興味がないのかもしれないね。 つーか、ほいほい導入してもデータの移行が大変なんだよ
152 名前:名無しさん@お腹いっぱい。 [ 2001/04/10(火) 14:37 ID:zIPEt9lw ] セッション管理についてわかりやすく説明されている サイトはありますか?
153 名前:名無しさん@お腹いっぱい。 mailto:k [ 2001/04/11(水) 01:46 ID:??? ] 基本中の基本だとは思うのですが、私の少ない脳味噌では考え付かないので、 どなたかご親切なアドバイスをいただけませんか? フォームからInsert用のデータを受取り、それを処理するファイルがhoge.php3 とします。 フォームからのデータ自体をphp3利用でPostgreSQLにInsertすることまでは出 来ました。 しかし、このままでは本当にそのデータがちゃんとデータベースに登録されたのかど うかがフォームに書き込んだ人は判りませんから、同じhoge.php3にデータ登録後 に今度は今ちょうど登録したデータはこれでいした、みたいに表示させたいのです。 でも、それを簡単に処理する方法がどうしても思い付きません。 是非この簡単・初歩の初歩だとは思うのですが、それすら判らない厨房に是非暖かい アドバイスをいただけませんでしょうか?
154 名前:名無しさん@お腹いっぱい。 [ 2001/04/11(水) 02:49 ID:bTSMk3Jw ] $sql = "insert into hoge values('$hoge')"; $result = pg_exec($sql); if($result){ echo "登録したデータは$hoge"; }
155 名前:Error 401 [ 2001/04/11(水) 10:38 ID:BTheoUl2 ] >>153 どこが判らないのかが良くわかりませんが、 pg_getlastoid() を使えば、pg_exec()でInsertされたオブジェクトのoidを取得できます。これで、 select * from table_name where oid = $last_oid とすれば、今Instertしたタプル(行)を取り出せます。 それとも、取り出したタプルを簡単に表組して表示する方法がわからない のかな?
156 名前:名無しさん@お腹いっぱい。 [ 2001/04/11(水) 14:34 ID:ojYfWFHg ] >>155 私もそれでいいと思います。 同時にinsert,selectの部分はトランザクション入れた方がいいかも。 oid取得後selectして、 表組みが面倒ならpg_fetch_array($r,$row)で配列に格納して テンプレートファイルに埋め込むという手も。 見栄えはいいかも・・。
157 名前:153 [ 2001/04/11(水) 15:31 ID:5X9lWT8g ] >>154 >>155 >>156 皆さん本当にありがとうございます。 PHPの本を買って、色々関数を探してみているのですが、実際にそれ らをどう活用するのかが今ひとつ理解しきれていません。 今晩家に帰って早速皆様から教えていただきました方法を試してみ ます。 結果はまた今度お知らせします。
158 名前:PHP-jp観察者 mailto:sage [ 2001/04/11(水) 17:56 ID:??? ] PHP-jp 11121 より引用。 ----------------------------- ってな、環境のシステムのプログラムを引き継ぐ事になってプログラムの改良を 行っているのですが、以下の様なコードで2回目のpg_execで処理が戻るまで 約40分くらい掛かってしまいます。 ---------------------------------------------------------------------- $sql1 = "SELECT * FROM usertable WHERE syumi='".$syumi_data."'"; $user = pg_exec($conn, $sql1); $row = pg_numrows($user); $temp = "user_id in ('".pg_result($user, 0, user_id); for ($j = 1; $j < $row; $j++) { $temp = $temp."','".pg_result($user, $j, "user_id"); } $temp = $temp."')"; $sql2 = "SELECT * FROM maintable WHERE ".$temp." ORDER BY user_id"; if (false == ($main = pg_exec($conn, $sql2))) { echo "検索失敗"; return false; } else { echo "検索完了"; } ---------------------------------------------------------------------- 原因は、前のpg_execで見つけてきたuser_idが7000件近くあって、 ----------------------------- joinを知らない奴、逝ってよし。 しかも質問者は、selectを中止させる or postgresプロセスをkillする 方法を探してるときたもんだ。
159 名前:153 [ 2001/04/11(水) 19:44 ID:5X9lWT8g ] >>158 実は私が質問する際、PHP-jpと2ちゃんねるのどちらで聞こうか 迷いました。 最終的にこちらで教えてくれる人達の方が凄く親切・丁寧である ような気がして、昨晩書き込みした次第です。 なんだかPHP-jpだと、初心者だと突き放されそうな気がして、ど うも尻ごみしてしまいます。
160 名前:Error 401 mailto:sage [ 2001/04/11(水) 20:50 ID:??? ] >>159 ここは、あまり煽ラーがいないので、いごこちいいですね。
161 名前:電動ナナシ mailto:sage [ 2001/04/12(木) 10:39 ID:??? ] >>158 これはちょっとショッキングだなあ。 SELECT m.user_id, .... FROM usertable u, maintable m WHERE u.user_id = m.user_id AND u.syumi = :SYUMI ORDER BY m.user_id; ってするだけの話だよね。 さっき pgsql にも流れてきたけど、根本的に SQL が分かっていないねえ。
162 名前:Error 401 mailto:sage [ 2001/04/12(木) 12:04 ID:??? ] >>161 どんな言語が出ても、こうする人たちは一生こうしていくんだと思う。 で、「このSQL文投げると○○分帰ってきません」とかなる。 ちょっとSQL勉強して、各DBエンジンのクセやコスト算出方法を知れば こんなことなくなると思うんだけど。 この間、ちょっとかかわった某大規模システムもそんな感じで設計されてた。 JOINを知らないのはおろか、数千レコードのあるカラムの合計を取ってくるのに、 数千回ループして、+=してた。 しかも、それ、Webシステムのサーバアプリ部分。どうなったのかな、アレ。
163 名前:153 [ 2001/04/12(木) 12:12 ID:UHdu1Ra2 ] >>160 たまたま話題としてPHPの判る人でなければ煽れない(のかな?) ということで、本当に煽ラーがいなくて助かります。 逆に皆さんの書き込み見ていると、欲しいと思っていた答えがズ バリと回答されてたりしますので、この板を色々参考にさせてい ただいてます。
164 名前:名無しさん@お腹いっぱい。 [ 2001/04/13(金) 00:34 ID:I2dkOEWk ] >155 insert 直後なら、プライマリキーも保持したまま だろうから、それを where につっこんだら いいんじゃないのかな・・。 oid は、索引されてなくて遅い。
165 名前:名無しさん@お腹いっぱい。 mailto:sage [ 2001/04/13(金) 14:32 ID:??? ] sage
166 名前:153 [ 2001/04/13(金) 23:38 ID:kNEt/CpM ] >>155 >>156 教えていただきましたことを参考に、以下の様に作成しましたがエラー表示です。 多分私の設定が違うと思うのですが、最後にselectする際の条件でwhere oid = $last_oid 部分がダメなのか?、という気がしてます。 というのも、テーブル自体にはoidというフィールドがないので、何を参照しているの?、と怒られ ているのではないかと考えました。 因みにphpは以下の様に書いております。 $sql_1 = "insert into test values ('hoge'); $result_1 = pg_exec($conn, $sql_1); $last_oid = pg_getlastoid($result_1); if ($last_oid != 1) { 結果を表示するテーブル作成 } else { エラー表示 } 実行したとき、parse error in xxxxxx on line 103と出まして、103行目が上記における select文のフレーズなんです。 どこで私は大きな間違いをしでかしてますでしょうか???
167 名前:名無しさん@お腹いっぱい。 [ 2001/04/13(金) 23:52 ID:7roKMnwY ] そもそも 主キーはないの?
168 名前:153 [ 2001/04/14(土) 00:19 ID:6zrOcEr. ] >>167 一応テーブル内にはIDというフィールドを設けております。 上記の例ではinsert部分で省略して書いてしまいました。 IDはprimary keyで、自動的に番号を振るようにtest_id_seq を設定してあります。
169 名前:153 [ 2001/04/14(土) 00:24 ID:6zrOcEr. ] ごめんなさい、一つ間違ってました。 sql_1 = "insert into test values ('hoge'); $result_1 = pg_exec($conn, $sql_1); $last_oid = pg_getlastoid($result_1); if ($last_oid != 1) { $sql_2 = "select * from test where oid = $last_oid; <<<これが抜けてました。 で、103行目は上記のsql_2のフレーズでした 結果を表示するテーブル作成 } else { エラー表示 }
170 名前:名無しさん@お腹いっぱい。 [ 2001/04/14(土) 00:42 ID:3tHlDu72 ] くっきー
171 名前:名無しさん@お腹いっぱい。 [ 2001/04/14(土) 12:22 ID:.31zka6. ] 主キーを設定しているんなら、oidではなく、それを where に入れたらいいやんか。
172 名前:cookie mailto:sage [ 2001/04/14(土) 12:52 ID:??? ] sage
173 名前:153 [ 2001/04/14(土) 13:46 ID:DdiGfCB6 ] >>171 ご指摘ありがとうございます。 その場合、今登録された主キーのIDはどのようにして特定すればいい のでしょうか?
174 名前:電動ナナシ [ 2001/04/14(土) 13:58 ID:??? ] POST された内容に含まれているでしょ? というか、主キーが意味はわかっていないのかな・・・。 テーブル中のレコードを一意に識別する ID に相当する列のことだよ。 例えば、人事テーブルがあって、そのテーブルが (従業員ID, 氏名, 住所, 連絡先) という風になっており、同姓同名の人を区別するために従業員 ID を使って 識別しているなら、従業員 ID が主キーになる。 普通主キーとなる列に対しては、重複する列の挿入を禁止するために Primary Key 制約か Unique 制約を定義するけど、その辺ちゃんとやってる? これは PHP とか PostgreSQL とかいう以前の、データベース一般の設計の お話だよ?
175 名前:電動ナナシ [ 2001/04/14(土) 14:34 ID:??? ] >>174 おおっと、ID も Primary Key はあるって >>168 に書いてあるね。 勘違いしていた。ごめんなさい。 なるほどね、INSERT した直後に、自動的に割り当てられる ID をどうやって 特定するかって質問なのね。 これは先の人が書いているように oid を取得して特定するしかないんじゃないかな。 それ以外の列って重複する可能性があるから当てにならないしね。 ちなみに自分は自動連番はやってない。登録フォームを表示するときに squence から番号を取得して、その番号をフォームに保持させておく。 そうすれば、POST された内容に ID が入っているのでそれをキーに参照 できるようになる。 これの欠点は、番号に欠番が生じるということ。だけどそれがそんなに気に するほどのことかなあ。
176 名前:名無しさん@お腹いっぱい。 [ 2001/04/14(土) 15:02 ID:PpPxojBE ] insert した直後なら、currval( 'sequence名') に入ってるよ。 select currval() するのもよし、直接使うのもよし。
177 名前:名無しさん@お腹いっぱい。 [ 2001/04/15(日) 14:43 ID:ymJfG9Fc ] >>176 NO! 同じスクリプト内であっても、別なプロセスがINSERTしてしまえば CURRVALの内容は変わってしまう。初心者にありがちなミス。 正解は電動ナナシ氏指摘の通りOIDの取得。
178 名前:名無しさん@お腹いっぱい。 [ 2001/04/15(日) 15:02 ID:/XgA0t4. ] >>177 ほんとかな。begin, end で囲っているのに?
179 名前:176 [ 2001/04/15(日) 18:06 ID:QgXC.DBc ] >>177 >CURRVALの内容は変わってしまう。初心者にありがちなミス。 同じセッション内なのに、currval の値は変わるのですか? last_value の値は保証されないようですけどね。どうか教えてください。 なんせ、初心者 なもので。
180 名前:名無しさん@お腹いっぱい。 [ 2001/04/15(日) 23:12 ID:.dQ4e2NQ ] age
181 名前:名無しさん@お腹いっぱい。 [ 2001/04/16(月) 00:28 ID:HgcNtlTE ] > 同じセッション内なのに、currval の値は変わるのですか? >last_value の値は保証されないようですけどね。どうか教えてください。 やってみりゃいいじゃん。
182 名前:名無しさん@お腹いっぱい。 [ 2001/04/16(月) 00:41 ID:HgcNtlTE ] PostgreSQL7.1リリース・・・まじかみたいね。 ファイル名がpostgresql-7.1.tar.gzになってる。
183 名前:176 [ 2001/04/16(月) 01:22 ID:BsAjfbqo ] >>181 変わらないよ。要はそれを言いたい。
184 名前:176 [ 2001/04/16(月) 11:46 ID:rXDXOhM2 ] 177 さんの場合では、変わるようで、 わたしの実験ミスも考えられるし、想定外もあるし、 特定の環境というケースもあるので、変わるケースがあるなら 教えて欲しいのですよ。
185 名前:名無しさん@お腹いっぱい。 mailto:sage [ 2001/04/16(月) 14:47 ID:??? ] >>184 話の流れと発言者が何人いるかよくわかりませんが、 >>178 でいきなり >ほんとかな。begin, end で囲っているのに? という前提条件が登場します。 これが178氏と他の人の差じゃないかな? >同じセッション内なのに、currval の値は変わるのですか? という問いには、 * 同一トランザクション内であれば変わらない、が正解。 * begin, endでくくっていない1DML1トランザクションで、currval()を使うのは 誤り。他のプロセス(トランザクションで)値が変わっている可能性がある。 ということでよいでしょうか?>All
186 名前:185 mailto:sage [ 2001/04/16(月) 14:50 ID:??? ] 大間違い。 * begin, endでくくっていない1DML1トランザクションで、currval()を使うのは 誤り。他のプロセス(トランザクションで)値が変わっている可能性がある。 これは誤り。1DML1トランザクションでも、currval()は他のプロセス (トランザクション)にかかわらず、普遍ですね。 セッション内で一貫性があるようです。 鬱氏。
187 名前:名無しさん@お腹いっぱい。 [ 2001/04/16(月) 17:04 ID:rXDXOhM2 ] とどのつまり、今回の用途では、currval() は使ってもいいんでは
188 名前:名無しさん@お腹いっぱい。 [ 2001/04/16(月) 19:20 ID:.KTK4KoY ] というわけで、PostgreSQL7.1正式リリースage # RDBMSについてしゃべる場所ってどこかないのかな?
189 名前:名無しさん@お腹いっぱい。 mailto:sage [ 2001/04/16(月) 21:24 ID:??? ] まぁ、どうでもいいことなんだけど、MLで 「シーラカンス本」 「マンモス本」 を前提に語るのはやめて欲しいなー。 あ、俺は両方持ってるんだけど。 前者はバージョンが古いし、後者はちょっとアレだし・・・。 今一、人に薦めづらいんだよね、この本って。
190 名前:名無しさん [ 2001/04/16(月) 23:32 ID:XhwOU/N. ] 型でserialを宣言してるところに insertで失敗してもカウントが1上がってしまうのですが これはしょうがないことなのでしょうか?
191 名前:名無しさん@お腹いっぱい。 mailto:sage [ 2001/04/17(火) 00:07 ID:??? ] sage
192 名前:名無しさん@お腹いっぱい。 [ 2001/04/17(火) 00:07 ID:khLeTQ8c ] MLはなんか変な奴多くない? 技術系ってそうなのかなぁ。妙に偉そうだったりするの
193 名前:名無しさん@お腹いっぱい。 mailto:sage [ 2001/04/17(火) 00:42 ID:??? ] JavaHouseに比べればマシ。
194 名前:名無しさん研究所 mailto:sage [ 2001/04/17(火) 00:51 ID:??? ] >>192 激しく同意。うかつに質問なんてできないっしょ。 だから意地になってマニュアル+マンモス本+過去ログで 自分で解決してる。恐ろしく効率悪いけど・・・ # 聞くは一時の恥、聞かぬは一生の恥 とも言いますが・・・
195 名前:名無しさん@お腹いっぱい。 mailto:sage [ 2001/04/17(火) 10:14 ID:??? ] >>194 そう。ネット上じゃ逆だねぇ。。
196 名前:名無しさん@お腹いっぱい。 [ 2001/04/17(火) 12:33 ID:O8m0NJyM ] >>190 トランザクションを入れてみては・・
197 名前:名無しさん@お腹いっぱい。 [ 2001/04/17(火) 15:05 ID:fcj0RQUQ ] apache+PHP+postgreでシステム構築したいのですが、OSによる 環境の違いとかはあるのでしょうか? あと、お勧めのOSは何ですか?
198 名前:名無しさん@お腹いっぱい。 mailto:sage [ 2001/04/17(火) 15:23 ID:??? ] >>197 うーん、デフォルトの文字コードが違うとか、使えるシステムコールやライブラリ のPHPのラッパ関数が違うとか、かな? OSは、Linux系をお勧めします。
199 名前:名無しさん@お腹いっぱい。 [ 2001/04/18(水) 01:01 ID:oVgMs8gw ] >>190 >>196 トランザクションをアボートしても、serial型の場合、 インクリメントされちゃった値はもどんないよ〜。 って、どっかのスレでも話題になってなかった?