PHP + PostgreSQL

このエントリーをはてなブックマークに追加
1りさあ
語りません?
2名無しさん@お腹いっぱい。 : 2001/02/26(月) 04:24 ID:5V63qlVI
語ることがない。
石井君のページにでも行ってくれ。
3名無しさん@お腹いっぱい。 : 2001/02/26(月) 06:22 ID:cVbm4GZ6
フリーの割りに高性能。<pgsql
7.1からOUTER JOINもサポートされるし。
初心者、金は無いがスキルを磨きたい物にはうってつけだ。
4いしい : 2001/02/26(月) 13:56 ID:RMNXlTC.
Apache+PHP+PostgreSQLは最強の解といえるでしょう。
5名無しさん@お腹いっぱい。 : 2001/02/26(月) 18:32 ID:???
ひょっとして、結論が出てしまったのでしょうか?
6名無しさん@お腹いっぱい。 : 2001/02/26(月) 19:40 ID:BFnPDmqY
ポストグレは遅いよ。ていうか海外ではぜんぜん人気ないし。
やっぱマイでしょ、マイ。
7名無しさん@お腹いっぱい。 : 2001/02/26(月) 19:45 ID:???
>>4
>Apache+PHP+PostgreSQLは最強の解といえるでしょう。

最強ダッテ...
あイタタタタタタ。。。。
8いC : 2001/02/26(月) 21:03 ID:5kKWhb92
君たち、僕の著書をよんでないようだね(藁
9名無しさん@お腹いっぱい。 : 2001/02/26(月) 22:42 ID:8JeIWn.k
痛ずぎ....
10名無しさん@お腹いっぱい。 : 2001/02/27(火) 01:27 ID:???
8K制限なくなった…
11いC : 2001/02/27(火) 02:04 ID:WUS/EdTg
みなさん、こんなとこで勉強しないで、僕がコンサルしてあげるよ。タダとは言わないからさ。
12名無しさん@お腹いっぱい。 : 2001/02/27(火) 10:19 ID:???
4=馬鹿
13名無しさん@お腹いっぱい。 : 2001/02/27(火) 10:32 ID:eWEYPVng
>>11
oracleと同等の性能出せるんなら考えてもいいよ。
14名無しさん@お腹いっぱい。 : 2001/02/27(火) 10:40 ID:???
OracleだろーがPostgreSQLだろーがMySQLだろーがはたまたInterBaseだろーが
要は適材適所。

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

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

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

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

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

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

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

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

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

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

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

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

31電動ナナシ : 2001/02/28(水) 00:44 ID:???
宗教だねえ、ここまでくると。
作っている人間が熱くなるならわかるけど、作っている本人よりも取り巻きの方が
熱かったりするからねえ。

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

一応Oracle、SQLSerer、My、Postgersとこの4つで開発やってるんですが、
まだドキュメントとかPostgresは少ないからチューニングの仕方がわからないんですよね。
SQLの書き方によるパフォーマンスっていろいろ試してわかってきたんですけど。
Oracleほどインデックスの効果がでないとか。。
サーバ側でいろいろチューニング試した方とかいらっしゃいますかね??
Oracleゴールドなんか持ってっても全然意味ないな。。。。
これじゃ
331 : 2001/02/28(水) 01:38 ID:tdTwkxks

私の作ってるサイト(携帯コンテンツ)はかなりのアクセスがあるんで
トランザクションの数が尋常じゃないもんで
それに耐えうるような方法とかご存知でしたら知りたい・・
34いC : 2001/02/28(水) 02:36 ID:7JL8XSEA
知ってるけど教えてあげない。コンサルする?
35名無しさん@お腹いっぱい。 : 2001/02/28(水) 05:22 ID:Cj1/dvFk
SQL Serverはどうよ
http://www.microsoft.com/Japan/SQL/
36>35 : 2001/02/28(水) 05:42 ID:gshebUns
なんでPHP版に?
バカチョンって感じかな。。
メンテとかはしやすい

チューニングは意味ない
37電動ナナシ : 2001/02/28(水) 06:18 ID:???
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 を
 参照。

# 探せば結構出てくるじゃん。
38電動ナナシ : 2001/02/28(水) 06:24 ID:???
>>37
> 割と単純なクエリーの 場合には効果が大きい
割と複雑な・・・の間違い。

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

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

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

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

# まあこの辺は PostgreSQL に限らず、常識的な内容ばかりで・・。
39電動ナナシ : 2001/02/28(水) 06:40 ID:???
つか、何が悲しくて PHP 板に PostgreSQL の話を書かないといけないんだ!?

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

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

それでもダメなら Zend Optimizer 試してみて、それでもダメなら Zend
Cache 使ってみれば(試用可能)?
40名無しさん@お腹いっぱい。 : 2001/03/01(木) 04:55 ID:???
>>電動ナナシ
あんたすごいね
411 : 2001/03/01(木) 11:36 ID:JBbZYZIY
>>電動ナナシ
超参考になりました

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

インデックス張ってんのにやたらおせーと思ったらそうゆうことでしたか。。。
バキュームね
4222世紀を目指す名無しさん : 2001/03/01(木) 14:37 ID:???
bakyu-mu kowai mukashi view ga kowaretayo
43電動ナナシ : 2001/03/01(木) 20:43 ID:???
>>40
全然すごくない。厨房レベルだよ。

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

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

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

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

PHP+PostgreSQLってやはり最初はとっつきだよなやすい組合せだよな
45: 2001/03/07(水) 18:55 ID:jKFQhH5Q
電動ナナシ=いしい
46名無しさん@お腹いっぱい。 : 2001/03/07(水) 23:33 ID:/LPxFF6o
>45
うそ。141氏なら、文書の最後は。じゃなくて"."
47名無しさん@お腹いっぱい。 : 2001/03/08(木) 00:13 ID:gfJj0eZ.
今日初めて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ファイルで、接続先を設定しなければならないエラーなのでしょ
うか?
48名無しさん@お腹いっぱい。 : 2001/03/08(木) 00:33 ID:BWgxY/8I
nobody に テーブルに対するアクセス権限を認めてあげましょう。
4947 : 2001/03/08(木) 01:41 ID:6UaCuFtA
>>48
これは/usr/local/pgsql/data/pg_hba.confのlocalとhostで編集でしょうか。
今このファイルを見ましたら、デフォルト設定になっていました。
一応どちらもallになっており、更にはこのファイルもreadonlyモードにしてみました。
しかし、やっぱり結果は同じでした・・・

本当に右も左も判らない私・・・
5048 : 2001/03/08(木) 02:12 ID:BWgxY/8I
>>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


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

52名無しさん@お腹いっぱい。 : 2001/03/08(木) 21:46 ID:???
バイナリファイルを開いて「文字化け」とはかわいいね。
53名無しさん@お腹いっぱい。 : 2001/03/08(木) 21:55 ID:qBpM5VmI
> うそ。141氏なら、文書の最後は。じゃなくて"."

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

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

もしそうなら、データベース自体への接続は出来たのかと一安心してます。
55名無しさん@お腹いっぱい。 : 2001/03/09(金) 10:50 ID:???
>>51
pg_connectってtableの引数ないんじゃ?

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

そこで質問ですが、idc+htxという組合せだと
サイト訪問者--->htmlファイル等で問合せ--->idcファイルが問合せの処理--->htx
ファイルにその結果を表示
という流れだと思うのですが、PHPの場合は
サイト訪問者--->htmlファイル等で問合せ--->phpファイルが問合せの処理+その処理
結果を表示
という流れと考えていいのでしょうか?
58初期不良 : 2001/03/10(土) 00:07 ID:/BpOSDls
>>56
ODBC ドライバ使って MS Access から pg のデータを
編集できたときもうれしかったですわ。
データを作るならこの方がやりやすいしね。
MySQL でもこういう子とできるのかな?
59初期不良 : 2001/03/10(土) 00:25 ID:???
できるみたい。
http://www.softagency.co.jp/mysql/Win/win.html
とりあえず試してみます。
60初期不良 : 2001/03/10(土) 03:29 ID:???
簡単にできた
61名無しさん@お腹いっぱい。 : 2001/03/13(火) 10:47 ID:XUU/SqIk
PHP側の問題としては、標準的なSQL要求に対してのグローバルな
インタフェースを用意できていないのが問題な気がする。
一度決めたDBを乗り換えようとした場合、ムチャクチャ大変でそ?

この辺、どーにかならんのかね…
62名無しさん@お腹いっぱい。 : 2001/03/13(火) 10:48 ID:XUU/SqIk
あと、MySQLってトランザクションが無い時点でいきなり候補から落ちない?
そもそも商用に使っていいんだっけ?
63名無しさん@お腹いっぱい。 : 2001/03/13(火) 11:27 ID:CHZk5oPM
>>61
PHP4 には一応抽象化 DB クラスがあったりしますね。
で、 PHP4 で増えたこのあたりの機能のことを見ようと 「PHP4徹底攻略」を
買ってきたんだけど、 DB 回りのサンプルは PHP3 対応の旧版とほとんど
かわってねーんでやんの。
セッション機能なんかもさらっと触れられてるだけだし。

巻末の役に立たないリファレンスなんかいらないからそのあたり詳しく
書いて欲しかった。
64電動ナナシ : 2001/03/13(火) 13:42 ID:???
>>63
あの本はダメだよねえ。というか PHP ユーザー会で Pear に取り組もうと
いう人が広川さん以外にいない時点で、かなり終わっているね。
最近はろくな活動もしていないみたいだし。

いつまでも『PHP + PostgreSQL による高機能 Web の構築』じゃないだろうに。

・どうやったら生産性を高めることができるか
 ・どうやったら同じコードを何度も書かずにすむか
 ・どうやったら同じバグに遭遇しないですむか
・どうやったら設計が簡単になるか
 ・どうやったら設計情報を抜け漏れなく記述できるか
 ・どうやったら設計情報を共有できるか
・どうやったら実装が簡単になるか
 ・どうやったらビジネスロジック層と永続化層をきれいに分けることができるか
 ・どうやったらオブジェクトの永続化が容易になるか
といった課題を解決していかないと、小規模案件の書き捨て用言語以上の存在には
ならないだろうね。で、最初のはクラスを使うことでかなり解決できるし、
二番目のは UML(+ Web 拡張)かな?という気もするし最後のは既存の方法論が
使えるし、十分クリアできるじゃーんとか思うんだけどなぁ・・・。
65名無しさん@お腹いっぱい。 : 2001/03/13(火) 18:35 ID:/6OYEncI
>>63-64
言いだしっぺの法則の適用を望みます。
それを本気でやったらPHP界の英雄になれますよ。それだけでは食ってけないでしょうけど (苦笑
66電動ナナシ : 2001/03/13(火) 20:28 ID:???
>>65
うひゃあ!うっかり余計なことを言うもんじゃないなあ。
まあ何か出てきたらこの板にて書きますわ。

ちなみに PHP ユーザー会は日本語化についてかなり貢献していることにも
触れておかないと片手落ちだね(もともと日本語化のメンバーが中心だしなあ)。
だからクラスがどうのこうのよりも日本語化にしか関心がないという推測も
できるかもね。
67名無しさん@お腹いっぱい。 : 2001/03/13(火) 22:30 ID:???
PEARのDB.php(pgsql.php)使ってみたけど、ちょい使いづらいぞ。
68電動ナナシ : 2001/03/13(火) 23:21 ID:???
age
69電動ナナシ : 2001/03/13(火) 23:22 ID:???
あれ・・・書き込まれない。リトライ。

>>67
なんのなんの、あれの原型になっていると思われる DBTools.h++ に比べれば
まだまだ素直でしょう。DBTools.h++ に興味があったら
http://www.roguewave.com/support/docs/dbtug/index.cfm
へどうぞ。

冗談はともかく、慣れの問題もあると思うよ。connect->exec->result->close という
手順に慣れていると fetch だのなんだのいったお約束は邪魔に感じるとは思う。
その印象は正しいと思う。

ただ、この手のクラスライブラリは
・どのデータベースにアクセスするにも同一の手順を使える
 -> 覚えることは一つでよい
・少なくとも Pear の中のロジックについては信頼して使える。
 つまりデバッグすべき範囲を限定できる
という点に大きなメリットがあるから、そのアプリケーションを PostgreSQL
以外の RDBMS に移植するとか、アプリケーションごとに異なる RDBMS を使う
必要があるといった場合にならないとメリットを感じられないかもしれない。

言い換えれば、RDBMS の実装を一つに固定してしまうなら Pear の DB クラスは
それほど威力を持たないということ。自分でアクセスクラスを書いた方が多分
便利だろうね。
70Error 401 : 2001/03/14(水) 09:43 ID:on3m5pqo
PEARのDB.php(pgsql)が使いづらいと思っている点。
使い方に誤りがある場合は指摘してください。

・$connectionを公開していないのでpg_set_client_encoding()などを行えない。
・query()もsimpleQuery()もその中でpg_numrows()を実行しているのに、
 再度numRows()を実行しなければ行数が分からない。
・Selectする手段がquery(), simpleQuery(), execute()と複数あり、迷ってしますう。
・遅い(単純なページで、ページあたり+20〜+30msかかる)

といったところです。もちろん、extendして自分でクラス定義してしまえばいいんですけど。
71名無しさん@お腹いっぱい。 : 2001/03/14(水) 09:49 ID:ZHQnQBoo
遅いって、classとかで包容しようとするならそれは仕様つーか命題つーか。
ブラックボックスアプリがでかくなるのは当然でそれはシステムで補っていただきませう。

今書いてるモノだと、こいつは絶対エラーにならんから処理省いちゃえ的に
書くこと多いんであとで苦労することが多いんだよね。
classがそれを助けてくれるのなら大歓迎。
次のシステムで実験させて貰います。
72電動ナナシ : 2001/03/15(木) 03:54 ID:???
>>70
> ・$connectionを公開していないのでpg_set_client_encoding()などを行えない。

simpleQuery とかで simpleQuery("SET clientencoding TO 'EUC_JP'"); とか
して対処できない?
simpleQuery は単純に pg_execute(${simpleQuery の引数}) しているだけ
だからこれで動くと思うんだけど。

> ・query()もsimpleQuery()もその中でpg_numrows()を実行しているのに、
>  再度numRows()を実行しなければ行数が分からない。

ソース見てちょっとびっくり。この辺の扱いって実装ごとに異なっているんだ。
ううむ・・・。

PostgreSQL 前提だと、Qeury のたびに DB_pgsql のインスタンス(仮に $pgsql と
するよ)の $numrows に行数が格納される。で、$pgsql->numrows[$result] で
アクセスできる。

肝心の $result だけど、simpleQuery の場合は単純にその戻り値を使えばいいし、
query() の場合には戻ってきた DB_result 型のオブジェクトの $result に
アクセスすればいい。例えば $resultObj->result とか。
73電動ナナシ : 2001/03/15(木) 03:55 ID:???
> ・Selectする手段がquery(), simpleQuery(), execute()と複数あり、迷ってしますう。

simpleQuery と query はともに直ちに実行可能な SQL 文を渡して処理するメソッド。
ただ、前者の場合には戻り値が pg_result で利用可能な結果識別子なのに対して、
後者は DB_result 型のオブジェクトが返るところが違うようだね。

execute() は prepare() とセットで実行されることが前提。で、prepare() に渡す
SQL 文には、? と & という特別なバインド変数を定義できて、前者の場合には
第二引数で渡された値(配列中の値)が、後者の場合には渡された値と同じ名前を
もつファイルの中身を SQL 文の中に結合することができるみたい。

> ・遅い(単純なページで、ページあたり+20〜+30msかかる)

>>71 さんのおっしゃる通りだと思う。
あとは Zend Cache 使うとか・・・。
74Error 401 : 2001/03/15(木) 13:20 ID:???
あぁぁー、すごい勘違いをしてた。
インスタンス変数って、プライベートだと思っていたら、パブリック
だったんですね。
道理で、アクセッサメソッドが無いわけだ。

それから、各メソッドの説明どうもです > 電動ナナシさん
prepare() & execute()の機能には、ビックリです。
>prepare():
>Prepares a query for multiple execution with execute(). With
>PostgreSQL, this is emulated.
じゃ分からんぞ(w
75Error 401 : 2001/03/15(木) 13:31 ID:???
>>72
>simpleQuery とかで simpleQuery("SET clientencoding TO 'EUC_JP'"); とか
>して対処できない?

simpleQuery("SET client_encoding TO 'EUC_JP'")
でOKでした。
76Error 401 : 2001/03/15(木) 14:07 ID:???
恥ずかしい質問なのでsage。
$ret = $db->simpleQuery("set client_encoding to 'EUC_JP'");
if ($ret != DB_OK) {
  exit;
}
とやったところ、エラーが発生してもexitしない。
これは、エラーが発生したときに、$retに文字列が入っていて、
比較するときに文字列->数値という変換がなされ、
if (0 != 0)
という比較になるので、このifブロックには絶対に入らない。
正しくは、
if ($ret !== DB_OK)
とする必要がある。

・・・という解釈は正しいですか?
77Error 401 : 2001/03/15(木) 14:39 ID:???
さらに疑問が。

(1)のエラー判定は、こうするしかないのでしょうか?
ほかに判断の方法はありますか?

require("DB.php");

$db = DB::connect("pgsql://localhost/testdb");
if (DB::isError($db)) {
  exit;
}

$sql = "select emp_code, emp_name from emp";
$res = $db->query($sql);
if (get_class($res) != "db_result") {    // (1)
  exit;
}
//echo $db->numrows[$res->result] . "<br>\n";
echo "<table>\n";
while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
&nbsp;&nbsp;echo "<tr><td>$row[role_name]</td><td>$row[emp_name]</td></tr>\n";
}
echo "</table>\n";
78電動ナナシ : 2001/03/15(木) 15:56 ID:???
>>76-77
ちょっと今余裕がないので、1点だけ。

simpleQuery() は Protected な Method なんだと思う。

何でかというと、simpleQuery() の戻り値は実装依存になって、実装の詳細を
隠蔽しようという DB クラスの意図に反するから。

じゃあなんで simpleQuery() なんてあるのかというと、クラスを拡張するときに
実装を意識しないといけないときのためにあるんだと思う。言い換えれば、
extend したクラスからのみこのメソッドは用いられるということ。

だから DB クラスを普通のアプリケーションから使うときには query() を使って
DB_result 型の結果を取得し、fetchRow() するのが正しい使い方になるんだと思う。

ここのサンプルコードも見てみて。query() 使っているよ。
"Best Practices: Database Abstraction"
http://www.phpbuilder.com/columns/allan20010115.php3

エラー判定については後でね。
79Error 401 : 2001/03/15(木) 16:44 ID:???
>>78
電動ナナシさん、毎度どうもです。
PHPBuilderの記事をざっと読みました。
# ここ、良い記事がたくさんありそうですね。

そして、わかった&考えたこと。

・ DB.phpの思想は、DB::isError($obj)でエラー判定をする。
・ そして、DB::errorMessage($obj)でエラーメッセージを獲得する。
・ mysql.phpは確かに、query()が失敗すると、raiseError()している。
・ ところが、なぜだかpgsql.phpでは、query()が失敗すると、直接エラー
 メッセージを返している。
・ なので、DB::isError(query())というお決まりパターンが使えない。

他のDBのライブラリを全部見たわけではありませんが、DB.phpの
isError()の実装を見る限り、pgsql.phpの実装に一貫性が欠けている
気がします。
80Error 401 : 2001/03/15(木) 16:57 ID:???
うーん、ソースをちらっと眺めたところ、DB::isError() -> DBerrorMessage()
のしくみがきちんと機能するのは、MySQLだけみたいな気が。

>>79は間違っているのかなぁ?
81Error 401 : 2001/03/15(木) 16:59 ID:???
というか、ソースなんぞ見なくても、サクサクプログラミングできるのが
PEARの目標だと思うのだけれど・・・。
82電動ナナシ : 2001/03/15(木) 17:34 ID:???
>>81
そうなんだよね。まだまだ発展途上。ドキュメントもないし。
そのうちクラス図を作って公開する予定。

>>80
>>79 は合ってる。それで正解。というか DB に限らず PEAR 共通の例外機構のような
ものを作りたいみたいなんだよね。で、
・メソッド実行して、成功なら普通のオブジェクトを、失敗なら PEAR_error 型の
 オブジェクトを返す
・オブジェクトについて isError($returnedObject) で成功・失敗を判定
という風にしたいような感じなんだなあ。

MySQL と OCI8 は確かにエラーが起きると raiseError() して DB_error 型
(こいつは PEAR_error を継承している)を生成して返すようになっているけど、
DB_pgsql.php はそうなっていないという点が問題みたい。

広川さん(DB_pgsql の開発者)に連絡するか、自分でパッチ送って submit すると
喜ばれるんじゃない?自分も暇が出来たらやってみよう。
83電動ナナシ : 2001/03/15(木) 17:37 ID:???
あー、でも PostgreSQL ってエラーコードがない(errorMessage() で取得する
しかない)んだよね。それで実装されてないって可能性が大きいかも。

DB_pgsql.php の errorNative() のコメントを見てそう思った。
84Error 401 : 2001/03/15(木) 21:18 ID:L14mApPU
PHP-jp見てて、
http://lxr.php.net/source/php4/pear/DB/pgsql.php
を発見しました。

・・・ォィォィ、おもいっきり、実装かわっとるやん。

とりあえず、simpleQuery()でエラーが発生した場合、raiseError()
しているのを確認しました。
# pgsql.phpには、query()が無くなってます。

PHPもPostgreSQLも最近始めたばかりで、php-mlの近藤氏が
どのような人かは知りませんが(でも、発言力ありそうな雰囲気)、

> ソースコードをみて、バリバリ自社で保守するだけの
> 技術力と体力のあるとこは別だけど、私なんか、とて
> も使う気になれません。テストも終ってないコードを
> 使う位なら、レベルは低くても責任もってユーザー
> サポートできる自前のツールの方がいいです。

というのは悲しいね。
DBの抽象化ライブラリとして現在も標準添付されているし、
おそらく将来もそうであろう「PEAR」なんだから、
どんどん使って、ノウハウを溜め込み、その思想を学ぶ
べきなんじゃないかなぁ、なーんて、思いますけど。

sourceforge.netを見ても、PHPのDB abstract libraryは
両手でも足りないくらい(ウソかも)あり、とても全てを
評価するなんて出来ません。

みんながそれぞれ、ちょっとづつ違うDBライブラリを作るなんて、
それこそ非生産的です。

# ところで、PEARのアノニマスCVSリポジトリってあるんでしょうか?
85Error 401 : 2001/03/15(木) 21:38 ID:???
> # ところで、PEARのアノニマスCVSリポジトリってあるんでしょうか?

検索したら、ありました。(先に検索しろ>自分)

cvsweb:
http://cvs.php.net/viewcvs.cgi/php4/pear/

pserverもありました。
86電動ナナシ : 2001/03/15(木) 22:03 ID:???
>>84
あなた、すごいね。:-)

近藤さんの言いたいことも分かるけど、
> みんながそれぞれ、ちょっとづつ違うDBライブラリを作るなんて、
> それこそ非生産的です。
これに大いに賛成。

ただ近藤さんが一番心配しているのは SQL (DDL/DML) の互換性の問題だと思う。
サブセレクト(副問い合わせ)の対応の有無とか、トランザクションの
構文とか、ロックの構文とか実装によって全然違うからね。
# 先の PG_CLIENT_ENCODING もその問題の一つ。

だからデータ操作まで完全に抽象化するのに Pear じゃダメというのはある程度
理解できる。

ただ、アクセス方法やエラーハンドリングを標準化する意義は十分あると
思うなあ。JDBC に批判的なように、近藤さんはこの手の抽象化ライブラリ
全般に不信感があるのかもしれない。
# ODBC では確かにひどい目にあったな。

コードの信頼性は、チャレンジャー(人柱)の犠牲によって獲得していく
しかないだろうね。すると人柱が一番多いのはどれだ?という話になると
思う。今のところ PHPLib > Pear >> その他 という感じかなあ。
87Error 401 : 2001/03/16(金) 10:59 ID:.KTK4KoY
>>86

Abstract DB Libraryの目的(ターゲット)としては、例えば
SQL92 Entry Levelとかを想定して、実装していけばいいん
じゃないかなー、なんて思います。
ここ数年Oracleをやってきたんですが、最近PostgreSQLを始めて、
特にそう思います。

PEARのDBライブラリは、OracleのBC4Jなどと違って(BC4Jの
場合、DMLを一切使わずにプログラミングします。もちろん、
使おうと思えば使えます)、DMLは自分で書く、というスタンス
なので、DBの違いによるSQLの違いはライブラリ側で吸収する
必要が無いのです。
DBライブラリは、SQLをDBに送って、結果のレコードセットなり、
完了値を戻せばよいのです。

PHP-jpを見てて思うのは、クライアントアプリケーションの機能を
実現するためのコードと、ライブラリのコードをごっちゃに論じて
いる気がします。

現時点で言えば、例えばOracleとPostgreSQLを同じDBライブラリを
使って同じコードで、どちらのDBでも動くようにしようと思うのなら、
ViewやストアードサブプログラムやトリガーなどのDBエンジン内の
仕組みを駆使するしかありません。もちろん、それらのDBエンジン
側のプログラムやDDLのコードは、各DBで違うのですけど。

PEAR(というか、抽象化DBライブラリ)を使えば、クライアント
アプリケーションのコードは同一で、複数DB対応は可能だと思います。

もちろん、DB管理ツールなどは、同一のコードなどは望むべくも無く、
ゴリゴリにターゲットDBに依存しまくったものじゃないと使い物に
ならないんじゃないかなー。

なんか、とりとめが無くなってきたのでこのへんで。
88Error 401 : 2001/03/16(金) 11:04 ID:???
>>86
>ただ、アクセス方法やエラーハンドリングを標準化する意義は十分あると
>思うなあ。JDBC に批判的なように、近藤さんはこの手の抽象化ライブラリ
>全般に不信感があるのかもしれない。

それは、よーくわかります。

>コードの信頼性は、チャレンジャー(人柱)の犠牲によって獲得していく
>しかないだろうね。すると人柱が一番多いのはどれだ?という話になると
>思う。今のところ PHPLib > Pear >> その他 という感じかなあ。

私はPHP4.0.4から入ったので、PHPLibは使ったことないのですが、
それに慣れて、しかも発言力ある人たちが、「Pearは不安定だ、
未完成だ、使えないぞー」と声高に(というのは私が受け取った
印象ですが)言うのは、やめて欲しいなー、という感じですね。
89Error 401 : 2001/03/16(金) 11:08 ID:???
PearはCVSで追っかけることが出来るようになったんですが、
なにしろ、時間が無い・・・。来週末までに、今作っているシステムを
完成しないといけないんです(グチ)。

誰か最新版を追っかけて、評価する人いないかなー。
# 結局、他人を頼るのかいっ! (w
90Error 401 : 2001/03/16(金) 12:10 ID:???
新しいマニュアルをダウンロードしたら、PEARの章が出来てました。
忙しい人の為に、目次を引用。

V PEAR: the PHP Extension and Application Repository
23 章 PEARについて
- PEARとは?

24 章 PEAR コーディング標準
- インデント
- 制御構造
- 関数のコール
- 関数の定義
- コメント
- コードの読み込み
- PHPコードのタグ
- ヘッダのコメント部
- CVS タグ
- URLの例
- 定数の名前

LXXXIII PEAR リファレンスマニュアル
- PEAR PEAR基底クラス
- PEAR_Error PEARエラー処理機能の基底クラス

やはり、PEARのエラーハンドリングの思想は、エラーオブジェクトを
返す、というので正解でした。
91電動ナナシ : 2001/03/16(金) 13:18 ID:???
>>84
query() は DB_common.php に移動したみたいだね。で、query() では simpleQuery() を
中で呼び出して使っている。こっちの方がエレガントでいいよなあ。
# Refactoring だね。:-)

>>87
思いっきり同意。
「何をクラスライブラリで共通化するか」という議論が抜け落ちている感じがするね。
9247 : 2001/03/16(金) 18:23 ID:0/o1UMNg
たびたび申し訳ないです。
>>48>>50で教えていただきました方法を試してみました。
GRANT SELECT ON (VIEWのテーブル名) TO PUBLIC;
ですが、この場合PUBLICとは誰にでも許可するというような意
味合いと解釈したのですが、実際にはまだエラーが続いてしまい
ます。
nobodyは上記publicとは全く別者なのでしょうか?
GRANT SELECT ON (VIEWのテーブル名) TO nobody;
とする必要があるのでしょうか?(実際試してみればいいとは思
うのですが、何か解説等があれば教えていただきたく思いました。)
93ゾリ大佐 : 2001/03/16(金) 18:38 ID:7X0S2/Ts
>>92 ...to public なら、全てのユーザーに許可されます。
postgresアカウントでcreateuser nobodyしてみました?
9447 : 2001/03/16(金) 21:26 ID:4ESozwmw
>>93 ありがとうございます。
おっしゃる通り、nobody自体のアカウントが作成してありませんでした。
目標とする結果はブラウザ上に現れませんでしたが、今回は間違いなくDB
への接続は出来ているようです。
私のスクリプトが間違っていると思われ、ブラウザ上には何もエラーメッセ
ージは出ませんが、画面は真っ白でした。

今度こそ、ゆっくりスクリプトの方に挑戦してみます。

また判らないことありましたらお伺いさせていただきます。
9547 : 2001/03/16(金) 23:20 ID:Dq2EXQwY
只今スクリプトの間違いを訂正して、ようやくDBからのデータ出力が出来ました。
まだ勉強を始めたばかりのため、複雑なSQL文やPHPのスクリプトは書けませんが、
取り敢えずブラウザ上にデータが表示されたことには感動しました。
96名無しさん@お腹いっぱい。 : 2001/03/17(土) 16:01 ID:O8m0NJyM
お尋ねです。PHPで金額の表示をしたいのですがどうすればいいでしょうか。
例)1000 → 1,000 のように。
お願いします。
97名無しさん : 2001/03/17(土) 17:12 ID:???
>>96
number_format()
98名無しさん@お腹いっぱい。 : 2001/03/17(土) 19:14 ID:O8m0NJyM
>>97
金額の表示OKでした。
どうもありがとうございました。
99Error 401 : 2001/03/19(月) 16:04 ID:JUrUc3Rc
なかなかよさそうなページ発見。
http://www.zend.com/codex.php?CID=10

英語では、「抽象化DBクラス」を「Database Abstraction Class」って
言うみたいですね。
100Error 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();
101Error 401 : 2001/03/19(月) 21:00 ID:JUrUc3Rc
ついでに、PostgreSQL情報も。
PostgreSQL 7.1beta6が出てたのでインストールしました。

やっとDEBUGメッセージがpsqlにも出るようになった。
これが無いと、デバッグきついからね。

beta5でバグってた、serial型も修正されてた。

マニュアルに、『Porting from Oracle PL/SQL』が追加されてた。
テキスト換算で500行くらいのドキュメント。
マニュアルは、beta5から、かなり増えてる。
102Error 401 : 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.

だったらしい。
103Error 401 : 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 の感覚でコマンド打ってもダメだよ。
http://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処理用のスクリプト
}

宜しくお願いいたします。
110109 : 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がわかりやすすぎるのでしょうか?はぁ。
112Error 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に全面移行しました。
113Error 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 側の接続状況調べて、同時に何コネクション
張りにきているか調べてみたら?
http://tanaka-www.cs.titech.ac.jp/~euske/doc/daemontools.html
116Error 401 : 2001/03/23(金) 21:27 ID:???
>>114
うーん、昨日から持続的接続のテストを始めて、
今日になって、'now'::timestampに昨日の日付のものが
登録されるようになったんです。

サーバは、昨日から立ち上げっぱなし、
クライントは、今日立ち上げたもの
です。

持続的接続は、クライアントがいなくなった場合、そのプロセス
は残っていて、接続要求があったときに、空いてるプロセス
があれば、そこにつなげる、というふうに思ってたんですが、
間違いでしょうか?
117Error 401 : 2001/03/23(金) 21:29 ID:???
>>115
あ!
PEARのDB::close()してるとこがありました。
このことが、何かおかしな状況を作り出す原因なのかな?
118Error 401 : 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 機能)だと思った。
122Error 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 プロセスが誰とお話しているか調べて
みたらどうだろ?
124Error 401 : 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 にしなくちゃ、って話じゃなかったらスマソ
126Error 401 : 2001/03/26(月) 18:13 ID:???
>>125
.> これは、'now'::text にしなくちゃ、って話じゃなかったらスマソ
むむ。
test=# select 'now'::text;
とやると、
?column?
----------
now
(1 row)
となるのですが・・・。

# PostgreSQL 7.1beta6です。
# 運用開始までに、7.1出るのだろうか・・・。
127名無しさん@お腹いっぱい。 : 2001/03/26(月) 19:19 ID:???
>>126
いや、そうじゃなくて、トリガーとかで 'now'::timestamp って
するとトリガー生成時点の 'now' になっちまうんで、'now'::text
にしとくって話。
128Error 401 : 2001/03/26(月) 20:19 ID:zxG0OE1w
>>127
あっ。理解できました。

で、いろいろ調べたんですが、

CURRENT_TIMESTAMP -- SQL92準拠
now() -- PostgreSQL固有?
'now'

のどれでも、現在時刻を返してくれます。

> いや、そうじゃなくて、トリガーとかで 'now'::timestamp って
> するとトリガー生成時点の 'now' になっちまうんで、'now'::text
> にしとくって話。

そういえば、この話どこかで見覚えがあるんですが、
マニュアルに載ってるのですか?
マニュアルは、ローカルでNamazu化してるんですけど、
検索できませんでした。
129127 : 2001/03/26(月) 20:42 ID:???
>>128
それが私もどこで見かけたんだか忘れてしまいまして・・・
130Error 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+
-------------------------------

続く。
131Error 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

続く。
132Error 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

[考察]
うーん、全く進歩なし(^^;
133Error 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の持続的接続のリンク数の管理はうまくいっているみたい。
プロセスの生成・消滅条件は、いまだわからず。
134Error 401 : 2001/03/29(木) 09:00 ID:???
えーと、ひょっとして気になさっている方がいるかもしれないので、
報告しておきます。

結局、現状理解の糸口さえ見つからない状態なので、
持続的接続を使うのは、とりあえず止めます。

PHP4.0.5 + PostgreSQL7.1がそろったあたりで、再チャレンジします。
135Error 401 : 2001/03/29(木) 18:24 ID:???
持続的接続の謎解明?

仕事の合間に、いろいろとWebを検索してみたら、
「postgresプロセスが死ぬのは、対応するapacheプロセスが
死んだとき」
という情報にあたりました。
どっかの英語のBBSです。

今使っているサーバは、apacheを起動すると、apacheのプロセスが
10個立ち上がります。
で、これに空きがある場合は、HTTPリクエストをこれらのプロセスが
処理します。HTTPセッションが終了しても、これらのプロセスは
残ったままです。
持続的接続で立ち上がったpostgresプロセスは、これらのプロセス
との間に、DBセッションを確立します。
だから、close()しても、postgresプロセスは残ったままなんです。

・・・という線で自分を説得。多分正解。
136電動ナナシ : 2001/03/30(金) 06:59 ID:???
ふうむ、そういうことなのかあ。
ソースちょっと追ったけど、connect() の場合と pconnect() の場合とで
ほとんど同じ処理をしているんだよね。単にリンク数のカウンタ処理部分が
違うくらいで。

connect() だと postgres は死んでくれるの?

謎だあ。もうちょっと追ってみよう。
# 暇ができたらだけど・・・。
137Error 401 : 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電動ナナシ : 2001/03/30(金) 19:45 ID:???
え、じゃああれでいいんだ。
馬鹿さらしてしまった。鬱だし脳。
141名無しさん@お腹いっぱい。 : 2001/03/30(金) 20:12 ID:PF8gszDA
pconnect は、apacheのpreforkみたいなもの。
バックエンドをpreforkさせるための便宜的手法。
fastcgi みたいなものと言った方がわかりやすい?
142Error 401 : 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電動ナナシ : 2001/04/05(木) 12:54 ID:???
>>144
> fork()って、PHPのプロセスのことですか?
いや、httpd のプロセスのこと。
さっきマニュアル見たらちゃんと書いてあった。httpd の Child Process ごとに
永続的接続するよって。
鬱だし脳。
http://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()などの正規表現ライブラリ関数を使って、
妥当性チェックしてみてはいかが?
148146 : 2001/04/05(木) 23:25 ID:tP58bUgQ
>>147
早速ereg("[[:alnum:]]{2}", $test_id)として、ちゃんと指定の
形で英数字2文字だけが入力されているかを判定させてみました。
無事考えていたことが出来ました。
ありがとうございます。
149名無しさん@お腹いっぱい。 : 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名無しさん@お腹いっぱい。 : 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";
}
155Error 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)で配列に格納して
テンプレートファイルに埋め込むという手も。
見栄えはいいかも・・。

157153 : 2001/04/11(水) 15:31 ID:5X9lWT8g
>>154
>>155
>>156
皆さん本当にありがとうございます。
PHPの本を買って、色々関数を探してみているのですが、実際にそれ
らをどう活用するのかが今ひとつ理解しきれていません。

今晩家に帰って早速皆様から教えていただきました方法を試してみ
ます。
結果はまた今度お知らせします。
158PHP-jp観察者 : 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する
方法を探してるときたもんだ。
159153 : 2001/04/11(水) 19:44 ID:5X9lWT8g
>>158
実は私が質問する際、PHP-jpと2ちゃんねるのどちらで聞こうか
迷いました。
最終的にこちらで教えてくれる人達の方が凄く親切・丁寧である
ような気がして、昨晩書き込みした次第です。
なんだかPHP-jpだと、初心者だと突き放されそうな気がして、ど
うも尻ごみしてしまいます。
160Error 401 : 2001/04/11(水) 20:50 ID:???
>>159
ここは、あまり煽ラーがいないので、いごこちいいですね。
161電動ナナシ : 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 が分かっていないねえ。
162Error 401 : 2001/04/12(木) 12:04 ID:???
>>161
どんな言語が出ても、こうする人たちは一生こうしていくんだと思う。
で、「このSQL文投げると○○分帰ってきません」とかなる。

ちょっとSQL勉強して、各DBエンジンのクセやコスト算出方法を知れば
こんなことなくなると思うんだけど。

この間、ちょっとかかわった某大規模システムもそんな感じで設計されてた。
JOINを知らないのはおろか、数千レコードのあるカラムの合計を取ってくるのに、
数千回ループして、+=してた。
しかも、それ、Webシステムのサーバアプリ部分。どうなったのかな、アレ。
163153 : 2001/04/12(木) 12:12 ID:UHdu1Ra2
>>160
たまたま話題としてPHPの判る人でなければ煽れない(のかな?)
ということで、本当に煽ラーがいなくて助かります。
逆に皆さんの書き込み見ていると、欲しいと思っていた答えがズ
バリと回答されてたりしますので、この板を色々参考にさせてい
ただいてます。
164名無しさん@お腹いっぱい。 : 2001/04/13(金) 00:34 ID:I2dkOEWk
>155
 insert 直後なら、プライマリキーも保持したまま
だろうから、それを where につっこんだら
いいんじゃないのかな・・。
oid は、索引されてなくて遅い。
165名無しさん@お腹いっぱい。 : 2001/04/13(金) 14:32 ID:???
sage
166153 : 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
そもそも 主キーはないの?
168153 : 2001/04/14(土) 00:19 ID:6zrOcEr.
>>167
一応テーブル内にはIDというフィールドを設けております。
上記の例ではinsert部分で省略して書いてしまいました。
IDはprimary keyで、自動的に番号を振るようにtest_id_seq
を設定してあります。
169153 : 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 に入れたらいいやんか。
172cookie : 2001/04/14(土) 12:52 ID:???
sage
173153 : 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 で囲っているのに?
179176 : 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になってる。
183176 : 2001/04/16(月) 01:22 ID:BsAjfbqo
>>181
 変わらないよ。要はそれを言いたい。
184176 : 2001/04/16(月) 11:46 ID:rXDXOhM2
177 さんの場合では、変わるようで、
わたしの実験ミスも考えられるし、想定外もあるし、
特定の環境というケースもあるので、変わるケースがあるなら
教えて欲しいのですよ。
185名無しさん@お腹いっぱい。 : 2001/04/16(月) 14:47 ID:???
>>184

話の流れと発言者が何人いるかよくわかりませんが、
>>178でいきなり
>ほんとかな。begin, end で囲っているのに?
という前提条件が登場します。
これが178氏と他の人の差じゃないかな?

>同じセッション内なのに、currval の値は変わるのですか?

という問いには、

* 同一トランザクション内であれば変わらない、が正解。
* begin, endでくくっていない1DML1トランザクションで、currval()を使うのは
誤り。他のプロセス(トランザクションで)値が変わっている可能性がある。

ということでよいでしょうか?>All
186185 : 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名無しさん@お腹いっぱい。 : 2001/04/16(月) 21:24 ID:???
まぁ、どうでもいいことなんだけど、MLで
「シーラカンス本」
「マンモス本」
を前提に語るのはやめて欲しいなー。
あ、俺は両方持ってるんだけど。
前者はバージョンが古いし、後者はちょっとアレだし・・・。
今一、人に薦めづらいんだよね、この本って。
190名無しさん : 2001/04/16(月) 23:32 ID:XhwOU/N.
型でserialを宣言してるところに
insertで失敗してもカウントが1上がってしまうのですが
これはしょうがないことなのでしょうか?
191名無しさん@お腹いっぱい。 : 2001/04/17(火) 00:07 ID:???
sage
192名無しさん@お腹いっぱい。 : 2001/04/17(火) 00:07 ID:khLeTQ8c
MLはなんか変な奴多くない?
技術系ってそうなのかなぁ。妙に偉そうだったりするの
193名無しさん@お腹いっぱい。 : 2001/04/17(火) 00:42 ID:???
JavaHouseに比べればマシ。
194名無しさん研究所 : 2001/04/17(火) 00:51 ID:???
>>192
激しく同意。うかつに質問なんてできないっしょ。
だから意地になってマニュアル+マンモス本+過去ログで
自分で解決してる。恐ろしく効率悪いけど・・・

# 聞くは一時の恥、聞かぬは一生の恥 とも言いますが・・・
195名無しさん@お腹いっぱい。 : 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名無しさん@お腹いっぱい。 : 2001/04/17(火) 15:23 ID:???
>>197
うーん、デフォルトの文字コードが違うとか、使えるシステムコールやライブラリ
のPHPのラッパ関数が違うとか、かな?

OSは、Linux系をお勧めします。
199名無しさん@お腹いっぱい。 : 2001/04/18(水) 01:01 ID:oVgMs8gw
>>190
>>196
トランザクションをアボートしても、serial型の場合、
インクリメントされちゃった値はもどんないよ〜。
って、どっかのスレでも話題になってなかった?
200153:2001/04/21(土) 16:07 ID:2SRwUN3c
やっと皆様からご指摘いただきましたoid=$last_oidを条件に、
たった今insertで登録したデータをselectで引っ張り出すこと
が出来ました。
ありがとうございます。
201名無しさん@お腹いっぱい。:2001/04/21(土) 19:35 ID:???
えらい、時間がかかっとるやないか。

いや、ほのぼのとして、良いぞ。
202153です:2001/04/22(日) 10:09 ID:GJXSK57Q
>>201
実はスクリプト自体は皆さんのご指摘を元に作成出来ていたのですが、
ずっとエラーが出続けてました。
で、oid=$last_oidの部分が多分問題なのかと思って、ここを色々
いじくっていたんです。
解決出来たのは、もう一度スクリプトをじっくりと眺めていて、「"」
と「'」が2か所抜けておりました・・・
203名無しさん@お腹いっぱい:2001/05/05(土) 16:54 ID:ejxtLiFA
初歩的な質問ですいません。

PHPで外部からきたデータに大して、そのままSQL文をつくると、例えば、$a_post_datumが"これは'クォーテーション'です"みたいなので、

pg_exec($conn, "select col from a_table where col2 = '$a_post_datum'");

みたいにすると文字列展開で

"select col from a_table where col2 = 'これは'クォーテーション'です'"

みたいになって、SQL文が成立しなくなるんだけど、みなさん、こういうのにはどう対処しているんでしょうか?
204名無しさん@お腹いっぱい。:2001/05/05(土) 17:35 ID:???
' を \' に置換するだけ。
205203:2001/05/05(土) 18:30 ID:ejxtLiFA
>>204
%と_は?
206名無しさん@お腹いっぱい。:2001/05/05(土) 20:35 ID:???
前にエスケープ文字\ を入れろ。つか基本だべ?
207203:2001/05/06(日) 16:11 ID:kun4pZhs
'と%と_で全部?
208名無しさん@お腹いっぱい。:2001/05/06(日) 18:36 ID:???
>>207
シングルクォートのときはシングルクォートの前に入れるだけで良かったと思うけど。
209名無しさん@お腹いっぱい。:2001/05/07(月) 20:18 ID:???
7.1からvacuumいらなくなるって話聞いたことあったけれど、気のせい?
これさえいらなければなーとつくづく思うんだがね > PostgreSQL
210名無しさん@お腹いっぱい。:2001/05/07(月) 20:56 ID:???
>>209
残念ながら気のせいです。
211名無しさん@お腹いっぱい。:2001/05/08(火) 18:58 ID:???
PHPのPostgreSQLインターフェイスってUNIXソケットからローカルホストの
バックエンドに接続できないの?
pg_connectでエラーが出て、postmasterに-iをつけて起動しなおしたら
すんなり動くようになって、動くのはいいんだけれど、なんか気分悪い

親切な方教えてください
212名無しさん@お腹いっぱい。:2001/05/08(火) 19:19 ID:Nor6.bTw
UNIXドメインのソケット経由で接続できるはずです(やったことないけど)。
マニュアルの、「LIXPostgreSQL 関数」を参照。
pg_connect()の実引数が微妙に違うみたいです。
213211:2001/05/08(火) 20:09 ID:???
>>212
http://www.php.net/manual/ja/ref.pgsql.php
の「表 1PostmasterとPHP」ってとこだね
ホスト名を明示しちゃうと、TCP/IP経由になっちゃうんだね
書いてあるとおりに書き換えたらUNIXソケットで接続してくれるようになったよ
どうもありがとう!
214名無しさん@お腹いっぱい。:2001/05/08(火) 20:54 ID:???
あ、章番号が変わってるんだ。ごめん。

そろそろ、自動でマニュアルをダウンロードしてmknmzかけるしくみを
作っとかんといかんな。
215774:2001/07/08(日) 23:52 ID:AeZs44/g
postgreSQL7.0を入れたのですが、psqlの中でヒストリ機能が使えません。
カーソルの上を押したら、前に打ったコマンドが出るようにしたいのですが、
どうしたら良いでしょうか。
ちなみに、通常のコマンドラインではカーソルの上を押せば
前のコマンドが出ます。
216名無しさん@お腹いっぱい。:2001/07/09(月) 12:36 ID:???
>>215

readline がないんじゃない?
217名無しさん@お腹いっぱい。:2001/07/09(月) 13:21 ID:???
>>216
おそらくはそれが原因だね。あるけど見つからないとか。

>>215
OS はなんだろう?FreeBSD ?
./configure --with-libraries=/usr/local/lib ....
とかで解決できないか?
218774:2001/07/09(月) 23:37 ID:KhxN5./k
早速のご回答ありがとうございます。
readlineは入っています。
OSはRedHat7.1です。
libへのパスを設定してもダメでした。

---------------------------
$ ls /usr/lib/lib{readline,history}*
/usr/lib/libhistory.a /usr/lib/libhistory.so.4.1 /usr/lib/libreadline.so.4
/usr/lib/libhistory.so /usr/lib/libreadline.a /usr/lib/libreadline.so.4.1
/usr/lib/libhistory.so.4 /usr/lib/libreadline.so

$ ls /usr/include/readline/*
/usr/include/readline/chardefs.h /usr/include/readline/readline.h /usr/include/readline/tilde.h
/usr/include/readline/history.h /usr/include/readline/rlconf.h
/usr/include/readline/keymaps.h /usr/include/readline/rlstdc.h

$ rpm -qa |grep readline
readline-devel-4.1-5
readline-4.1-5
219名無しさん@お腹いっぱい。:2001/07/10(火) 02:12 ID:???
>>218

libtermcap を入れてみよー
220218:2001/07/10(火) 08:58 ID:???
またまたご回答ありがとうございます。
libtermcapも入っておりました。
うーむ。
221名無しさん@お腹いっぱい。:2001/07/10(火) 16:49 ID:???
>>220

となると、 config.log を見て readline を見つけそこなっている
原因を探るだねぇ
222名無しさん@お腹いっぱい。:2001/07/14(土) 11:38 ID:ZarpnJWo
Warning: Unable to connect to PostgresSQL server: connectDBStart() -- connect() failed: Connection refused Is the postmaster running (with -i) at 'localhost' and accepting connections on TCP/IP port 5432? in
223名無しさん@お腹いっぱい。:2001/07/14(土) 11:39 ID:ZarpnJWo
↑原因はなんでしょうか。
フツーにselectで,tableの内容を表示しようとするとこうなる。
当方,管理者ではないので,設定イジくれません。
224名無しさん@お腹いっぱい。:2001/07/15(日) 01:06 ID:fduksvn.
pg_connect() でホスト名を空にしてないとか
225初心者:2001/07/23(月) 06:07 ID:xOk2bt2U
postgresのあるテーブルのdisplay_date列にdate型を格納してるんですが、
今日の日付と一致する行を表示するにはどうすればいいのでしょうか?
226名無しさん@お腹いっぱい。:2001/07/23(月) 06:34 ID:SYz87UN6
select * from "あるテーブル" where display_date = 'now'::date とか
227225:2001/07/24(火) 02:01 ID:goR17G.A
>>226さんありがおつございます。
で、cshで、.chsrcに「setenv TZ JST-9」としたものの、
psqlで、select 'now'::date;としても、7/24のはずが、
7/23(昨日の日付)が表示されてます。タイムゾーンが設定されていないようです。
postgresはunixとは別の独自のタイムゾーンを持つようだ、ということは、
マニュアルのdatetime-appendix.html
を見てなんとなくわかるのですが、しかしJSTに設定する方法が、これを見てもわかりません。
どうすればいいのでしょうか?
228JAPU:2001/07/24(火) 04:11 ID:???
set timezone to 'JST-9';
ついでにいうと、確認のためには select 'now'::datetime; が吉かもしれないにょ。
229225=227:2001/07/25(水) 16:26 ID:I8vfzaAc
>>228
すると、毎回set timezone to 'JST-9';の文章を実行しなければならないのですか_
あるいは、postgresの.chsrcみたいのがあればいいのですが・・・
230名無しさん@お腹いっぱい。:2001/07/25(水) 17:23 ID:bOBsSY92
postmaster を起こしたやつの timezone になるはず。
231ナナシファン:2001/07/25(水) 19:13 ID:xCgI2gSw
PHPでpg_pconnectを使ったときって、何かおかしくない?
ちゃんと動いているという事例を聞いたことがないんだけど、
期待通りに動いている人っている?
232ほげ:2001/07/25(水) 21:06 ID:???
>>231
期待どおりにって、SQL投げられるし別に普通だけど。
233 :01/10/11 22:30 ID:tBxjcP4c
234名無しさん@お腹いっぱい。:01/10/11 23:11 ID:???
>ちゃんと動いているという事例を聞いたことがないんだけど、
狭い世界にお住まいなのですね。
235Error401:01/10/18 17:24 ID:fbcY2f30
今日の発見。

pg_pconnect()を使うとqueryが速くなる。何故だ・・・。

name diff total
Start -
Query 0.0416 0.0416
Fetch 0.0217 0.0633
Stop 0.0031 0.0664

name diff total
Start -
Query 0.0186 0.0186
Fetch 0.0217 0.0403
Stop 0.0031 0.0435
236Error401:01/10/18 17:35 ID:fbcY2f30
う、見づらいし、何が何だかわかんないね。
・Connectして
・Selectして
・ループで回ってFetchして
・表示する
プログラム。
Benchmark/Timer.php使用。

pg_connect()を使った場合
name    diff    total
Start     -
Connect   0.0185  0.0185
Query     0.0130  0.0315
Fetch Loop 0.0218  0.0533
Stop      0.0031  0.0564

pg_pconnect()を使った場合
name    diff    total
Start     -
Connect   0.0397  0.0397
Query     0.0438  0.0836
Fetch Loop 0.0217  0.1053
Stop      0.0031  0.1084
237Error401:01/10/18 17:37 ID:???
すまぬ、pg_connect()とpg_pconnect()の場合が逆だった。
238名無しさん@お腹いっぱい。:01/11/05 22:38 ID:I5P+61E/
age がてら。

PostgreSQL に限ったことではないのですが、
・電話番号
・郵便番号
どういう風にフィールド作ってます?

市外 CHAR(4),
局 CHAR(4),
番 CHAR(4)

前3 CHAR(3),
後4 CHAR(4)

みたいな感じ? それとも一つの TEXT/VARCHAR?
それぞれ長所短所あると思いますけど、
よろしかったらみなさまのご意見お聞かせください。

スレ違いならスマソ
239名無しさん@お腹いっぱい。:01/11/06 15:52 ID:aGDSTcYL
あれ?
電話番号の市外局番ってMax4桁になったの?
240名無しさん@お腹いっぱい。:01/11/06 16:01 ID:???
なったの?って昔からでんがな。
241名無しさん@お腹いっぱい。:01/11/06 16:44 ID:???
つか、5桁もある
242名無しさん@お腹いっぱい。:01/11/06 18:24 ID:y3LOZtVD
質問です。

PCを最近はじめ、今、PHP+PostgreSQLを勉強中の者です、
DBの、登録、削除、一覧表(毎10件)を、一つのスクリプトで実行したいのですが、一覧する際、最初の10件は、表示してくれるのですが、
11件目から〜が、表示できないで困っております。
自分で考えて作ったのは、メインページからラジオボタンで選択し、
PHPスクリプトの中で、if(もしくはswicth)で、各実行をしてます。
一覧で、submitをクリックすると、11件目から表示させたいんですけど、
どうしてなのか、表示できません。

説明下手でわかりにくいかもしれませんが、誰か、イイアドバイス、お願いします。
ド素人なので、その辺も考慮して、お願いします。
243名無しさん@お腹いっぱい。:01/11/06 18:34 ID:OqD8s6xc
>>242
マンモス本読んだ?
244>>243:01/11/07 10:11 ID:ieoCTquz
マンモス本読んだけど、いまいちよくわかんないんです^^;
245名無しさん@お腹いっぱい。:01/11/07 11:28 ID:ieoCTquz
>>243
どの変(ページ数とか・・・)教えてくれると助かるんですが・・・。
246名無しさん@お腹いっぱい。:01/11/07 12:02 ID:???
>>245
漏れが持ってる PHP3 用のやつでよければ 81 ページからあたり。
247245:01/11/07 12:43 ID:ieoCTquz
>>>246
自分が持ってるのは、PHP4なので^^;
248名無しさん@お腹いっぱい。:01/11/07 12:56 ID:rEwaGgOJ
>>242
PHP4のやつはP144,145あたりを読めばいいかと。
でもPostgreSQLのselect文を理解してからのほうが
いいな。
249242:01/11/07 14:14 ID:ieoCTquz
もう少し、本読んで、勉強しなおします。
ご教授、ありがとうです。
250その他:01/11/09 16:03 ID:vDpRquZJ
PostgreSQLのインストール後
regression testを行ったのですが、全てが「failed」
になってしまいました。けれども、createdbもcreatetableも
insertもselectも問題無しに出来ます。でも、あとあと支障とか
あるのでしょうか?知っている方がいらしたら教えて下さい。
251hen:02/02/07 13:36 ID:Bho0YULV

item_id | item_name
1    | XX
2    | YY
というテーブルがあって
変数 $itemname = XX として

このときitem_id = "XX"のitem_idを取り出すにはどうすればいいのですか?

とりあえず
$sql = "select item.item_id from item
where item.item_name = $itemname"; //item_nameとコンボボックスのdataが一致する時のitem_id
$result = pg_Exec( $conn, $sql );
とやってみたけどPostgreSQL query failed: って帰ってきます・・
252hen:02/02/07 13:42 ID:Bho0YULV
$sql = "select item_id from item
where item_name = \"$itemname\"";

すんません
これに変えるとAttribute 'XX'not found
253名無しさん@お腹いっぱい。:02/02/07 22:38 ID:blA7jPNr
SQLで文字列は ' で囲む
254  :02/02/07 23:32 ID:z4yCqxdv
いつも、教わってばっかりだから、
たまにわ、教えてやるヨ
$sql = "select item_id from item where item_name = '$itemname'";
って書くんだよ。
''で、変数を囲むんだよ、
これ最強
255 :02/02/07 23:33 ID:t9L0Eq4j
256marois:02/02/10 22:51 ID:MJ34x4JG
CGI版のPHP4をあるホスティングサービスで使っています。
pg_close($this->con);
のところで「pg_close -1」という値をクライアント(HTML上)
に返してきてしまうので困っています。
@を付けたり色々やってみたけど駄目。
同じスクリプトをPHP3で流すとOK。
ローカルのPHP4(Apache版)でもOK。
なにがいけないのでしょうか?
#このホスティングサービスPHPのサポートはしてくれないのです。
257名無しさん@お腹いっぱい。:02/02/11 06:04 ID:yEMLRxJJ
pg_fetch_object()でPGSQL_NUM(数値配列)引数を付けた場合,
次のような$rcプロパティでどのようにアクセスすればフィールドを
参照できるのでしょうか。

$this->rc[$i] = pg_fetch_object($result, $i, PGSQL_NUM);
258  :02/02/11 18:01 ID:???
>>256
pg_close($this->con); 自体を削除すればOK!
closeなんて、かかなくても、動く。
259marois:02/02/11 20:58 ID:PVwY953h
>closeなんて、かかなくても、動く。
動くとは思いますが、問題は出ないでしょうか?
一連のスクリプトで何度もOPENするのですが。
#セッションは1つなのでしょうか?
#疑ってすみません。
260名無しさん@お腹いっぱい。:02/02/11 21:08 ID:???
ついさっきOIDの表示の仕方忘れて大変だった、
select oid, * from table;
って書けばいいんだけどoid,とか記憶から消えてたね。
PostgreSQLの解説系のサイトどこに行ってもoid,の事には
あんまり触れてもないしgoogleでも引っかからないし・・・。

そういえばPostgreSQL関係で新しい本出てたね、あれなんだっけ?
261  :02/02/12 00:06 ID:???
>>259
書かなくても,問題でない。
どーせ、commitとか、してないんだろ。
そんな、PGだから、closeなんて、不要

262marois:02/02/12 01:39 ID:Ixi/JtIe
失礼な^^;
テーブルの更新にはトランザクションは使ってます。
一応複数SQL流すので保険として。

話はちょっとそれますが、サンプルプログラムでコネクションをグローバル
変数に保持して、それを最後まで使い続けるプログラムを見たことがありま
す。最後にユーザーがLogoutしてくれればpg_close出来ますが、いきなり
ブラウザをばっさり終了されてしまうと出来ないですよね。
コネクションにあんまり神経質になんなくても良いのですかね。

同時接続50-100ぐらいを想定しているもので...ちょっと心配なのでした。
263名無しさん@お腹いっぱい。:02/02/12 21:51 ID:???
>>260
公式本とかいうやつか?
postgresql.jpのだろ。
264名無しさん@お腹いっぱい。:02/02/18 21:01 ID:???
とりあえず、PEARのDBクラス使いませんか?>ALL

コネクション云々を考える負担が軽減されますよ。
265名無しさん@お腹いっぱい。:02/02/18 23:58 ID:???
>264
pearてわからんちん・・・( ´Д⊂ヽ ウエーン
266(=゚ω゚)ノ ◆SI2r4V0c :02/02/19 10:36 ID:???
日本語マヌアルあるよ。
267(=゚ω゚)ノ ◆SI2r4V0c :02/02/19 10:38 ID:???
268名無しさん@お腹いっぱい。:02/02/19 10:44 ID:???
>>262
http://www.php.net/manual/ja/features.persistent-connections.php
らしいです。

あんまり神経質にならなくてもいいみたいです。
269名無しさん@お腹いっぱい。:02/02/19 16:40 ID:???
Postgreからtimestamp型のフィールドを取り出すとき、
日付の末尾に+9という値(GMT?)が付くんですが、これを取り外すには
どのようにすればいいんでしょうか。
270名無しさん@お腹いっぱい。:02/02/19 16:59 ID:???
>266
マヌエルて助っ人野球選手がいたよね昔。
(◕ฺ∀◕ฺ)
271marois:02/02/19 23:38 ID:SCYCQAYn
>>268
情報ありがとうございます。
大変参考になりました。

話が変わるのですが、皆さんは文字コードに何をつかっておられますか?
結構文字化けに悩まされています。(PHP3i18でも)
私の場合、EUCでソースを書いて、EUCでDBに格納しているのですが、ブラウザが
Shift-JISと間違って判断してしまう場合があるようです。
<meta .htaccess と色々試してみたけど、駄目なときがある。
Shift-JISでソース、Shift-JISでDB格納していらっしゃる方はいらっしゃいま
すか? どんな組み合わせが文字化けしにくいんでしょうか?
272名無しさん@お腹いっぱい。:02/02/20 00:07 ID:???
>270
情報ありがとうございます。
大変参考になりました。
273名無しさん@お腹いっぱい。:02/02/20 11:00 ID:???
>>271
理屈上は、EUC-JPオンリーな運用をすれば化けないはず。

でもそれは現実的な話では無いからなぁ…
274名無しさん@お腹いっぱい。:02/02/24 05:50 ID:IIwngioo
php+postgreでwebアプリ構築してるんですが、
ログイン画面でユーザが入力したID、パスワードを照会するとき、
IDでSELECT ID, PASSWD ... みたいに引っ張ってきて、
そのPASSWDとPOSTに入ったパスワードをmd5で照会する、
この方法って無意味ですか?(セキュリティ上の観点で)
275274:02/02/24 05:52 ID:???
>>274
事故レス。情報不足してました。
DBには裸の状態でパスが入ってます。
276名無しさん@お腹いっぱい。:02/02/24 06:50 ID:gC0AF2pI
>>274
 無意味。

 DB内のパスワード見られたらクラックされる為。
 ハッシュ化(MD5、DES)したパスワードを格納する。

 質問の内容からして効率悪そうな開発をしているっぽいので、
crypt関数と、mod_auth_pgsql について調べることをおすすめ
する。
277274:02/02/24 13:30 ID:IIwngioo
>>276
早速調べて入れてみました。
で、今さらなんですが、パスワードはphp以外の箇所(言語)でも使うため
仕様変更が難しいようです。
まあごく限られたネットワーク内での使用を考えてるので(外には出さない)、
それほどセキュアなシステムで無くても良いんですが、DBを暗号化せず
セキュリティを高める方法ってないでしょうか(SSL以外)。
278名無しさん@お腹いっぱい。:02/02/24 18:08 ID:L35l4mFf
>>277

 DBを暗号化というか、DB格納パスワードをハッシュ化。

> セキュリティを高める方法ってないでしょうか(SSL以外)。

 無い。
279名無しさん@お腹いっぱい。:02/02/24 19:44 ID:1vBdeyQk
でも crypt かけちゃったら、ユーザーがパスワード忘れた
ときとか、どうやって元のパスワードを教えて上げるの?

パスワード設定し直すっていう方法が現実的かも知れないけど。
280名無しさん@お腹いっぱい。:02/02/24 20:43 ID:L35l4mFf
> どうやって元のパスワードを教えて上げるの?

 当然、教えてあげない。

> パスワード設定し直すっていう方法が現実的かも知れないけど。

 そうする。基本だよね?
281名無しさん@お腹いっぱい。:02/02/26 00:31 ID:EFcQI2qb
>>273
PHP3-i18nでもPHP4.0.6以降でも、出力だけSJISってのができるから、それが一番
問題起きないんじゃない? 出力がEUC-JPだと文字化けするブラウザは結構あるし。
PHP,DB内部はEUC-JPで、HTTP入出力はSJISでずっとやってますが、大きな問題は
おきてないな。
282名無しさん@お腹いっぱい。:02/02/26 01:58 ID:myAGwwd4
しつもーーん
http://www.jlb.dyn.to/hsinstall/salsemng/
こんな感じで、みんなも、定期的に、バキュームしてる?
自分は、したことないぞーばきゅーむなんて。
283名無しさん@お腹いっぱい。:02/02/26 02:19 ID:R0qwrTOR
野球ヲタワラタ

http://ime.nu/www.baseball-lover.com
284名無しさん@お腹いっぱい。:02/02/26 02:24 ID:c48zylad
質問です。
interval型を使って年-日-時でデータを管理しているのですが、
365日で1年への繰り上がりを期待したら、
どうやら360日で繰り上がってます。

繰り上がり日数の指定ってできないのでしょうか?
285名無しさん@お腹いっぱい。:02/02/26 15:19 ID:ws1pgQhy
>>281

 MIMEヘッダーに文字コードをつければ化けない。
 HTMLファイルにも、httpd.conf や .htaccess に AddType を
加える事で可能。
286  :02/03/24 17:12 ID:S817rdf9
現在、PHP+PostgreSQLで小規模なDBシステムを開発していますが、
教えていただきたいことがあります。

それは、このシステムで出力されるデータをPDFファイルにしたいのですが、
これを実現するためには、PHPをインストールする際にpdflibを使用する旨の
オプションを指定する必要があることは知っています。

ただ、現在はインストールした後ですので、後でpdflibを追加することは
可能ですか?厨房なので、詳しい方法を教えてくれませんか?よろしくお願いします。
287nobodyさん:02/03/25 01:50 ID:hKhhq3k3
>>286
 コンパイル時に組み込むものだから、後からは無理だと思われ。
 リコンパイルする手間はそんなに無いと思うので、やり直しをおすすめ。

> 厨房なので

 DBシステム開発自体を辞めておけ。
288nobodyさん:02/07/31 14:56 ID:???
PHP4.2.2セキュリティー対応上げ

皆さん入れ替えましたか?
289nobodyさん:02/07/31 16:33 ID:???
( ´,_ゝ`)プッ
http://freehome.kakiko.com/tuk/iiyo.html
290nobodyさん:02/09/01 20:10 ID:h2ERcGeK
何でこのスレッド書き込みが無いの?
とりあえずあげ。
291b:02/09/01 20:21 ID:hC+cV5mq
292お役立ちサイトです。:02/09/01 23:25 ID:eeJda9o6
究極の総合リンク集

http://home9.highway.ne.jp/cym10262/
293ノンノン:02/09/28 21:30 ID:Mv9w8xYv
TIMESTAMP型の日時をPHPで表示する方法が良く分かりましぇんです。

$sql = "select to_char(nichiji, 'YYYY/MM/DD') from テーブル名";
$result = pg_exec($sql);

で、良いと思うのですが、

Warning: PostgreSQL query failed: ERROR: No such function
'to_char' with the specified attributes

っていうエラーが出ます。
これって、to_charが使えないってことですか?
仮に to_char が使えない場合、どうやればいいのでしょうか?
どなたかご教授願います。
294nobodyさん:02/09/28 21:38 ID:B9guHGNW
整形してから引っぱり出すんじゃなくて
引っぱり出してから整形してください
295hmk:02/09/28 21:39 ID:???
よーわからんが、nichijiは本当にtimestamp型になっているのかぇ?
296ノンノン:02/09/28 21:59 ID:Mv9w8xYv
> よーわからんが、nichijiは本当にtimestamp型になっているのかぇ?

それは間違いないです。ハイ。

> 整形してから引っぱり出すんじゃなくて
> 引っぱり出してから整形してください

あいたたぁ。そういうやり方がありましたね。(なんて私は頭がカタイのか)
とすると、取り出したものが $nichiji に入ってるとすると

local($nichiji);

なんてものを使えば良いのでしょうか?
297294 じゃないよ:02/09/28 22:17 ID:???
「引っぱり出してから整形して」というのはたとえば、
EXTRACT(YEAR FROM nichiji) AS nchj_y,
...
みたいに SQL を書くという意味ではないかな。ちょっ
と手間は増えるけど、漏れはいつもこうしてる。
298ノンノン:02/09/29 13:23 ID:lz5l3CdA
なるほど、YEAR,MONTH,DAY というように取り出したいデータごとに
実行するということですね。
で、試してみました。
・・・結果はだめでした。
なので、簡単に

 select extract(YEAR from TIMESTAMP '2002-09-29')

としてやってみました。
・・・、これもダメでした。PHP を使ってもコマンドラインからも
結果は同じです。どちらも、こういうエラーが出ます。

ERROR: Function 'date_part(text, timestamp)' does not exist
Unable to identify a function which satisfies the given argument
types You will have to retype your query using explicit typecasts

何が原因なんでしょうか? PostgreSQLのバージョン?
ちなみにそのバージョンは、6.5.3 です。
299297:02/09/29 13:49 ID:???
>>298
7.0.2 なら select extract(YEAR from TIMESTAMP '2002-09-29')
は OK だね。6.5.3 だとダメ。

6.5.3 なら、
select extract(YEAR from DATETIME '2002-09-29')
で OK だけど、DATETIME は標準じゃないし、最近は
Postgres でも推奨されていないと思う。
300ノンノン:02/09/29 14:05 ID:lz5l3CdA
やっぱりそうですか。
ということは、to_char でエラーが出るのもパージョンのせいですね。
レンタルサーバなのでどうにもできません。
フィールドのタイプを変えるしかないないですね。
原因が分かっただけでも良かったです。

みなさん、ありがとうございました。
また、何かあれば願いしますね。
301297:02/09/29 14:17 ID:???
>>300
date_part 関数使えば、フィールドの型は変えなくて済むと
思われ。でも標準(略
302やりたいのに:02/10/02 19:31 ID:???
思い立ってから既に一週間。
PHP+PostgreSQLの勉強をしようと頑張ってますが入り口にすら立てません・・・。
とりあえず簡単なWebアプリケーションを作成しようとしてます。
<Webサーバ環境>
Win2KServer + PHP4.2.3 + Cygwin + PostgreSQL7.2.2(Cygwinと共にインストール)

pg_connect() を使うと

Warning: pg_connect() unable to connect to PostgreSQL server: could not create socket:
要求したプロトコルと互換性がないアドレスを使用しました。 (0x0000273F)

が発生して接続ができません。

使い方はどこにでもサンプルで書いてあるような
$con = pg_connect("dbname=testdb");
という形なんですが・・・これは PHP の設定なのか PostgreSQL の設定なのか
はたまた Cygwin の設定なのか Windows の設定なのか
検討がつきません。

3日悩んだあげく、ODBC経由ならどうよ?と試したらあっさり成功。
# pg_databaseからテーブル一覧取得表示

pg_ほにゃほにゃ系の関数を使う為には何をどう設定すればいいのかひたすら調査中です。
どなたか「おい、ここチェックしたのか」とか思い当たる事項があれば
突っ込んで下さると非常に喜びます(涙)
303nobodyさん:02/10/03 06:22 ID:???
Apache,PHP4,PostgreSQL7でWEB鯖構築するやり方載ってる本あったからそれでも見れば。onLinuxだったけど。
304nobodyさん:02/10/03 06:33 ID:???
Windows上でやったことないのでアレだけど、
WindowsってUNIXドメインソケット使えないよね?

としたら、PHP<->PostgreSQLの接続はTCP/IP使わなきゃいけないはずなので、

pg_connect("host=localhost dbname=testdb");

みたいにして、あとは PostgreSQL の pg_hba.conf で
localhost からの接続の認証してやればいけそうな気がするが。
305nobodyさん:02/10/03 06:34 ID:???
つーか、エラーメッセージ見れ。
pg_connect()したときにエラーメッセージ出るだろ。
306nobodyさん:02/10/03 06:38 ID:???
スマソ。俺がカキコ見てなかった…。欝だ氏のう…。
307やりたいのに:02/10/03 11:24 ID:???
お返事多謝です。非常に喜んでます♪

>>303
 その環境で構築する本は一応見てみましたが、どーも・・・。
 Cygwin上に更にApache入れる?それともWin用のApache入れるのかなぁとか
 昨日ふと思ったりしましたが・・・IISでPHPもPostgreSQLも両方動くのに
 意味なさ過ぎだなぁ・・・とか(苦笑)

>>304
> としたら、PHP<->PostgreSQLの接続はTCP/IP使わなきゃいけないはずなので、
 ですよね。
 これに関してですが、わからないなりに調べた結果、以下の点は留意しました。
 ・Postmaster起動時に-iオプションを付ける。ポートも指定してみる。
  => pg_ctl -w -o "-i -D /usr/share/postgresql/data -p 5432" start
 ・pg_hba.confの設定をチェック
  =>以下の設定になっていた。これで問題なし??
   local all trust
    host all 127.0.0.1 255.255.255.255 trust
 ・postgreSQL側でも接続を有効にしてみる。
  =>postgresql.confで以下のように設定
  tcpic socket = true
  port = 5432

> pg_connect("host=localhost dbname=testdb");
 なるほど、ローカルホストだぜ!って明示的に指定するわけですね。

早速やってみます!ありがとうございました。
308nobodyさん:02/10/03 19:35 ID:???
大助かりage
309nobodyさん:02/10/03 22:37 ID:yBxgrv2T
>>282
バキュームしれ。
7.2.1使って12万レコード/日くらいのトランザクションがあるけど、
結構ディスク占有率がふくれる(溜めるだけではないため)。
数万レコードでも更新が多いならお薦めだ > 使っているdata/base
#ちなみに vacuum full 実行10分ちょい > 漏れの仕事環境

vacuume or vacuume full は頼りになるぞ。



そんな漏れん家のサーバは1回/半年で十分だ。数秒で終わる(w
310307:02/10/04 14:40 ID:qOvfKv6+
結果報告〜。
つながりました!Apacheは入れなくてもよかったです。
これまでCygwinを手動で起動して、その上でipc-daemonをサービス起動して
次にpg_ctlでPostmasterを起動して・・・とやってたんですが
cygrunsrvというコマンドでPostmasterもサービス登録する手順をみつけ
やってみたところ、突然つながりました!
接続は以下のように行いました。ユーザも何もかも指定しました(笑)
$con = pg_connect("dbname=testdb host=localhost user=test_user password=test_user");

Postmasterの登録に使用したコマンドは以下のものです(本当は1行です)

$ cygrunsrv --install PostgreSQL
--path /usr/bin/postmaster
--args "-D /usr/share/postgresql/data -i"
--dep ipc-daemon
--termsig INT
--user postgres
--shutdown

これで、試験サーバを起動してから一々ipc-daemon+Postmasterを手動で
起動する手間もかかりませんし、いい感じです。
ただ・・・Postmasterのみ再起動する方法がわからないんですよね。
pg_hba.confとかその辺を更新した後、サーバごと再起動しないと駄目という
実に非現実的な環境になってしまいました(爆)

でもまぁ、大きく一歩前進です。多分何か方法があるんでしょうし
設定とかあるのかもしれません。調べていくことにします。

多謝多謝、多謝です〜!
311nobodyさん:02/10/06 21:27 ID:Y+aKD2A2
すっごい初歩的な質問ぽいですが…かきこします。
xreaでPostgreSQLつかってるんですが

$hst = "localhost";
$db = "ユーザID";
$us = "ユーザID";
$pass = "パスワード";

$conn = pg_connect("host=$hst dbname=$db user=$us password=$pass") or die("接続エラー");

ってやると
Warning: pg_connect() unable to connect to PostgreSQL server: PQconnectPoll() -- connect() failed:
Connection refused Is the postmaster running (with -i) at 'localhost' and accepting connections on TCP/IP port 5432?
っていわれちゃうんだけど、解決方法わからないですか?

自分のパソコン上でやるとできるのですががが。
312nobodyさん:02/10/07 01:33 ID:hvZZAVT1
>311
まんまやん!
-i と一緒に走らせろよ。

pg_ctl stop
pg_ctl start -o "-i"

だな
313312:02/10/07 01:37 ID:hvZZAVT1
追加
DBが別サーバなら pg_hba.conf の一番下辺りの trust あたりを見る。
んで、適時追加する(アクセスするサーバへの許可)。
↑の起動オプションの追加やconfの変更が出来ないんならわからん!
314nobodyさん:02/10/07 08:25 ID:tYSAfVj4
つーか、ApacheとPostgreSQLが同じマシンで走ってるなら、
ふつーはUNIXドメインソケットで接続するんちゃうやろか。
-i オプションつけずに動かして。

なので、「host=$hst」つーのはいらないのでは?
315312:02/10/08 00:18 ID:OGtZEEu6
>>314
つ〜か、「自分のパソコン上でやるとできるのですががが。」だそ?
隣のパソコンにつなごうとしてうまくいかないのでは? と思うぞ...ふつ〜は。

っで、隣のパソコンから己(311)のIPがipfwとかipchainsとかから
deny|dropされていない事は確かだろうな?(w IPだけじゃなくportも...

そんなんされてたら、どうにもできんが(www
316312:02/10/08 00:19 ID:OGtZEEu6
をぉ!
隣のパソコン≠localhost ぢゃないか!!(w

逝ってくる...
317nobodyさん:02/10/09 01:18 ID:LBei1JgW
質問です。
PHPから、postgresへデータを書き込む時は、どうしたらよいのでしょうか?
今、POSTされたデータを使って、
こんな感じの関数を使って、文字をEUCにして、DBに入れてます
でも、うまくいかないんです......動くんだけど
特定の文字の時、
ここから-----------------
――――――――――――――――――――――――――――――――0-5/10―
★GAME
-------------ここまで
を入れると、0移行がきれてしまって、DBに入るんです...
0移行もいれたい!でも、うまくいかない...
なぜ?

Function beauty($sSQL)
{
//文字をEUCにして綺麗にして
$sSQL=trim(mb_convert_encoding($sSQL,"EUC","SJIS"));
$sSQL=mb_convert_kana($sSQL);
//改行キーを綺麗にして
$sSQL=str_replace("\r\n", "\n",$sSQL);
$sSQL=str_replace("\r", "\n",$sSQL);
$sSQL=ereg_replace("^(\n)+|(\n)+$","",$sSQL);
//スラッシュを綺麗にして
$sSQL=addslashes(stripslashes(stripslashes($sSQL)));
//実行
return $sSQL;
}
318nobodyさん:02/10/09 02:48 ID:uMeBQ3Ig
カラムの型なんでしょう?
319nobodyさん:02/10/09 07:54 ID:???
つーか、なぜ $sSQL を加工する度に echo して調べないのかと小一時間(略
320nobodyさん:02/10/16 17:38 ID:???
Apache 1.3.22 + PHP 4.2.3 + PostgreSQL 7.2.1 で、
phpPgAdmin 2.4.2 を動かそうとしたんですが、フォーム入力で
なぜか先頭の4文字分が消えてしまってSQLクエリが組み立てられず
エラーになってしまいます。

PHPは --enable-mbstring --enable-mbstr-enc-trans
--enable-mbregex で configure してあり、通常のPHPでのフォーム入力
受け渡しでは問題ないのですが、phpPgAdminのPHPスクリプトが
何か特殊なことをしているのでしょうか?
321質問ageです:02/10/22 10:45 ID:38ZRylkG
WEB データベースでは 1ページ毎に

 $db = DB::connect();
 $res = $db->query();
 $db->disconnect();

とするのが普通なのでしょうか?
DB オブジェクト $db をグローバル変数として
他のページでアクセスする方法はあるのでしょうか。
322nobodyさん:02/10/22 10:47 ID:???
> とするのが普通なのでしょうか?
普通。けど、ココはPHPのスレ。
323nobodyさん:02/10/22 11:08 ID:???
>>322
ええ。PHPスレと知ってて質問しています。
PHP-4.2.2 を使用してます。
PHPでグローバル変数は扱えるのかな? と思って質問しました。

現在、最初に postgres の user、password を入力させて
それを各ページに POST して使い回して connect しているんですが
みなさん、このようにして使っているのでしょうか。
324nobodyさん:02/10/22 12:38 ID:4eylDja6
>>323
session利用して保持すれば?
325nobodyさん:02/10/22 15:18 ID:???
pgpconnect?
326321:02/10/22 16:15 ID:???
>>324
そうですね。
各ページで connect を行う場合はそうします。

ただ、DBオブジェクト(今回は Class のオブジェクト)を
グローバル化出来れば便利(早い) だと感じたのですが、
皆さんそのようには作られてないようで...
何か、問題あるのかな?
もうちょっと、色々勉強してみます。
327nobodyさん:02/10/22 16:43 ID:???
>>321
>>325が自信なさげにつぶやいてるけど
http://www.php.net/manual/ja/features.persistent-connections.php
じゃ駄目なのかと?
328321:02/10/22 17:21 ID:???
>>327
ごめんです。
別に無視していた訳ではないです。>>325 さん。

今 Class と PEAR を使って色々勉強中でして、
「こんな風に出来ないものか?」と試行錯誤してます。
pg_pconnect は DB::connect( $dsn, TRUE ) で実現
出来るようです。
色々試してみたいと思います。
329nobodyさん:02/10/22 20:50 ID:bCdHvFBv
>>326
DBへの接続で、パーシステントな香具師が居たかと...
「永続的接続」だっけか?

ただし、トランザクションエラーでcommitもrollbackもやってなくて
ロック状態に陥る罠。

つ〜か、↑は、デバッグ時にはまった場合の話ね。
きれいになったコードでは問題ないはずだよ。
330教えて君:02/10/30 20:04 ID:???
上の永続的とかは関係なくて、
最初にconnectしてから
"begin"を宣言しておいた後、
放置してPHP終了した場合って、
"commit"しなかったんだから"rollback"しなくても良いんですよね?
pg_closeは省略できるらしいし。
どうなの?
331330:02/10/30 20:05 ID:???
要するに"rollback"も省略できるかってことです。
332nobodyさん:02/10/30 20:11 ID:CX80yU9D
どこが2重カキコなんじゃボケェ!
2重カキコじゃないってば!!>ERRORさん

rollbackは今までの作業を捨ててその後で新しく作業するのに使うんですよね?
取消で終了するなら言わなくてもいいっすよね?
333330:02/10/30 20:12 ID:CX80yU9D
>>332
俺です(鬱)
334330:02/10/30 20:20 ID:CX80yU9D
http://php.lamphost.net/manual/ja/print/ref.pgsql.php
> BEGINで始まり、 そのトランザクションが有効な場合はCOMMITまたは ENDで終わります。
> トランザクションが失敗した場合、 そのトランザクションはROLLBACKまたは ABORTにより閉じる必要があります。
> ラージオブジェクトリソースを閉じる前に接続リソースを閉じないように して下さい。
エラーでこけたらどうなるんすか?
335329:02/10/30 21:02 ID:6KbHJvYg
>334さんへ

そのつもりで漏れも
>ただし、トランザクションエラーでcommitもrollbackもやってなくて
>ロック状態に陥る罠。

つ〜て書いてやった訳なんだが、
「早い」事だけを求めてトランザクションのなんたるかを
全く判っていない >>330 には、無駄だったんだと改めてわかったよ。



「永続的接続(パーシステント・コネクト)」と「トランザクション」の共存くらい
勉強&理解して欲しいよなぁ...

Oracleだろうが、DB2だろうが、MySQLだろうが、PostgeSQLだろうが、
何れは陥る罠だぞ。


漏れは無視していいが、「永続的接続」と「トランザクション処理」を
もう一度根っこから調べてくれ(;´Д`) >> 330

頼む!
336山崎渉:03/01/15 13:47 ID:???
(^^)
337nobodyさん:03/01/18 03:13 ID:bdZI9lM1
RedHat8.0を入れました。
PHPとPostgreSQLの接続がうまくいきません。
PHPの動作確認はOKでした。
PostgreSQLの方もcreateuserで作成したuserにてpsqlを行えます。

どこかのHPを参考にしてnobodyのユーザーを作り
テスト用のphpをたたくと

Warning: pg_connect() unable to connect to PostgreSQL server: FATAL 1: IDENT authentication failed for user "ifuku" in /home/test/public_html/test.php on line 14

といったメッセージがでます。
php.iniかpg_hba.confの設定をしないといけないのかな?と思いましたが、
なにか参考になる話を聞かせてくれませんか?
338337:03/01/18 03:15 ID:bdZI9lM1
エラーメッセージのうち user の箇所は nobody でやったりと
他のuserを使ったりはしています。
339nobodyさん:03/01/18 03:35 ID:???
>>337
pg_hba.confだろ。
340337:03/01/18 03:49 ID:???
>>339

そうですか
調べてみます。
ありがとうございました。
341nobodyさん:03/02/26 18:10 ID:???
どうしても2カラムで1キーになるテーブルが多いのですが、

a 102
b 2003
aとbでキー

そういう場合は

c 1002-2003
というカラムを作った方がいいですか?
342nobodyさん:03/02/28 12:52 ID:Gr9BwE/o
>>351
勉強し直してきてください
343nobodyさん:03/02/28 19:20 ID:qSGW/gfl

    ☆^〜^★【新着情報追加】
   http://sagatoku.fc2web.com/
  あなたの探し物こちらで見つかります
344nobodyさん:03/03/07 14:00 ID:ZFWCWq3y
PostgreSQL 7.2.3からPostgreSQL7.3.2に変更したところ、
lo_unlinkを使用する箇所でエラーと言われました。
もちろん使用しなければエラーと言われません。
動作的に使用しなくても問題はないように思えます。

同じ症状になった人居ますか?

「環境」
Red Hat Linux 7.2
PostgreSQL7.3.2
php-4.2.3
apache_1.3.27


345山崎渉:03/03/13 17:07 ID:???
(^^)
346nobodyさん:03/03/17 18:15 ID:RRSo0s2u
新しく更新されたデータから10件のデータをテーブルから
引っ張ってくる場合、
SELECT * FROM テーブル名 LIMIT 10 OFFSET (最終行数 - 10)
になると思うんすけど、この最終行数ってどうやって求めるのか?

$sql = "SELECT * FROM テーブル名";
$db = pg_exec($sql);
$maxnum = pg_numrows($db);
で、いの?

いや、ダメだろうなぁ。なんかもったいないし?
347nobodyさん:03/03/17 18:57 ID:UoxJY4S2
>>346
昇順になってるカラムはないの。
あればそのカラムで逆順にソートして最初の10行を取得する。
348nobodyさん:03/03/17 19:34 ID:RRSo0s2u
>昇順になってるカラムはないの。
あります。

>あればそのカラムで逆順にソートして最初の10行を取得する。
なるほどぉ。。。。と言いつつ良くわかってない初心者です。
ORDER BYっての使うのか?。

要はページに最新のデータから10件ずつ表示させていくヤツが
作りたいのです。
349346/348:03/03/17 20:14 ID:RRSo0s2u
出来ますた。
SELECT * FROM テーブル名 ORDER BY (昇順カラム) DESC LIMIT 10 OFFSET 0
ですね。サンクスです。
350346:03/03/18 12:18 ID:frl1VUIP
でも、テーブルの総行数を調べたい事ってあると思うんだけど
そん時は莫大なメモリを食いそうな(あくまで漏れの稚拙なイ
メージなんだけど)

$sql = "SELECT * FROM テーブル名";
$db = pg_exec($sql);
$maxnum = pg_numrows($db);

なんて事をせにゃならんのだろうか?

あと、JOINってどんな時に使うの?
351nobodyさん:03/03/18 12:30 ID:???
>>350
count() 使え。
SQL の基礎について解説した本か、シーラカンス本買った方が良いよ。
352346:03/03/18 14:44 ID:frl1VUIP
>>351
サンクスでし。
SELECT COUNT(カラム名) FROM テーブル名
でしね。できますた。
シーラカンス本もマンモス本も持ってます。しかし、まだ敷居が
高すぎます。COUNTについて書いてあるのなんて1ページのほんの
少しでし。

JOINわかんねぇ。つまりテーブルを結合しる・・・と。
ブツブツ・・・。
353nobodyさん:03/03/18 16:07 ID:iRf6zAa0
足が短いと、どんな敷居も高く見える
354346:03/03/18 17:11 ID:???
>>353
なるほど。うまい。

『SQL Webデータベース/独習テキスト完全図解』\2800-すばる舎を
買ってきますた。出なおします。
355nobodyさん:03/03/22 15:32 ID:???
こんちわっす、2ch学園web板幼稚園の質問ですけど
教えて下さい。たのんまっす!
no int, hougaku varchar
テーブル名 hoge
no|hougaku
--|------
10|higasi
20|nisi
30|minami
40|kita
こんなテーブルがあったとします。
$houi = "kita"←仮にテーブルにある文字を設定します。
$sql = "select hougaku from hoge where hougaku = 'houi' ;";
$result = pg_query($sql) ;
if num_rows($result) !=1{
print ("そんな方角はありません。") ;
}
ここまで、$houi に代入された文字がテーブルに有るか無いか分かると思います
もしここで正しく$houiにkitaという文字がセットされたとしたら
noの40という数字が導きたいのだがどうしたらいいかわかりません、
続きのプログラムはどう書いていいのか分かりません、教えて下さい。
356gn355my0:03/03/22 15:47 ID:???
select no,hougaku from 〜
じゃダメなん?
357nobodyさん:03/03/22 15:59 ID:jxh1CrBX
こんな過疎スレをsageで質問しても気付く人そういねぇんじゃぁ。

とりあえず、$が抜けている。
$sql = "select hougaku from hoge where hougaku = '$houi' ;";
で、noも取得するなら、
$sql = "select no,hougaku from hoge where hougaku = '$houi' ;";

あとは、
$result = pg_query($sql) ;
if num_rows($result) !=1{
print ("そんな方角はありません。") ;
}else{
$arr=pg_fetch_array($result);
echo $arr["no"];
となる。

その後、何をやりたいのかわからんので、適当に追加したのだが、
これだけのことなら無駄が多いよ。

358357 ◆Kiss.FX29M :03/03/22 16:02 ID:???
うひゃ、ageてもた。

>>356
noの取得が目的なら、
select no from 〜
で、いいよねぇ。
359nobodyさん:03/03/22 16:22 ID:???
>357
できましたありがとう
360nobodyさん:03/03/25 22:15 ID:8MjhOhZv
perlでDBD::Pg使ってました。
結果を変数にぶち込みたいんだけど
$結果 = $db->selectrow_array("SQL文");
みたいに1行で片付けたい。
PHPだとどうすればいいんかな?

良くわからんのでとりあえず
$rs = pg_query($con, "SQL文");
$結果 = pg_fetch_result($rs,0,0);
にしてるんだけど何か変な気がするし。
昨日PHPはじめた漏れに誰か教えてクレイ。
361nobodyさん:03/03/26 01:04 ID:???
362nobodyさん:03/03/26 18:48 ID:+smbNkro
複数のファイルの値をひらいて
1回の起動で1ファイルに1回その値をINSERT INTOで
データベースに流し込んで
それを複数回繰り返しているPHPがあるんだけど
なんかメモリが急に100%になってすまう?
363nobodyさん:03/03/27 13:31 ID:???
>>362
メモリが100%になるってなんだよ。今まで半分しか使ってなかった
メモリがやっと100%使えるようになったって意味か?よかったな。

で、その100%って何を見て確認したの?
364362:03/03/28 11:54 ID:PjWv+k5d
>で、その100%って何を見て確認したの?
phpsysinfoってPHPなんすけど。見やすいのでコレで確認すてます。
http://phpsysinfo.sourceforge.net/
ひどくなってくるとスワップまで食い尽くしてメモリオーバーになっちゃう。
しょうがないのでリブート(まだローカルのテストなんでいいけど・・)。
なんか違う方法を考えよう。
CSVのデータを大量にDBに追加する時って何でやってますか?。皆様は?
365362:03/03/28 12:08 ID:???
ああ。COPYですればいいかぁ。
でも、COPYだと一度ファイルに落とさなきゃならないかぁ。
ブツブツ独り言でし。sage
366nobodyさん:03/03/28 15:33 ID:???
>>365
何が問題なんだかよくわからんが、とりあえずLinuxなら
http://www.math.kobe-u.ac.jp/~kodama/tips-free-memory.html
でも見れ。
367362:03/03/28 16:41 ID:???
>>366
おお、すばらすいページだ。こんなん探してますた。
サンクスでし。
なるほどぉ、LINUXのメモリ管理ってのはこうなってたのか。
勉強になりますた。
368nobodyさん:03/04/16 18:58 ID:0S8YCSoo
PHP4+PostgreSQLで、新しくWEBを作る時、
最近ではPEARとPHPlibはどっちがお勧めでしょう?

気分的には新しいPHP4標準?のPEARがいいような
気がするんだけど、PHPlibの方がなんとなく使い勝手が
よいような気がするんですが・・・。

それと、どちらも詳しいリファレンスが乗ってる書籍とか
あったら教えてください。
369nobodyさん:03/04/16 21:12 ID:RoExleB5
6.xインスコしてある鯖使ったんだけど、
「JOINはまだ実装されていません」と言われてがーん
最新版にアップデートしたら、
「datetimeって型はありません」
といわれ、コードをすべて書き直した。
あーめんどくさ
370nobodyさん:03/04/17 01:15 ID:???
>>368
最近はPEARしか使ってないなぁ
ところでphplibってまだメンテされてるの?
371368:03/04/17 09:56 ID:???
>370
PHPlibはここに↓2003年1月13日のバージョンがあるようです。
https://sourceforge.net/projects/phplib/
メンテされてるかは不明・・・。

手元にある「PHP×PostgreSQLで作る最強Webシステム」
(2003年1月9日初版:石井達夫著)の本には、

 PEARは発展中のシステムで、ドキュメントもまだまだ整備が必要
 (logout(),listUser()・・・などの関数はその存在すら記載されてない)

と書いてあるんです。PHPlibのマニュアルよりは読みやすいですけど。

PHP5がでるかもしれないっていうときに、PHP3の物を使い始めるっていうのも
どうかと思うが、PHPlibの方が当面は使い勝手がよいなら、こっちの選択も
アリかな、、、と迷ってる次第です。。。

それぞれ使ってる方の意見なぞ、きけるとうれしいです。
372山崎渉:03/04/17 11:57 ID:???
(^^)
373nobodyさん:03/04/17 23:31 ID:38lUA/N9
php_pgsql.dll下さい。
何処に落ちてますか。
374373:03/04/17 23:37 ID:???
やっぱり今のは無かったことに。
375佐々木健介:03/04/18 00:19 ID:???
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (5      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < こんなサイトを見つけた
|| | | |  \ ┃  ┃/    \  正直、スマンカッタ
| || | |    ̄         \_________
http://freeweb2.kakiko.com/mona/
376動画直リン:03/04/18 00:26 ID:s9K3wIjP
377nobodyさん:03/04/19 16:04 ID:???
あのさ、例えば従業員の名前やら住所やらが入ってる
データベースをブラウザから管理出来るようなシステム
をPostgresQL + PHPで作るとしますよね。

従業員の数が多い場合は複数のページに分割して表示
するような形になると思うけど、例えば従業員が82人
いて、1ページに10人ずつ表示するとすると、メイン
ページに[1ページ目][2ページ目]..[9ページ目]みたい
なリンクを表示させます。で、この[9ページ目]までと
いうのを計算するのに普通はどういう処理をするので
しょうか?

自分はわざわざ
$sql = "SELECT * FROM hoge;
$rec = pg_query($conn,$sql);
$line = pg_num_rows($rec);
としてるんですが、なんだか非効率な気がします。。


378nobodyさん:03/04/19 16:17 ID:???
LIMIT と OFFSET を使う。
379nobodyさん:03/04/19 16:48 ID:???
>>378
各ページを表示させるときはそうなんですけど、全件数が分からないと
各ページへのリンクを表示させるところでどう処理すればいいのかな
と思ったんです。
380gn355my0:03/04/19 17:58 ID:???
count()
381名無しさん@Emacs:03/04/19 19:09 ID:???
>379
100件表示するページなら、LIMIT 101とする。

100件(以下)が返ってきたら次のページは無い。
101件返ってきたら次のページに続く。

当然、表示するのは100件までよ。
382名無しさん@Emacs:03/04/19 19:10 ID:???
ちなみに、全件数を知りたいなら、INSERTやDELETEにトリガを仕込んで
カウンタを別に持つ方が無難。更新の少ないシステムならね。
383nobodyさん:03/04/19 22:19 ID:3QKaD4h9
timestamp型をepoch秒で返す関数ってありませんか?
384山崎渉:03/04/20 05:58 ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
385nobodyさん:03/04/20 07:17 ID:JR0rvjcu
このスレ今日はじめて見ましたが、実務経験豊富な方が
大勢住んでいらっしゃるようですね。

スレ違いかもしれませんが、PHP+PostgreSQLのシステム
なので質問させてください。

100画面程度の業務WEBアプリを作ろうとしています。
私がDBと画面仕様を書いて業者2人にPHPで
コーディングを担当してもらう予定です。

そこで質問ですが、WEBアプリの画面設計仕様書には、
どんな項目を書くべきでしょうか?
画面に表示する項目はもちろんですが、POSTやGETで渡される
パラメータ、デザイナに引き渡すテンプレート変数、画面間で
引き渡すセッション変数、それらをアンレジストするタイミング、
などなど、どのように仕様書にまとめたらいいのでしょう?

386名無しさん@Emacs:03/04/20 12:54 ID:???
>377
それから、カウントするために

SELECT * FROM hoge;

すると、すべてのカラムが返されてくるので非効率的(ネットワーク的にも)。
数を数えるなら、どこかひとつのカラムだけにするか、

SELECT COUNT(*) FROM hoge;

として、バックエンドに数えさせるべき。
387nobodyさん:03/04/20 15:04 ID:???
>>386
レスサンクスです。とりあえずその方法に変更しておきました。
>>382
の方法ってのは、カウンタ用のテーブルを作成しておいて
他のテーブルが更新された時にそのカウンタを更新するよう
にトリガを仕込むってことですよね?更新頻度が多いと>>386
のほうが効率よいですか?
388nobodyさん:03/04/20 15:34 ID:???
>>387
自己レスですけどUPDATEは頻繁に行われるがINSERTと
DELETEはあまりないので、トリガ仕込んでみようと
思います。
389nobodyさん:03/04/20 23:37 ID:xyBrUgxr
Win2000proでPostgreSQLのインストール設定を誰か教えてください。

いまのところ、Cygwinをインストールし、Postgresql・cygipcを解凍した
とこまでしかできません。そのあとの設定がうまくいかず困っています。

usr/local/src/postgresql-7.3の
./configureコマンド入力後、

checking build system type... i686-pc-cygwin
checking host system type... i686-pc-cygwin
checking which template to use... win
checking whether to build with 64-bit integer date/time support... no
checking whether to build with recode support... no
checking whether NLS is wanted... no
checking for default port number... 5432
checking for default soft limit on number of connections... 32
checking for gcc... no
checking for cc... no
configure: error: no acceptable C compiler found in $PATH
と表示されます。ここからがわかりません。
どうか教えてください。

390_:03/04/20 23:38 ID:???
391nobodyさん:03/04/20 23:48 ID:???
configure: error: no acceptable C compiler found in $PATH
エラーの内容が分かんないようだと、Win nativeなヤツを使うほうがいいかと。
392nobodyさん:03/04/23 10:59 ID:???
全件数をカウントする関数を作りたいんですけど、
今 employee1,employee2 というテーブルがあります。
次に counter というテーブルを作成して、そこに
employee1,employee2という列を定義し、ここに全件数
をカウントした数字を入力したいと思ってます。

CREATE FUNCTION count_table(text) RETURNS integer AS '
DECLARE
counters integer;
BEGIN
counters := SELECT COUNT(*) FROM $1;
UPDATE counter SET $1 = counters;
return counter;
END;
' LANGUAGE 'plpgsql';

というふうに関数を定義して、select count_table('employee1')
を実行すると
ERROR: parser: parse error at or near "SELECT" at character 9
と怒られます。どう修正したらよいでしょうか?
393ななし:03/04/23 19:12 ID:???
>392
SELECT INTO
394nobodyさん:03/04/24 09:51 ID:???
>>393
SELECT INTO counters COUNT(*) FROM $1;
でいけますた。ありがとう。
395nobodyさん:03/04/24 10:45 ID:???
CREATE TABLE temp(
id text,
name text);

CREATE TABLE temp_counter(
temp integer);

CREATE FUNCTION temp_counter() RETURNS OPAQUE AS '
DECLARE
counters integer;
BEGIN
SELECT INTO counters COUNT(*) FROM TG_ARGV[0];
UPDATE temp_counter SET TG_ARGV[0] = counters;
END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER temp_trigger
AFTER INSERT OR DELETE
ON temp
FOR EACH ROW
EXECUTE PROCEDURE temp_counter('temp');

INSERT INTO temp VALUES ('hoge','moga');
とすると
WARNING: Error occurred while executing PL/pgSQL function temp_counter
WARNING: line 4 at select into variables
ERROR: parser: parse error at or near "$1" at character 24
というエラーが出てしまうんですが。。なんでですか?
質問ばっかですみません。
396しろ:03/04/24 17:40 ID:???
テーブル名指定したいなら、引数じゃなくてTG_RELNAMEが使えると思うけど?
TG_RELNAMEはname型だけどね。

それと気になるのがtempというテーブル名。

何がやりたいのかよくわからないが、tempは一時テーブルの名前なんだけど
わかってますか?セッションが終わると自動的に削除されちゃうけどいいの?

マニュアル読んだほうがいいよ?ここ↓
http://www.postgresql.jp/document/pg721doc/index.html
functionはここ↓
http://www.postgresql.jp/document/pg721doc/programmer/plpgsql.html
結構判りやすいと思うんだけど・・・。
397しろ:03/04/24 17:41 ID:???
396は395のレスです。スマソ
398nobodyさん:03/04/24 20:13 ID:???
>>396
マニュアルは一通り目を通しました。あとtempというテーブル名
は例にあげただけで実際は違う名前です。まぎらわしくてすみま
せん。関数の部分を下記のように変更しました。

SELECT INTO counters COUNT(*) FROM TG_RELNAME;
UPDATE temp_counter SET TG_RELNAME = counters;

でもやはり insert するときに
WARNING: Error occurred while executing PL/pgSQL function temp_counter
WARNING: line 4 at select into variables
ERROR: parser: parse error at or near "$1" at character 24
というエラーが出てしまいます。そもそも"$1"なんて使ってない
んですが。。
399しろ:03/04/25 11:17 ID:???
>398
> あとtempというテーブル名は例にあげただけで実際は違う名前です。
> まぎらわしくてすみません。

という事は、name,とかidとかいったフィールド名も使ってないわけですか?
ホントに紛らわしいです・・・。

> マニュアルは一通り目を通しました。
・・・
> そもそも"$1"なんて使ってないんですが。。

もう一度じっくり読んだほうがいいと思います。

$1については下記に書いてあります↓
http://www.postgresql.jp/document/pg721doc/programmer/plpgsql-declarations.html
要するにトリガで指定している引数の部分を指してると思います。

トリガファンクションについても、もう一度よく読んだほうが良いです。
RETURN とか EXECUTE とか。

もう一つ、これは別の方法ですが、SELECT INTO使わなくても、
カウント数はサブクエリを使えば一つのクエリで済むと思います。
 例:UPDATE テーブル名 SET 列名 = (SELECT COUNT(*) FROM テーブル名);

では頑張ってください。
400nobodyさん:03/04/25 22:48 ID:???
>>399
レスどうもです。あと一歩というとこまでなんとかこぎつけました。
CREATE TRIGGER my_trigger
AFTER INSERT OR DELETE
ON my_table
FOR EACH ROW
EXECUTE PROCEDURE my_counter();

CREATE FUNCTION my_counter() RETURNS OPAQUE AS '
BEGIN
UPDATE my_counter_table SET my_table = (SELECT COUNT(*) FROM my_table);
RETURN NULL;
END;
' LANGUAGE 'plpgsql';

とすることで成功しました。
で、本当にやりたいことなんですが
401nobodyさん:03/04/25 22:56 ID:???
my_counter_tableというテーブルで複数のテーブルの全件数を
管理したいのです。たとえば'hoge','moga','2ch'というテーブル
の全件数を管理したい場合、my_counter_tableに'hoge','moga','2ch'
という列を定義して、そこに全件数を記録する感じです。
そのあと各テーブルにトリガを作成して同じ関数を呼び出します。
そのときに関数を
UPDATE my_counter_table SET TG_RELNAME = (SELECT COUNT(*) FROM TG_RELNAME);
のようにすれば1つの関数を定義するだけで済むかなと思った
んです。でも上記のようにするとINSERTを実行する時に
ERROR: parser: parse error at or near "$1" at character 26
というエラーが出てしまうのです。トリガを
EXECUTE PROCEDURE my_counter('hoge');
のように定義して、関数を
UPDATE my_counter_table SET TG_ARGV[0] = (SELECT COUNT(*) FROM TG_ARGV[0]);
としても同じエラーが出ます。こういうふうには使えないの?
402nobodyさん:03/04/26 00:58 ID:???
動的問い合わせには EXECUTE を使え。
いま環境ないからてきとうだけど、

EXECUTE ''UPDATE my_counter_table SET ''
|| quote_ident(TG_RELNAME)
|| ''=(SELECT COUNT(*) FROM ''
|| quote_ident(TG_RELNAME)

でどうよ。

ttp://www.postgresql.jp/document/pg721doc/programmer/plpgsql-statements.html
23.5.4. 動的問い合わせの実行

も見れ。
403nobodyさん:03/04/26 12:05 ID:???
>>402
CREATE FUNCTION temp_counter() RETURNS OPAQUE AS '
BEGIN
EXECUTE ''UPDATE my_counter_table SET ''
|| quote_ident(TG_RELNAME)
|| ''=(SELECT COUNT(*) FROM ''
|| quote_ident(TG_RELNAME)''
|| '';
RETURN NULL;
END;
' LANGUAGE 'plpgsql';
こうしてみたんですが
parser: parse error at or near "'
|| '" at character 110
というエラーが出ます。
シングルクォーテーションは '' で表す。
テーブル名や列名は quote_ident 関数に通さないといけない。
ということなので上記の文は
UPDATE my_counter_table SET 'hoge' = (SELECT COUNT(*) FROM 'hoge'
という文字列を実行するってことですよね?
||の意味がよく分からないので、そこに問題がある
気がします。ドキュメントを読んでもダメでした。
||はどういう意味なんですか?
404nobodyさん:03/04/26 18:37 ID:???
>>395
「業者2人」がたいへんそうですね
405402:03/04/27 21:51 ID:???
>>403
最後のほうが微妙にちがうかも?

CREATE FUNCTION temp_counter() RETURNS OPAQUE AS '
BEGIN
EXECUTE ''UPDATE my_counter_table SET ''
|| quote_ident(TG_RELNAME)
|| ''=(SELECT COUNT(*) FROM ''
|| quote_ident(TG_RELNAME)
|| '')'';
RETURN NULL;
END;
' LANGUAGE 'plpgsql';

|| は文字列の結合です。
406nobodyさん:03/04/27 23:08 ID:???
>>405
上手くいきますた!
長年の夢が叶った感じです。どうもありがとう。
407nobodyさん:03/04/29 11:51 ID:???
ttp://itb-tech.itboost.co.jp/php/php_12.php
PostgreSQLでセッション変数管理したいな
と思ってたんですけど、ここ見たらmysql
の方がいいかなと思ってしまいました。
みなさんはどうしてます?
408nobodyさん:03/04/29 13:04 ID:???
>>407
対象pgsqlのバージョンが古そうだな。今は稼動しながらvacuumできる。
ま、セッション管理のためだけなら、軽いと言われるMysqlの方がいいかもね。
409nobodyさん:03/04/29 16:42 ID:???
>>408
今はPostgreSQLだけ導入しててセッション管理は/tmpでしてます。
セッション管理のためだけにmysql導入するの躊躇してましたが
稼働しながらvacuum出来るならちょっと試してみます。レスどうも
です。
410nobodyさん:03/05/07 16:15 ID:o2l25maR
文字コードに関連して教えて下さい。
レンタルサーバー上で動くPHP+PostgreSQLのプログラムを書く際、
Windows上のEditorは何が便利でしょうか?
その文字コードは、EUCで書いておけば問題無いでしょうか。
秀丸やWZだとソースの読み込み時に一々EUCを選択しないと
いけないのですが、使い方がおかしいでしょうか。

あと、参考書を見ると
mbstring.http_input
mbstring.http_output
の設定等が書いて有りますが、レンタルサーバーを使う場合は
特に気にせずEUCで書いておけば、httpでのやりとりやブラウザ表示
は特に問題は起きないと思えば良いですか?

取りあえず簡単にレンタルサーバーからPHP+Postgreで文字を
書き出して、IEで見たところ正しく表示されてるようでした。
411しろ:03/05/07 16:30 ID:???
>410
秀丸とPeggy Proつかってまつ。

> 秀丸やWZだとソースの読み込み時に一々EUCを選択しないと
> いけないのですが、使い方がおかしいでしょうか。

自分もこれ面倒だったんで、以下のようにしました。

PHPファイルの関連付けの設定で
OPENの「アクションを実行するアプリケーション」の箇所に
/fe
を入れてやると、PHPファイルだったらEUCで開くようになります。
 ex.C:\Hidemaru\Hidemaru.exe /fe %1

他にももっとマシなやりかたあるかもしれないけど。
412nobodyさん:03/05/07 17:04 ID:???
「その他」「動作環境」「編集」「文字コードの自動認識をする」「詳細」
413410:03/05/07 19:15 ID:o2l25maR
>>411,>>412さん、ありがとうございます。
なるほど、出来ました。
それから、Peggy Proってのを探して使ってみました。
これいいですね。411さんはどっちを使ってますか?
414nobodyさん:03/05/07 19:34 ID:n2ggMpEP
どうすりゃいいの?
      /        /       |    ヽ           \
 ∧ ∧/         /      |     ヽ          ∧\∧
( / ⌒ヽ        /         |       ヽ         ( / ⌒ヽ
 | |   |         /         |      ヽ           | |   |
 ∪ / ノ         /        |        ヽ         ∪ / ノ
  | ||   ミ    /            |           ヽ       / / /
  ヽ_)_)     ∧/∧         |        ∧ヽ∧  彡  しl_ノ
        ( / ⌒ヽ        |        ( / ⌒ヽ
         | |   |  ミ   ∧ |∧  彡    | |   |
         ∪ / ノ     ( / ⌒ヽ        ∪ / ノ
          | ||        | |   |         / / /
          ヽ_)_)      ∪ / ノ        しl_ノ
                   | ||
                   ∪∪
日本ロジテム(一部上場、みずほの融資先)の
子会社せいも素(みずほの融資先)でサービス残業の過労による自殺者が出た。
http://www.samos.co.jp
http://society.2ch.net/test/read.cgi/traf/1046749189/l50
http://tmp.2ch.net/test/read.cgi/company/1046775680/l50
415しろ:03/05/07 19:44 ID:???
>413
「どっち」とは??
使っているのは「秀丸とPeggy Pro」です。

秀丸と、Peggy Proは適当に使い分けしてて、大体両方起動してます。
Peggy Proか、Peggyかきいてるなら、使ってるのはPeggy Proです。

Peggy Proはシェアだけど、他の色んな言語に対応してるし、
高機能なので結構重宝してまつ。
416nobodyさん:03/05/07 19:48 ID:JylB+nG2
●貴方に代って恨み晴らします● 【復讐・特殊業務】
--------●○●別れさせ屋●復讐代行業務●○●----------
●騙された・裏切られた・弄ばれた・逃げられた・捨てられた・
相手に誠意が無い・異性問題・家庭内暴力・不倫疑惑解明・人間関係・金銭トラブル★ http://www.blacklist.jp/i
別離工作・情報収集・トラブル対策・ボディガ―ド・等々!
●真剣にお悩みの方、安心してご相談下さい。解決へ導きます★
□■各種データ・電話番号調査・住民票・戸籍謄本など調査■□
   http://www.blacklist.jp/i
【注意】ジャンプしない場合はURLをコピーしてファイルから開いて下さい●○● http://www.blacklist.jp/
--------------------------
◆リンク◆復讐現場密着24時◆ http://www.123456789.jp/
417413:03/05/07 23:41 ID:???
>>415しろさん、遅レスすみません。
Peggy Proが便利そうなんで、PHPソース書きなら秀丸の出番が
無いかなと思ったもので、、、、聞いてみました。
418nobody:03/05/08 04:11 ID:NOzEFrdh
PostgreSQLを使ってみようかと思っています。Webで少しだけかじってみたの
ですが、Apache+PHPと一緒に利用する際は、Apacheのインストール>Postgre
のインストール>PHPのインストール(configureするときにPostgreを明示)
としますよね。

ApacheがSuexec付きのnobodyで動いています。(--suexec-docroot=/home 付
きでconfigure)
/home/hoge以下をhoge.comで運用する、といった場合Postgreを走らせるユー
ザーをhogeとして
# chown -R hoge /usr/local/pgsql/
して
# /usr/local/pgsql/bin/createuser --createdb --no-adduser nobody
とすればいいのでしょうか?それともPostgreを走らせるユーザーはpostgre等として別に作るべきでしょうか。
apacheのユーザーとPostgreのユーザーの関係がどうもわからないのです。

また、この辺りの基礎が分かってApacheのことも書いてあるお勧めの本がありましたら是非教えて下さい。
419動画直リン:03/05/08 05:10 ID:R/vnapw0
420しろ:03/05/08 10:24 ID:???
>417
Peggy Pro一本でも全然問題ないと思いますよ。好みの問題ですね。
自分は単に秀丸にマクロ入れてるのがあるので
それ使う時だけ秀丸使ったりとかです。

>418
PostgreSQLの管理用のユーザは別に必要。

Windows用だけど
 「はじめてのPostgreSQLプログラミング」
判りやすかったです。それとか、
 「PHP×PostgreSQLで作る最強Webシステム」
こちらの方が少しレベルが上かも知れませんが
とても参考になりました。

あとは「PHP4徹底攻略」あたりかな。
赤マンモスの方はPDFにもなってる↓
http://www.net-newbie.com/support/
421418:03/05/09 18:21 ID:STzTzCJD
>>420
早速本屋に逝ってきました。参考になりますね。
また分からないことがあればお世話になるかもしれません。
その時はよろしくです。ありがとうございました。
422nobodyさん:03/05/11 01:35 ID:6HQj9LIx
従業員の名前、住所、メールアドレス、電話番号をDBで
管理していて、普段はメールアドレスの検索が主な操作
な状況です。こんな場合、メールアドレスだけ別テーブル
に保存して検索するのと SELECT mail FROM hoge みたい
に検索するのってどっちが効率いいんですか?
423nobodyさん:03/05/11 01:36 ID:???
えーと、indexを貼るのもよろしいかと。
424nobodyさん:03/05/11 02:21 ID:???
>>423
CREATE INDEX ってやつですか?
425nobodyさん:03/05/11 02:27 ID:???
従業員の管理ったってそんなに大人数でもないだろうに

ポスグレでも20万件程度までならサクサク動くから
426nobodyさん:03/05/11 03:59 ID:???
小規模なとこで働いてる限りあんまり
チューニングってのは考えなくていい
んですかね。やっぱり。
427nobodyさん:03/05/11 04:14 ID:???
>426
Accessでどうのこうのといったレベルなら。
小規模でもオンラインゲームのマップ情報とかDBに載せてたりすると
チューニングが肝です。
428nobodyさん:03/05/12 06:11 ID:???
postgresもObjectBrowser
みたいなもんがないのかねー
429nobodyさん:03/05/12 11:45 ID:???
これじゃダメ?

http://www.hi-ho.ne.jp/tsumiki/
430nobodyさん:03/05/12 15:41 ID:???
7.2.3でDBのエンコーディングをEUC_JPにしてスキーマをつくって、
JDBCからアクセスするアプリをつくってみたんですが、〜とかマルイチなどの
文字が化けてしまうんですよね。。どうにかなりませんか?
ポスグレはShift_JISエンコーディングはサポートしていない??
431428:03/05/13 14:33 ID:???
>>429さん
ありがとうございました。
なんなものがあったなんて知らなかったよ


432nobodyさん:03/05/15 11:09 ID:LGr+4aCV
>>429
ここのページのDB利用実態調査が面白い。
特に、MyとPostへのLOVE度、ワラタ。
433bloom:03/05/15 11:10 ID:fs87NLJj
434nobodyさん:03/05/16 03:28 ID:3cK7BkGM
$sql = "SELECT passwd FROM customer_auth WHERE login = '".$login."'";
このSQL文を実行すると条件に1つもマッチしない場合エラーになりますよね。
@$rec = pg_query($conn,$sql);
if (!$rec){
exit("そのようなユーザーは存在しません。もう一度確認して下さい。");
}
としても $recがTRUEになってるみたいで上手くエラー処理をしてくれません。
何かよい方法ないでしょうか。
435nobodyさん:03/05/16 03:36 ID:???
>>434
エラーにはならんだろう。
if(!pg_num_rows($rec)){...
でどうよ。
436nobodyさん:03/05/16 10:24 ID:???
あ、なるほど。データがなくても別にエラーにはならない
訳ですね。それで上手くいきました。ありがとう。
437田中:03/05/16 12:32 ID:shMd76bE
先ずはココを見てください!
本当に、すごいです。
http://www.c-gmf.com/h16002.htm
438山崎渉:03/05/22 02:02 ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
439山崎渉:03/05/28 17:19 ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
440nobodyさん:03/06/03 17:33 ID:AuMlkjoB
・・・
$deldata = "IN (" . implode($_POST['del'],",") .")";
PHPlibを使ってPostgreSQLのデータを削除するものを作っています。
以下のような感じに書いて削除はできるのですが
-------------
・・・
$deldata = "IN (" . implode($_POST['del'],",") .")";
$del_query = "DELETE FROM vf_employee WHERE emp_id ".$deldata;

# データ削除
@$del_data_set = $db->query($del_query);
print(pg_affected_rows($del_data_set)); //-->ここ
・・・
-------------
削除した件数1件あっても、 pg_affected_rowsが0になってしまいます。
ちょうど、>435と同じように、件数のチェックをして
エラーチェックをしたいのですが、削除の場合の件数は
取得できないのでしょうか?

何か間違ってるでしょうか。。
441440:03/06/03 17:34 ID:???
>440 の2行目まではコピペのミスです、スミマセン;
442 :03/06/16 11:17 ID:???
最近の PostgreSQL って pg_atoi() のチェック厳しくなりましたよね。
おかげで

$SQL = "UPDATE table SET seq = '$seq'";

で $seq が空の場合にエラーになるようになってしまいました。

というか他所の会社が作ったシステムのメンテを引き受けたのですが、
恐らく register_globals = on の状態を想定していて、
$seq があってもなくても通るようにと考えたんではないかと思います。

↑のようなパターンが随所にあって、
手動での修正はかなり厳しいものがあります。
何かいい方法はないでしょうか?
443nobodyさん:03/06/19 00:43 ID:???
MySQLとPostgreSQLの違いって何ですか〜
初心者で御免
444nobodyさん:03/06/24 11:30 ID:s+ewonQw
レンタルサーバーでPHP+Postgre使ってます。(WebProg経験浅いです)

データベースのテーブルデータをフォルダに移したいのですが
select * from テーブル名 into outfile '/usr/home/xxxx/ファイル名'
と言うsql文は普通に使えるはずでしょうか?
どうしてもparse error at or near "into"が出ます。
単純なミスでしょうか。よろしくお願いします。
445nobodyさん:03/06/24 12:22 ID:???
446444:03/06/24 13:02 ID:???
>>445どうもです。
ひぇ〜、読んではみたのですが、、、よく分かりませんです。
PostgreSQLとMySQLで使えるSQL文は結構違うのでしょうか?
取りあえず私が検索した範囲ではselect * into outfileで使っているのは
MySQLの方でした。
他の方法でも良いのですがテーブルデータをフォルダに書き出すには
どうすれば良いでしょうか?重ねてよろしく。
447nobodyさん:03/06/24 14:18 ID:???
448444:03/06/24 15:00 ID:???
>>447何度もすみません。
どこかのQ&Aにもレンタルサーバーでは普通無理と書いて有ったのですが
実際COPYを使ってみると
You must have Postgres superuser privilege・・・
と出てしまいます。

本当に何度もすみませんが、
postgreではselect into outfileは使えない(?)。
COPYはそれなりの権限が無いと使えない。
と言うことでしょうか、、、
449nobodyさん:03/06/24 15:58 ID:???
>>448
COPY table TO stdout ...
450444:03/06/24 17:49 ID:???
>>449
すみません、かなり調べたつもりなのですが、、、
stdoutへ出力されたデータはどこに有るのでしょうか。

そこを何とかもう一度お願いします(汗;
451名無しさん@Emacs:03/06/24 19:06 ID:???
つか、ファイルに出力するなら、

COPY table TO '/tmp/file.txt';

だろ。
452444:03/06/24 19:11 ID:???
>>451さん、どうも。
448にも書きましたが、(詳しく書くと)
ERROR: You must have Postgres superuser privilege to do a COPY directly
to or from a file. Anyone can COPY to stdout or from stdin.
Psql's \copy command also works for anyone.
と出ます。
確かにstdoutを使えと書いてるようですが、使い方が分からなくて、、、
453nobodyさん:03/06/24 19:19 ID:???
phpPgAdminでダンプ表示させたのをコピペはだめ?
454444:03/06/24 19:32 ID:???
>>453さん、どうも。
phpPgAdmin、ちょっと調べてみましたが、これが用意されてるところでしか
使えないのですよね??
私の使ってるレンタルサーバーにも簡単なGUIツールが有りますがダンプは
できません。
また、プログラムで自動実行したいので、かえってGUIは不便なんです。
455451:03/06/24 21:06 ID:???
>452
PostgreSQLのSQLコマンドであるところの COPY コマンドと
psqlコマンドで使う \copy コマンドは別モノでつ。
COPYコマンドはバックエンドサイドでファイルに落としまつ。
\copyコマンドは、クライアントサイドでファイルに落としまつ。

COPYコマンドは言われている通り、バックエンドのsuperuser権限が
必要ですが、\copy コマンドでは必要ありません。psqlで

\h copy

と、

\?

とすると、それぞれの説明が出まつ。

結論としては「\copyを使え」ってことで。
456444:03/06/24 23:28 ID:???
>>455さん、どうも。
なんとなくしか分かってないのですが、私の使ってるレンタルサーバー
では「psqlは使えません」とのことでした。
皆さん色々と教えて頂きありがとうございます。
もう少し勉強して出直します。
457名無しさん@Emacs:03/06/25 01:48 ID:???
>454
多分、CGIみたいにブラウザに表示させることにして、
テキストベースのブラウザ(w3mとかlynx)使ってファイルに落とすのが一番早い。

と思う。結論として。
458444:03/06/25 10:07 ID:???
>>457さん、どうも。
なるほど「泥臭いけど何か問題ある?」と言うような方法ですね。
奥の手に取っておきます。
459nobodyさん:03/06/26 09:56 ID:???
>>458
ファイルの書き込み権限があれば以下の方法が使えるかも?です
例えば、CGIをテストするためにスクリプトとかを転送
できてるのであれば、fopen の"w"でファイルに書けます
#!/usr/local/bin/php -q
<?php
include("dbconnect.inc");

 $db = new DbConnect();
 $keyword = "php";
 $file = $keyword . ".txt";

 if(!($o = fopen($file, "w"))) {
  print "$file open 失敗\n";
  exit(1);
 }

 $sql = sprintf("SELECT name FROM t WHERE keyword='%s'", $keyword);
 $rs = $db->doQuery($sql);

 for($i=0; $i<pg_numrows($rs); $i++) {
  $str = sprintf("%s\n", pg_result($rs, $i, "name"));
  fwrite($o, $str);
 }
 fclose($o);
 $db->doClose();
?>
460458:03/06/28 11:12 ID:???
>>459さん、どうもです。
遅レスすみません。でも、できそうな気がします。
(まだ分かってないところも有りますが)やってみます。
ありがとうございました。
461nobodyさん:03/07/04 12:48 ID:Hr/HESMY
現行のPHPマニュアルに
> 同じconnection_string引数で2回 pg_connect()関数がコールされた場合、新規の接続 はオープンされません。
とありますが、実験してみるとまさにそのとおりの動作で困っています。

固有のDB接続がつくれないとトランザクションが破綻するかとおもうのですが、なにか勘違いしてますか?
462nobodyさん:03/07/04 14:13 ID:???
それ、pg_pconnect()の説明じゃない?うちのまぬあるが古いのかな。
それとトランザクションとは全く別次元の話。

おそらく トランザクションの意味を勘違いしていると思われ。
463461:03/07/04 15:01 ID:???
接続が共有だとトランザクションの合間に
他のPHPセッションからのクエリが割り込む可能性があるとおもうので<ここが勘違い?
問題ありということです。

ttp://www.php.net/manual/ja/function.pg-connect.php
マニュアルはここから読めるんですが、英語マニュアルでも同様でした。
464自己レス:03/07/10 18:21 ID:???
>>463
pg_connect(connection_string, PGSQL_CONNECT_FORCE_NEW);
で解決しました。
465nobodyさん:03/07/11 23:10 ID:P/TCYNuE
ポストグレスってクエリー実行に対する
エラーコードがないって本当ですか?

(しょうがないので)
今はpg_execの返り血がFALSEなら
pg_errormessageでエラー文字列を
とって、パターンマッチングして分岐、
みたいなキタねぇコードを書いてます。

チェックをプログラム側に持たせるか
DBの制約に持たせるかっていう設計
方向のレスも歓迎。
466nobodyさん:03/07/11 23:29 ID:???
> エラーコードがないって本当ですか?
本当でつ。
以上。
467nobodyさん:03/07/11 23:37 ID:???
>>466
ドモでつ。
468山崎 渉:03/07/15 11:07 ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
469nobodyさん:03/07/18 15:24 ID:???
Warning: pg_pconnect() unable to connect to PostgreSQL server: FATAL 1:
Sorry, too many clients already in

上記のエラーの対処の仕方を教えてください。
あんまり詳しくないので聞きたいことがあれば調べて書きます。
お願いします
470nobodyさん:03/07/18 15:49 ID:???
同時接続数を増やす。
471nobodyさん:03/07/18 15:59 ID:???
今postgresql.confを見たんですが
全部#でコメントアウトされてるみたいです(^^;
ちと調べて接続数を増やしてみます
472nobodyさん:03/07/27 01:15 ID:TsfwKHg5
ラージオブジェクトの格納、引出(表示)、削除、などのやり方について
詳しいサイトあったら教えて下さい。

自分なりに探したのは、
ttp://homepage2.nifty.com/~chairo/html/installation/webapp/webapp.html

ttp://www.geocities.co.jp/SiliconValley-Sunnyvale/2287/doc/funto13.html
↑ここくらいですが、削除のやり方とかのってないす。
473nobodyさん:03/07/27 15:37 ID:???
PHP+PostgreSQLで接続されているクライアントのDBデータを1分周期で更新するには
クライアントから定周期でサーバーへ更新要求を行わないとできないのでしょうか?
サーバーサイドだけでは無理でしょうか?
474nobodyさん:03/07/27 16:12 ID:???
>>473
クライアント以外のどこに更新用のデータがあるのかと小一分問い詰(ry
(言葉の定義は置いておいて、) サーバからクライアントにデータ要求のトリガーを起こさせたいってこと?
475nobodyさん:03/07/27 18:49 ID:0cmBAsiG
>>474
書き方が悪くてすいません。
やりたい事は有料サイトのポイント管理のような事で、接続されたクライアントの
ポイントを1分周期で減算させたいのです。
このような機能はやっぱりクライアントから定周期で更新要求をサーバーへ
リクエストしないと無理なんですかね?
タイマーや定周期処理みたいなものでPHPやPostgreSQLでできないですか?
476nobodyさん:03/07/28 00:28 ID:Jw2a8NaM
>>475
waitする関数作って(標準であったっけ?)、
1分毎に特定のフラグ立っているレコード(ログイン中みたいの?)を、
updateするplpgsqlを実行しておけばいいんじゃないの?

それか、
サーバーとクライアントをどういう意味で使ってるかわからないけど、
サーバーマシン上でcronで実行するのはどう?
477_:03/07/28 00:56 ID:???
478nobodyさん:03/07/28 16:03 ID:???
>>475
サービスの要求毎に今の時刻を記録するのを基本とし
A. 前回の時刻から1分未満なら記録しない。
B. 1分以上なら記録する。その時に1ポイント減らす。
こんなのは?
479山崎 渉:03/08/02 02:23 ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
480ぼるじょあ ◆ySd1dMH5Gk :03/08/02 04:52 ID:???
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ
481nobodyさん:03/08/11 14:14 ID:gq467PzP
PostgreSQL+PHPでBLOGとか掲示板作って
運営されたことのある人とかいます?

記事や、コメントはTEXTで格納してると思うんですが、
量が増えてきたときの負荷ってどんなもんですかね。
せっかくDB使ってるんで、検索とかもできるようにしてると思うのですが、
量が増えたときにTEXTから検索はやっぱ時間かかりますか?
482nobodyさん:03/08/11 15:40 ID:???
>>481
仕事でやってるのなら、
テキスト検索エンジンの業者に比較資料を出してもらうとか。
そこまでだったらタダだとおもうし。
483nobodyさん:03/08/11 15:42 ID:???
>>481
どういう検索をしようとしているのかわからないけど、
おそらく記事の検索なんだよね?
RDBはそういう検索には向かないと思うよ。
全文検索系のものを別に入れるのが普通だと思う。
484.:03/08/11 17:18 ID:???
>>481
うちは PHP + Postgres で記事を管理。
cron で定期的に html に書き出してそれを namazu に食わせて全文検索できるようにしてる。
MySQL の全文検索とかってどうなんだろう。今は特に案件が無いので調べてないけど。
485nobodyさん:03/08/11 17:47 ID:???
>MySQL の全文検索とかってどうなんだろう。

8万件のデータを検索させたら,中間一致検索で2秒ぐらい掛かってたのが
0.5秒切った。
486.:03/08/11 18:03 ID:???
>>485
おおっ。やっぱ MySQL だけあって速いのね。
日本語とか通るのかな。ちょっとぐぐってみるか。

JAVA Developer 2003年6月号より転載 MySQL4の全文検索に迫る
http://www.zdnet.co.jp/developer/0307/03/dvn01.html

日本語に対応させるには形態素解析ロジックを組み込まなきゃいけないみたいね。
ほほう、河馬屋二千年堂さんとかも、結構前からいろいろやってるんだ。さすが。

デフォルトで日本語対応になったら、一気に普及しそうな予感・・・。
487nobodyさん:03/08/11 18:16 ID:???
>>486
>河馬屋二千年堂さんとかも、結構前からいろいろやってる

あ、>>485はそれをPHP用に直してやってみた結果です。
488山崎 渉:03/08/15 22:37 ID:???
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
489nobodyさん:03/08/18 01:33 ID:???
age
490nobodyさん:03/08/19 11:31 ID:lIsPsTRV
num | str
-----------
1 | a
2 | b
4 | c
5 | b
3 | a
1 | c
3 | a
: :

こんなテーブルがあったとして、
・num>3の総数
・num>3 and str='a'の総数
の2つを1回のSQLで同時に取得できますでしょうか?
(SELECT count(*)を2回するよりも軽いSQLで)
491nobodyさん:03/08/19 12:01 ID:???
>>490
select count(*), count(case when str = 'a' then 1 else null end) from hogetbl where num > 3

早いかは知らん。
492490:03/08/19 12:47 ID:oCHs6Pb7
>>491
試してみましところ、微妙早いみたいです。
ありがとうございます。
493nobodyさん:03/09/22 06:55 ID:???
xreaでpostgresを使ってるんですが、
処理時間のかかるDB操作を行うと、
DBにアクセスしたまま、phpスクリプトだけタイムアウトして
終了するようです。
この場合、DBへの接続は残ったままになってしまうんでしょうか?
494nobodyさん:03/09/22 07:15 ID:???
というのは、現在、
Warning: pg_connect(): Unable to connect to PostgreSQL server: Sorry, too many clients already
となって全くDBに繋がらなくなってしまいまして、、、
DBがxreaにあるのでどうしたものかと。。。
495nobodyさん:03/09/22 07:22 ID:???
ゾンビのような接続が残っていたらどうしよう。
496nobodyさん:03/10/09 20:52 ID:lBy2Nsd4
MySQLで作られたサンプルコードをPostgreSQL対応のものを作ろうとしているのですが、
気をつけることありませんか?
497nobodyさん:03/10/10 13:54 ID:???
MacOSX 10.2.8なんですが、PHPのソースからのインストールでつまづいています。
ttp://www.entropy.ch/software/macosx/php/
当初は上記のサイトのPHPパッケージを使っていたのですが、これだとmbregexが有効になっていないので。
PHP-usersを調べてみるとPostgreSQLをソースからのインストールして成功した例があったので(元々ソースから入れていたんですが念のため)ここからやり直し。
make checkでエラーが出ましたが、それでもPostgreSQL 7.3.4はインストールできました。(readline 4.3をソースからインストール後)
しかしPHP 4.3.3のインストール段階でmake時に以下のエラー。

ld: unknown flag: -export-symbols
make: *** [libs/libphp4.bundle] Error 1

一応configureのオプションはこんな感じです。
./configure --with-pgsql=/usr/local/pgsql --with-apxs=/usr/sbin/apxs --without-mysql --enable-mbstr-enc-trans --enable-mbstring --enable-mbregex --enable-versioning --enable-trans-sid

どうしたものでしょうか。
498nobodyさん:03/10/10 14:13 ID:???
>>497
僕の環境(OSX 10.2.8, gcc3.3, Postgresはentropy.chのパッケージ)では
make の前に sudo ranlib /usr/local/pgsql/lib/libpq.a が必要だったのと(最初の一回だけでOK)
configure のオプションに --with-openssl=/usr を加えないといけませんでした。
あと、--with-apxs=/usr/sbin/apxs を指定したときも make でコケて、
--with-apxs だけ(パス指定なし)ではいけました。
参考になれば幸いです。
499nobodyさん:03/10/10 14:22 ID:???
おっと、pgは自前でコンパイルされてるんですね。
よく読んでませんでした、スマソ。
それなら --with-apxs の修正だけでOK...かな?
500nobodyさん:03/10/10 15:03 ID:???
>>498
sudo ranlib /usr/local/pgsql/lib/libpq.aの記述はここにもありましたね。
ttp://semicolon.jp/ussy/
で、configureのオプションで、--with-apxsだけ、--with-openssl=/usrを加えてやってみましたがまた同じエラーです。
再インストール時に特に気をつけなければいけない点などありますか?特定のファイルやディレクトリは必ずリネーム(or削除)しておかなければならない、とか。
前に入れたものが残っていて、そこで引っかかってるのかとも思いまして。
501 :03/10/10 16:42 ID:eMmbcoMO
PHP Nuke って PostgreSQl でも動くと思い込んでいたんだけど、
実は移植作業中?
http://phpnuke.org/
http://spiral303.com/php-nuke/
502 :03/10/10 17:06 ID:eMmbcoMO
F-Board 掲示板
http://www.php-j.com/scripts/bbs/fboard.php
おお、〜これは便利そうかも。インストールしてみよっと。
スレッドフロート型のほうがいいんだけど…
503 :03/10/15 14:57 ID:P4ZVyYvK
http://haitaka.com/keijiban/treebbs.cgi?log=227
dbEasy の作者ってなくなっておられたんですね。
ご冥福をお祈りします。
504nobodyさん:03/10/20 21:25 ID:waXYXRrl
telnetだとできるのに、なぜかPHP上からはinsert,delete等、
データをいじる実行文ができなくて困っています。(同一ユーザで)

[connect]→[insert]→すぐに同一スクリプト上で[select *]すると挿入できてるのに、
スクリプト終了後に確認してみると反映されていない。(エラーメッセージも出ない)

おかしいと思って、一度[insert]した後に明示的に[close]して、
[connect]し直してから[select *]すると、反映されていないことが分かりました。

接続がきれると変更点が元に戻ってしまうというのは、どういったところが
原因になっているのでしょうか?
505nobodyさん:03/10/20 21:35 ID:???
ろーるばっく は?
506504:03/10/20 23:08 ID:UOeO/1yp
>>505
スクリプトには書いてないんですが、
勝手にろーるばっくする現象とかあるんでしょうか?

507 :03/10/21 07:56 ID:cLTK9aL8
telnet でってことは psql でってこと?
同じユーザって本当?
PostgreSQL のログ見てみたら?
508nobodyさん:03/10/21 09:59 ID:???
もし BEGIN してたら、そのままCOMMIT or END しないで
closeしたらロールバックするかな
509nobodyさん:03/10/21 13:38 ID:???
>>507,508
508さんの指摘どおり、
BEGINして、ENDせずに終了していました。
すみません。
ありがとうございました。
510 :03/10/21 15:01 ID:cLTK9aL8
>>509 あいや〜漏れも同じミスをしそうだった。
人の振り見て我が振りなおせ、だなぁ…
511nobodyさん:03/10/21 22:08 ID:???
>>501
一応、各種DBで動くようになってるようなんだけど、
中身を見るとMySQLでしか動かない。

最近のバージョンは、postgresql用のSQLが少しまとも
になってたけど、まだ古い部分があるんで、、、
フォーラム以外はなんとかなるかと、、、

512(;´Д`) :03/11/02 19:07 ID:iBTmJlep
( ・ω・)∩
ちょっとしたクイズアプリケーションを作っています
クイズにはカテゴリがあり
そのカテゴリ毎に出題制限機能をつけたいと思います
DBのテーブルcategoryenabledには
categorynumber(1〜8までのカテゴリナンバー)
enabled(t or f)
のカラムがあります。

今思案しているのはUIにてカテゴリ名とチェックボックスを付け
その出題制限機能ページを開いた時にcategorynumber1〜8までの該当するenabledの値が
tだった場合に対応するカテゴリ名のチェックボックスにチェックが入るようにしたいです

次にsubmitボタンを押したときにそのチェックの有無に応じてカテゴリ名に対応する
categorynumberのenabled値に対して更新クエリーを発行したいのです
どなたか教えてください
⊂⌒~⊃。Д。)⊃
513nobodyさん:03/11/04 03:41 ID:???
pg_fetch_object でデータを取得したとき、
テーブル名.プロパティのデータを取得するにはどうしたらいいんでしょう?
たとえば、$obj->table.name とするとPHPの構文エラーが出ますよね?
514nobodyさん:03/11/04 03:41 ID:qRLV45gQ
 
515nobodyさん:03/11/04 11:24 ID:???
>>512
チェックボックスを全て同じ名前にして、配列で取り出し、
SQL文のWHERE区でOR でつなげばいいと思う

って、categoryenabled がどうなってんのかさっぱりわからんが
516nobodyさん:03/11/22 22:30 ID:J3MEwjgU
すいません。初心者なんですが、phpから、postgresへコネクト、できたら「接続できましたよ」と出したいんですが、
Fatal error: Call to undefined function: pg_connect() in /var/www/html/memberlist.php on line 8
上記エラーが出てしまいます。
このエラーは、PHPをrpmではなく、ソースからコンパイルしていれないとだめってこと、、
でしょうか。ちなみに、phpinfo()では、pgsql suportは出ていません。が、dbx、dba
というのは、あります。あと、configureのところに、 '--with-pgsql=shared' ともあります。
php.iniをいじれば良いんでしょうか。
517nobodyさん:03/11/23 00:09 ID:???
>>516
たとえば、php や libphp4.so を ldd で表示させてみて
libpq.so は表示されるかい?
518nobodyさん:03/11/23 00:23 ID:kTbiV7p7
>>517 下記コマンド実行。
ldd /usr/lib/httpd/modules/libphp4.so
ldd /home/(ユーザー名)/plugin/libphp4.so

ともに、libpg.soは表示されませんでした。
蛇足ですが、コンパイルがうまくいかなかった経緯があり、日経linux1月?付録のrpm(マルチバイト対応)で
今までやってました。postgresqlをやりたくなりいじりはじめた次第です。
519nobodyさん:03/11/23 00:34 ID:kTbiV7p7
>>517
ちなみに、findで調べたら、存在はしているみたいです。これを日も付けるような
作業をすればいいのでしょうか。
/usr/local/src/postgresql-7.3.2/src/interfaces/libpq/libpq.so
/usr/local/pgsql/lib/libpq.so
520nobodyさん:03/11/23 02:33 ID:???
>>518
PostgreSQLのライブラリはインストールされてて
phpにはリンクされてない状況かな
(よく考えたらphpコマンド使うなら、php -m でもよかったな)
phpをMakeするのがいいと思う。特にPHPはリンクしなおしが多いので
どっちにしろソースからやっといたほうがいいと思うよ
521nobodyさん:03/11/23 03:14 ID:kTbiV7p7
いつかは、やらねばと思ってましたが、ちょっと大変ですね。
がんばってみます。
522nobodyさん:03/11/23 03:16 ID:???
>>519
pgsqlはソースからいれたんか。それならrpmでいれたphpには無理でしょ。たとえサポートしていたとしても。
--with-pgsql=shared じゃなくて、--with-pgsql=/usr/local/pgsqlになっとらんといかんのとちゃいまっか?

>>520のいうように、phpをソースから入れなおしが近道なきもするが、どうせapache(?)もrpmから入れたんかな?
523nobodyさん:03/11/23 10:46 ID:kTbiV7p7
>522
そうです。apache&php=>rpm postgres=>tarでした。
コンパイルオプションが複雑に絡む場合は、関連するものすべてソースから
入れたほうがいい、、ということなんでしょうか。教訓として。
524nobodyさん:03/11/23 12:35 ID:???
関連するものはヘッダとライブラリがあればいいよ
ヘッダとライブラリだってrpmで提供されてる場合が多いし

コンパイルオプションやリンクするライブラリが
変わることが多い場合はソースのがいいとは思う

パッケージのディレクトリ構成を/usr/localに一本化
したかったり使い分けがめんどくさいと思ったら
ソースから入れるのがいいかもね。慣れるとどっちでも
同じ感覚でインストールできるよ
525nobodyさん:03/11/23 23:04 ID:???
>>523
/libにlibpq.so.*のリンクを作ってから、phpのrpmをインスコするとどうなるのだろう。
と、ふと思った。
526nobodyさん:03/11/24 09:18 ID:pzrePjyL
psqlではふつーにselectで引っ張ってこれるんだけれども、
PHPからデータとってこようとすると、そこで処理が停止してしまうんです。
PEAR_DBを使っていたんでそのせいかともおもって、
pg_*で書き直して試してもやっぱり同じ。

データの内容は300近いWebページのソースです。
9割くらいのページは正常にfetchしてこれるんですが、残り1割が固まります。

mb_convert_kana/encodingでEUC-JPにノーマライズしてから格納しているんですが・・・。
っていうか、UPDATEできるのにfetchできないってどういうことなんでしょう。
527nobodyさん:03/11/27 19:56 ID:HaCIHFLT
簡単なことかもしれないんですけど、postgresqlのカラムにdatetime型で
日付時刻が入ってまして、これをphpで「年/月/日/ 時:分」という形に
したいんですが、なんかそのものずばりの関数ってないでしょうか?
また、関数がない場合、こういう場合は普通どう処理するんでしょうか?
もし解説したWebページがあれば教えて下さい。
528nobodyさん:03/11/27 20:02 ID:???
>>527
解説したページ
http://www.php.net/manual/ja/function.date.php

SQLでやっちゃうのもいいよ。そっちのやりかたはPostgreSQL付属のドキュメントをみてね☆
529nobodyさん:03/11/28 01:13 ID:???
SELECT to_char(hoge_date, 'YYYY/MM/DD HH24:MI') FROM table;
530nobodyさん:03/11/28 01:44 ID:???
>>526
> UPDATEできるのにfetchできないってどういうことなんでしょう

selectをEXPLAINしてみたら?たぶんSeq Scanじゃないかな。
UPDATEはWHEREにINDEX使ってるだろうからIndex Scanになってるはず。

select文にand index > 0 とか追加してIndex Scanさせれば早くなってタイムアウトしないんじゃねーですかい?

例えて悪いけど
SELECT to_char(hoge_date, 'YYYY/MM/DD HH24:MI') FROM table;
hoge_dateにkeyがなければこれも遅いと思います。

id integer primary key があるとするなら、

SELECT to_char(hoge_date, 'YYYY/MM/DD HH24:MI') FROM table where id > 0;
とすればちったー早くなると思います。
531527:03/11/28 21:59 ID:UsQiFXqj
528さん、529さん、530さんレスどうもありがとうございます。
kterm上でSQLを
select to_char(uptime, 'YYYY/MM/DD HH24:MI') from table;
とすると、無事、2003/11/27 21:30 と出力されました。
ただ、私はphpのスクリプト中で取得したいのです。
たとえば、imageというテーブルに
id serial, uptime datetime,
というカラムがあるとして(実際のカラムはもっと多いです。)、
insert into image(uptime) values('now');
とデータを入れています。このテーブルから日付時刻を
$sql="select * from image";
$rs = pg_query($db, $sql);
while ($data = pg_fetch_array($rs)) {
print("<td>".$data['id']."</td>");
print("<td>".$data['uptime']."</td>");
}
略~ print("<td>".$data['id'].":".$data['uptime']."</td>");~略
として 表の中に出力したいのですが
そのへんをもう少し教えていただけないでしょうか?          
532nobodyさん:03/11/28 22:25 ID:???
>>531
$data['uptime'] = date("〜",$date['uptime']) とか、 --PHP date関数
select select to_char(uptime, '〜') as formatted_uptime from table とか。 -- SQL as句
533526:03/11/29 05:22 ID:3dfgxKEK
一応 EXPLAIN してみましたが、IndexScan であっさり。

で、いろいろ追ってみたのですが、
どうやらpostgresのヒープサイズをオーバーしてるせいみたいでした。
いろんなサイズのを試してみたら、ちょうど32kくらい以上だと、
同様の現象がでるようでした。

おそらく text 型にでかいの突っ込んでるからだとおもいます。
実質上限がないものだとばかり思ってたんで、がっくり。

ラージオブジェクトならうまくいくだろうか・・・。

にしても解せないのは、なんで psql ではできて、php からはできないのか。
7.1以前のまんまなのかなぁ。
534nobodyさん:03/11/29 15:10 ID:3wwIsq6W
すいません。データベースを作ろうとして、エラーが出てしまうのですが、
何か間違っていますでしょうか。
ユーザpostgres作成。dataというディレクトリを作成。オーナーをpostgresに。
そして、postgresになってから、initdbで作成。ここで躓きます。
#initdb -D /usr/local/pgsql/data
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale ja_JP.euc.

fixing permissions on existing directory /usr/local/pgsql/data... ok
creating directory /usr/local/pgsql/data/base... ok
creating directory /usr/local/pgsql/data/global... ok
creating directory /usr/local/pgsql/data/pg_xlog... ok
creating directory /usr/local/pgsql/data/pg_clog... ok
selecting default max_connections... 10
selecting default shared_buffers... 50
creating configuration files... ok
creating template1 database in /usr/local/pgsql/data/base/1... FATAL: XX000: f
ailed to initialize lc_messages to ""
LOCATION: InitializeGUCOptions, guc.c:1866

initdb: failed
535nobodyさん:03/11/29 19:01 ID:???
#ってことは、postgresになってないと思うのだが・・・
536nobodyさん:03/11/29 19:14 ID:3wwIsq6W
>535
534です。
すいません。postgresになっても、同じ名でした。
あと、そのエラーのあとに、同じコマンドを打つと、下記のようなエラーが出ます。

initdb: directory "/usr/local/pgsql/data" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/usr/local/pgsql/data" or run initdb with an argument other than
"/usr/local/pgsql/data".
537nobodyさん:03/11/29 19:29 ID:3wwIsq6W
以下のリンクにあるようにやったら、とりあえず作成だけはうまくいきました。
ttp://ml.postgresql.jp/pipermail/pgsql-jp/2003-November/006615.html
例)
$LANG=C initdb --encoding=EUC_JP --no-locale
$LANG=C pg_ctl start
でも、即行でデータベースがシャットダウンしてしまいます。
[postgres@linux data]$ LANG=C pg_ctl start
postmaster successfully started
[postgres@linux data]$ LOG: database system was shut down at 2003-11-29 19:16:3
3 JST
LOG: checkpoint record is at 0/9B0B8C
LOG: redo record is at 0/9B0B8C; undo record is at 0/0; shutdown TRUE
LOG: next transaction ID: 534; next OID: 17142
LOG: database system is ready
538nobodyさん:03/11/29 19:30 ID:???
すでにdataディレクトリがあるんでしょ。まず消すところから試してくれ
539nobodyさん:03/11/29 19:39 ID:3wwIsq6W
すいません。ちゃんとできました。落ち着いて、一個一個確かめてやったらできました。
空回りやローでゴメンゴ
540nobodyさん:03/12/01 19:27 ID:GUQR4nbL
すいません、テーブルの結合についておしえてください。
addres(id serial, name varchar(32), company_id int, sityouson_id int),
company(id serial, company_id int, company varchar(32)),
sityouson(id serial, todouhuken varchar(32), sityouson_id int, sityouson varchar(32))
という3つのテーブルがあり、
name, company, todouhuken, sityouson
というふうに取得したいのですが、どのようにするのがよいでしょうか?
例えば、
addres(id serial, name varchar(32), company_id int),
company(id serial, company_id int, company varchar(32)), から
name,companyとして取得するには
select addres.name, company.company where addres.company_id=company.company_id
でいいと思うんですが、tableが3つのときがわかりません。
select addres.name, company.company, sityouson.todouhuken,
sityouson.sityouson where addres.company_id=company.company_id and
addres.sityouson_id=sityouson.sityouson_id
とかでしょうか?
541nobodyさん:03/12/01 19:47 ID:YrMX5TT+
542nobodyさん:03/12/02 01:18 ID:Dm3L1AqD
phpの設置についてお伺いしたいのですが…。

php の実行を許可する.htaccess の記述は
どのようになるのでしょうか。

その設定の必要のないサーバで実行していたものを
今度設定が必要なサーバに移すことになりまして
教えていただけませんでしょうか。
543nobodyさん:03/12/02 01:26 ID:???
>>542
httpd.confと同じように、
AddType application/x-httpd-php .php
でいいよ。
<Directory>で囲った方が気持ちいいかな。

php.iniで設定するようなやつはマニュアルの「はじめに - 設定」を参照してみそ。
544nobodyさん:03/12/02 01:43 ID:Dm3L1AqD
>>543 さん
ありがとうございます。
早速やってみます。

545542・544:03/12/08 15:04 ID:bUzy6m4p
問題なく稼動中です。
ありがとうございました。
546nobodyさん:04/01/05 17:50 ID:ksHHV4PL
すみません、PHPのMySQL関数にある、
mysql_data_seek(intRs,intRow) この関数なんですけど
postgreSQLで同じようなのないでしょうか?
547nobodyさん:04/01/05 22:18 ID:???
>>546
pg_result_seek() かな?

つか、カーソル使えよ。
548nobodyさん:04/01/10 20:36 ID:???
PHP + PostgreSQLでオススメの書籍はありますか?
549nobody:04/01/12 21:34 ID:DtxerTTK
シーラカンス?
550nobodyさん:04/01/12 21:47 ID:???
マンモス?
551nobody:04/01/12 22:22 ID:DtxerTTK
10日でできる…ってゆうのを詠んだ。
具体的ではあったがPHPの一部分しかあつかってなかった…
webのほうが為になる気が…
552nobodyさん:04/01/13 00:46 ID:???
とりあえず赤、青マンモス本とシーラカンス本があればいいんでは。
あとはwebでどうにかなる。
553nobodyさん:04/01/13 01:31 ID:???
554nobodyさん:04/01/23 17:29 ID:???
オンラインショッピングサイトやってるんですけどお客さん(店長さん)に

商品を編集するのに管理画面でやるのは面倒くさいので、
CSVでダウンロードしてエクセルで修正してまたアップロードしたい

って言われたんですけど、UPDATE に対応した COPY コマンドみたいなことってできませんでしょうか?
PHP で一行ずつ商品番号を調べて UPDATE でもいいんですが、時間がかかってしまうので。。。
何かいい方法があったら教えてください。おながいします。
555 :04/01/23 17:47 ID:???
555get, zuzaa
556nobodyさん:04/01/23 20:29 ID:???
> PHP で一行ずつ商品番号を調べて UPDATE でもいいんですが、時間がかかってしまうので。。。

1000件程度であればそんなに時間かからないと思うんですけど、そんなに商品の数多いんですか?
557nobodyさん:04/01/23 21:21 ID:???
>>556
ちょっと待つ感じですね。まぁお客さんに遅いと感じたら小分けにしてくださいと言っときます。お邪魔しますた。
558nobodyさん:04/02/11 22:13 ID:EReQ7yHa
TeraTermで文字化けしちゃうんですが・・・
TeraTermの端末設定は送受信ともEUCにしてEUC_JPにしたDBを開きます。

# psql -l
List of databases
Name | Owner | Encoding
-----------+----------+----------
testdb | postgres | EUC_JP

# psql testdb
# \encoding EUC_JP

testdb=# SELECT * FROM report;
number | title | report
--------+-------------+---------
1 | <A5><BF><A5><A4><A5><C8><A5><EB>1 | <CB><DC><CA><B8>1
2 | <A5><BF><A5><A4><A5><C8><A5><EB>2 | <CB><DC><CA><B8>2

とまぁこんな調子です。
ホントは 1,タイトル1,本文1と入っているのに。
ちなみにPHPからブラウザを通してみると正常に見えました。
TeraTermの問題でしょうか?
559nobodyさん:04/02/13 10:50 ID:JC2NxhSZ
Postgresってローカルにインストールできますか?
560nobodyさん:04/02/13 10:57 ID:???
>>559
逆にお伺いしますが、リモートにインストールってどうやってやるんでしょう?
あ、それともグローバルの反対のローカルかな?んな訳ないか…。
561nobodyさん:04/02/13 12:09 ID:JC2NxhSZ
ええと、自分のパソコンのWindowsに入れたいのですが。
562nobodyさん:04/02/13 12:29 ID:???
>>558
Pagerが日本語通らないのではないか
日本語パッチ当たったless か more 入れて見たら
563nobodyさん:04/02/14 13:57 ID:???
MySQLと比較して、PostgreSQLの1番良い機能はなんですか?
564nobodyさん:04/02/14 16:06 ID:???
ドキュメントが整理されている
565nobodyさん:04/02/14 16:38 ID:???
>>561
Windowsは無理。MySQLなら可能。
566nobodyさん:04/02/14 17:04 ID:???
>>561
WindowsでPostgreSQLとゆーと、
有料だけとPowergresとか、cygwin上で動かすくらいかな。
WindowsNativeなものを作ってた人もいたけどもうメンテしてなかった気がする。
Linuxはあちこちに情報があるので割愛。
Macはよく知らない。
567nobodyさん:04/02/14 17:24 ID:???
Macの場合、OSXだとUNIX環境にPHP+PostgreSQLの環境を構築出来ます。

英語だけど、ここが参考になります。
ttp://www.entropy.ch/home/
568nobodyさん:04/02/14 19:29 ID:???
おいらがPantherにPostgreSQL7.4インスコしたときのメモ。

1. Finkでreadlineをインストール

2. PostgreSQLをビルド&インストール
$ ./configure --with-includes=/sw/include --with-libraries=/sw/lib
$ make
$ sudo make install

3. システム環境設定の「アカウント」からユーザ「postgres」を作成。
名前欄は「Postgres」とでもしておく。

つづく。
569nobodyさん:04/02/14 19:30 ID:???
4. 環境変数を設定。(.bash_profileに以下の記述を追加)
if [ -e /usr/local/pgsql/ ]; then
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export PATH=$PATH:$POSTGRES_HOME/bin
export MANPATH=$MANPATH:$POSTGRES_HOME/man
fi

5. PosgreSQLを初期化&起動
$ cd /usr/local/pgsql
$ sudo mkdir data
$ sudo chown postgres:postgres data
$ sudo chmod o-rwx data
$ sudo su postgres
$ initdb --no-locale --encoding=UNICOCE -D $PGDATA
570nobodyさん:04/02/14 19:35 ID:???
あとはPostgresが自動起動するように/private/etc/hostconfigを設定するのと
/Library/StartupItemsに関連ファイルを入れればおしまい。

これはentropy.chのパッケージ(pgsql-startupitem-1.2.pkg)を使えば一発だし
自力でやりたいのならDarwin用にビルドしたときにPostgresのStartupItemが生成されて、
設定方法も表示されるからそれに従えばOK・・・・だった気がするんだけど
これについてはメモを取り忘れてて思い出せないっス。
571nobodyさん:04/02/14 19:39 ID:???
entropy.chのPostgresを使うときはPHPのビルド時にopensslを含めないとエラーが出るのと
makeの前にsudo ranlib /usr/local/pgsql/include/libpqしないとエラーが出ることがあるのに注意。
572nobodyさん:04/02/14 19:40 ID:???
スマソ、>>571
/usr/local/pgsql/lib/libpq.a
ですた。
573nobodyさん:04/02/15 16:03 ID:Axezk+8k
永谷園のホームページ、ダウン中。。
http://www.nagatanien.co.jp/

pg_connect() unable to connect to PostgreSQL server: connectDBStart() -- connect() failed: No such file or directory
:
:
このエラーが出るってことは、テストしていないってことか?
ここ見てる担当者、何とかしたほうがいいんじゃない?

http://www.nagatanien.co.jp/cgi-bin/printenv

このプログラム、普通消さないか?
574nobodyさん:04/02/15 17:42 ID:???
まだデバッグ中なんだろ
575nobodyさん:04/02/15 18:33 ID:???
デバッグするなら外部からアクセス遮断するとかしないのか?
DBのフィールド名までおっぴろげでるぞ。
576森の妖精さん:04/02/15 18:40 ID:???
あぶねーなー。。これ。。。
ポートもデフォルトだし。もしかしてパスワードとか設定してなかったら
ガクガクブルブルものだな。
577nobodyさん:04/02/15 21:55 ID:???
デフォルトで外部サーバから接続できないからいいだろ
578nobodyさん:04/02/15 22:30 ID:???
普通は本ちゃんサーバーのエラーメッセージは非表示にしないか?
579558:04/02/15 22:44 ID:???
>>562
失礼しました〜
580nobodyさん:04/02/16 01:53 ID:???
つか、apache, PHPとも古すぎだろ、これ。

/func/の下も.htaccessで遮断してないので.inc読めちゃうし...。
581nobodyさん:04/02/16 17:19 ID:???
でも、あんまりおっぴろげると鯖缶が悪いのにこっちがパクられちゃうんだよね。
582nobodyさん:04/02/17 01:52 ID:???
訂正されとる
ここ見たのかねw
583582:04/02/17 01:53 ID:???
javascriptのエラーがうざいが、printenvは消えとる
584nobodyさん:04/02/17 21:42 ID:???
なんでも入りの新しいサーバーになってる。
でも結局、どのモジュールも古いな。
なんでわざわざ古いモジュール使ってるんだろ?

http://uptime.netcraft.com/up/graph?site=www.nagatanien.co.jp
585nobodyさん:04/02/18 07:43 ID:???
2/15から2/16いっぱいまでずっとダウンしていたな。。

たかがこのエラーの修復ぐらいで何でそんなに時間がかかるのかと
不思議だったが、何とOSの入れ替えをしてたのか...w
相変わらずHTTPS開いているし
証明書、localhost.localdomainだし(Turboのときはsnakeoilのヤツだった)

エンジニアとしてはレベル低いかもw
586nobodyさん:04/03/05 22:55 ID:???
質問です。

Solaris+PostgreSQL不明+PHP不明を使っています。
TIMESTAMP型のカラムへPHPのフォームで入力した値を入れようとするとエラーで、データが登録できません。
ちなみに入力しようとした値をそのままpsqlコマンドで入力したら正常に登録出来ました。

Linux+PostgreSQL7.3+PHP4.3.1の場合、同じソースで問題なく利用できました。
SQLとPHPのバージョンが確認できていなくあれですがこれは何が悪いのでしょうか?
587nobodyさん:04/03/05 23:25 ID:???
釣は放置で
588nobodyさん:04/03/06 01:30 ID:???
さっがっそうぜ!ドラゴンボール!!
589nobodyさん:04/03/06 16:09 ID:???
釣りと思われるくらいに簡単な問題なんですか。。。
ぐぐってみてもそれらしい問題が出てこなかったんだけどなぁ。
ヒントだけでも下さい。。。
590nobodyさん:04/03/06 16:23 ID:???
591nobodyさん:04/03/06 18:20 ID:???
あー失礼しました。
エラー内容は下記の通りです。
Warning: pg_query() [function.pg-query]: Query failed: ERROR: parser: parse error at or near "00" at character 37 .
で、実際にpg_queryに渡しているのは、
INSERT INTO date VALUES ('2004-03-06 00:00:00')
です。

値の渡し方がマズイのでしょうか?
592nobodyさん:04/03/06 18:59 ID:???
>>591
テーブル構造カモーンΨ(゜∀゜)Ψ
593nobodyさん:04/03/06 19:07 ID:???
>>591
> 実際にpg_queryに渡しているのは、
> INSERT INTO date VALUES ('2004-03-06 00:00:00')
> です。
ほんとか?
594nobodyさん:04/03/06 20:12 ID:???
>>592
失礼しました。テーブル構造です。
sql_test=# \d date
Table "public.date"
Column | Type | Modifiers
--------+-----------------------------+-----------
date | timestamp without time zone |

>>593
pg_queryに渡した変数をそのまま変数で書き出してペーストしたので間違っていないかと思います。
問題点を明確にする為にTIMESTAMP部分を抜き出して下記のような感じでテストしています。
現在手元にSolarisをいじれる環境がないので、アドバイス結果をすぐには試せないのですが、
RedHatの鯖ではこれで問題なく動きました。
Solarisの鯖では何故か>>591のようなエラーが。。。

<?php
$inc_pg['sql_query'] = "INSERT INTO date VALUES ('" . $_POST['fdate'] . "')";

$string = 'dbname=sql_test';
$db['handle'] = pg_connect ($conn);

$pg['exec_id'] = pg_query ($db['handle'], $pg['sql_query']);

pg_close ($db['handle']);

print 'sql =>' . $pg['sql_query'];

?>

足りない情報がありましたら出せるだけ出しますので、よろしくおねがいします。
595586:04/03/06 20:16 ID:???
>>594
スクリプトで一部間違ってました。

>$string = 'dbname=sql_test';
>$db['handle'] = pg_connect ($conn);
-----
$conn = 'dbname=sql_test';
$db['handle'] = pg_connect ($conn);
596586:04/03/06 20:20 ID:???
訂正をなんどもすみません。

>$inc_pg['sql_query'] = "INSERT INTO date VALUES ('" . $_POST['fdate'] . "')";
-----
$pg['sql_query'] = "INSERT INTO date VALUES ('" . $_POST['fdate'] . "')";
597nobodyさん:04/03/06 21:53 ID:???
SQLインジェクションが非常に気になるが、それは置いといて、

pgsqlのバージョンは、select version(); で確認できる。
phpもpnpinfo();でわかる。

で、ひょっとしたらYMDじゃなくて、MDYに設定されているのかも?
確認方法があったと思うが失念。
'03/06/2004 00:00:00'でやるとどうなるかな。
598586:04/03/06 23:54 ID:???
>>597
アドバイスありがとうございます。
SQLインジェクションについてはまだ考えてません。
それはおいおい学習していきたいと思います。

バージョン情報の確認とMDY形式の入力を試してみたいと思います。
599nobodyさん:04/03/07 17:08 ID:???
show DateStyle; とか
でもどっちで明らかな奴は自動で判別するけどな
600nobodyさん:04/03/08 04:17 ID:???
>>498

Mac OS X 10.2.8,PostgreSQL 7.4.1,PHP 4.3.4で
全てソースをコンパイルして環境を作っていたんですが、
同じ現象に悩まされました。
ただ、

ld: unknown flag: -export-symbols

なわけだから、

Makefile の該当行でそのフラグを指定してる箇所を削って
次のようにしたら make は成功しました。

EXTRA_LDFLAGS = -L/usr/local/pgsql/lib
601nobodyさん:04/03/08 04:18 ID:???
>>497 だったみたい
602586:04/03/08 21:02 ID:???
Solaris鯖はPostgresは7.1とPHP4.3.1でした。
それで'03/06/2004 00:00:00'の形式で入力しましたら無事にDBに登録されました。
アドバイス、本当にありがとうございました。
これで次に進めます。
603S.N:04/03/11 20:48 ID:Gs6PweG/
春日井市の方にある藤山台幼稚園の園長先生の名前を知ってる方いらっしゃいませんか?
知ってたら教えて下さい。宜しくお願いします。
604nobodyさん:04/03/13 01:00 ID:36IkPElZ
Linux+PostgreSQL7.3+PHP4.3.1での話なんですが
同環境の鯖からpg_dumpallしたファイルを
psql -f しようとしたら
「\connect: FATAL 1: IDENT authentication failed for user "xxxx"」
と怒られてぐぐった結果
pg_hba.confのlocalをall trustにしたんですけどまだ同じ症状なんです。
他に権限設定するファイルってあったら教えてください。
あと自宅鯖ですがpg_hba.confのlocalをall trusって危険ですか?
PHPってすごいんですね・・・
606nobodyさん:04/03/14 14:23 ID:???
>>604
よくわからんけど、ラージオブジェクトは使ってる?
pg_dumpall -g > "filename"
で、グローバルデータのバックアップはやった?
607nobodyさん:04/03/15 11:56 ID:u5uDbosW
>>606
ラージオブジェクトは使ってないんです、
オプションは-fだけ付けてダンプでした…、
もう一度新鯖の方、DB初期化からやり直してみるカナ…。
608nobodyさん:04/03/15 13:16 ID:???
609nobodyさん:04/03/16 03:09 ID:0I5atoz5
>>608
すいません、initdbしちゃいました。
(そしたらあっさり動きました!)
今回のトラブル中でgoogle引いているなかで一つ気になったのが
hba.confでのlocalの設定の書き方なんですが、
どこだか忘れましたがあるサイトで
local  all  all  trust
ってー書き方しているページがあったんですが
http://ml.postgresql.jp/pipermail/pgsql-jp/2002-September/002592.html
とかオンラインマニュアルなんかは
local  all  trust
ですよね?
見間違えかナア?
610nobodyさん:04/03/16 03:10 ID:0I5atoz5
失礼、お礼を書き忘れた!!
606さん
608さん
どうもありがとうございました!
611nobodyさん:04/03/16 08:31 ID:???
>>609
7.3あたりで 項目が増えたんじゃなかったかな?
changesを見てマジっすかって思った記憶があるよ。
612nobodyさん:04/03/18 05:39 ID:zQ2yHGPu
>>611


pg_hba.conf の詳細は、PostgreSQL のドキュメントの 6.1. The pg_hba.conf fileにあります。



セカンダリパスワードが廃止されました。
USER カラムが追加されました。
データベースとユーザをカンマ区切りで列挙できるようになりました。 また、+グループ名でグループを、 @ファイル名でデータベース名またはユーザ名を記述したファイルを指定できるようになりました。
キーワードsamegroupが追加されました。

だそうです。
http://www.us.postgresql.org/users-lounge/docs/7.3/postgres/client-authentication.html
613nobodyさん:04/03/20 09:22 ID:???
PHPもPostgreSQLも今日から挑戦してみる新参者です。

┌─┬─┬─┐
│○│△│×│
├─┼─┼─┤
│◎│□│◇│
└─┴─┴─┘
TABLEを用いてDBの値を上記のように表記したいのですが
PHPとPostgreSQLの組み合わせの定石などありますでしょうか。

PHP変数のスコープ範囲をグローバルとして確保するなら
SQLから変数へ一度に値を確保しておいて
<TABLE><TR><TD><?echo $変数1?></TD><TD><?echo $変数2?></TD>......
などとできそうかなと考えたのですけれど、下策でしょうか。
614nobodyさん:04/03/20 10:06 ID:???
>>613
プログラミングそのものが始めてというならそれでも構わんが、
とりあえずやって慣れないとな。

次ステップとして、foreach文でループしながら書き出す。
その次は、PEARのHTML_Tableを使って書き出す。
また、その次はテンプレートを使って書き出す。

手法はいろいろあるから、技術レベルとサイトの規模に合わせて
使い分けすりゃいいべ。
615nobodyさん:04/03/20 11:25 ID:???
>614
つまり各個別で変数をひとつずつ出力するよりも
タグまで出力することを一区切りとして実装した方が
負荷が少ないということになるのですね。

テンプレートは自分でクラスを作ればいいということでしょうか。
HTML_Tableは<TBODY>や<COL>要素が出力されないようなので
自分で作ってみようと思います。
ありがとうございました。
616nobodyさん:04/03/22 16:39 ID:QoPkBfoi
webから入力されたe_mailアドレスをDBに貯めておいてcronで一定時に
配信するプログラムを作ろうと思ったんですがそのcronで呼ばれる方のphpは
コマンドライン版(プログラムの頭に#/×××/×××/php とか付く奴)にあたると思うんですが
デバグ時にコンソールから直で呼び出した時にエラーをモニタにだしたいんですが
なにかオプション付けて実行とかどなたかご存知でしょうか?
617nobodyさん:04/03/22 17:05 ID:???
>>616
PHPのマニュアルの PHPをコマンドラインから使用する を見てみれ。
618616:04/03/23 04:32 ID:PH/L9hMF
>>617さん
#!/usr/bin/php -qを頭につけて
クーロンと直接実行と両方試したんですが
エラーもはかずに配信もされないんですが
コマンドライン版特有のデバグ方法等ありましたら
url等情報頂けたらありがたいです。
619nobodyさん:04/03/23 05:59 ID:???
>>618
617ではないが、
MTAのログは?
620616:04/03/23 18:38 ID:zP9z4yZ0
>>619
/var/log/mail_logには一切メールを送った形跡なし…。
何故エラーすら吐かないんだろう?
621nobodyさん:04/03/23 19:03 ID:???
>>620
メール送信処理のかわりにファイル作成してみるとか
そのファイルに変数の値とか出力したらいろいろわかる可能性も
622616:04/03/23 20:48 ID:zP9z4yZ0
>>621
ドモです、さっそくやってみます。
623nobodyさん:04/04/06 12:05 ID:irRO9IOr
質問です。。。

Postgresのビット演算についてお力をお貸しください。
text_a varchar(5) と宣言してある所に 00110 の文字列が入っています。
それに対して 00010 の文字列で&演算したいのですが、エラーになってしまいます。

■エラーが出た部分(一部抜粋)
WHERE ( CAST( text_a AS bit ) & B’00010’ ) > B’00000’

■エラー文
varchar から bitへの変換ができないといわれます。
何かこれを回避する方法または別の手段が無いでしょうか?
お力をお貸しください。
624nobodyさん:04/04/06 13:28 ID:???
>>623
ビット型に変換しなくとも。
WHERE (text_a::int & '00010'::int) > 0
で、目的は達成すると思われ。
625623:04/04/06 14:36 ID:???
>>624
アドバイスありがとうございます。
早速やってみます!
626623:04/04/06 14:48 ID:irRO9IOr
>>624
結果報告です。
ERROR: Cannot cast type 'varchar' to 'int4'
でダメでした。とほほ
627624:04/04/07 16:53 ID:???
text 型からint型にはキャスト出来たので、Varchar型も出来ると思っていた。

(text_a::text::int & '00010'::int) > 0
ならどぉよ。
628623:04/04/07 19:14 ID:???
>>627
できました!
::text::int 2重に変換できるんですね。
勉強になりました、ありがとうございました。
629nobodyさん:04/04/07 22:11 ID:???
ダウンキャストなのかコンバートなのか分からなくなってくるな。
630nobodyさん:04/04/18 00:22 ID:jle0qDKt
DBサーバとWebサーバを物理的に同一の
マシンで兼用させることは出来るのでしょうか?
その場合IPが一緒になると思うのですが試したことのある方がいたら
教えてください。

ハードディスクを2つのパーティションに切って、片方をDBサーバ
OS:Linux
DB:Postgres
もう片方をWebサーバにしようと考えています。
OS:Win系
HTML、PHPで携帯サイトもどきを作ろうと考えています。

資金の都合があり、一台のPCで済ませようとしているのですが
根本的にありえない質問でしたらお許しください。
実際のサイトではまずありえない環境なのはわかっています。
他サイトを調べたのですが情報を得ることが出来ませんでした。
最後に来たのがここなわけで・・・。
631nobodyさん:04/04/18 00:25 ID:???
>>630
>実際のサイトではまずありえない環境なのはわかっています。
おいおい
632nobodyさん:04/04/18 00:42 ID:???
>>630
なぜDBとWeb両方Linuxで動かさないんだ?
633nobodyさん:04/04/18 00:49 ID:gbPENzjB
( ゚д゚)ポカーン
634nobodyさん:04/04/18 00:50 ID:???
635630:04/04/18 01:32 ID:jle0qDKt
>>634
すみません。ルール違反と知りつつもマルチしてしまいました。

>>632
仕事でやっている環境に合わせて勉強したかったもので。

>>631
説明不足でした。すみません。
公式サイト等ではサーバー負荷を考慮してDBとWebサーバを
別々にするので、ほとんど無いという意味で書き込みしました。
非公式サイトの開発・運用経験をお持ちの方ならやり方を
知っているのではないかと思い質問させてもらいました。

634のリンクさきのスレに書き込んでいただいた方のおかげで、
なんとか出来るかもしれないことがわかりましたので、
今色々と調べています。
636nobodyさん:04/04/18 01:41 ID:???
>>635
PC初心者板へ行ってくださいな。
そして「2つのパーティションに別々のOSを入れて同時に走らせたい」と言うんだよ。
637nobodyさん:04/04/18 02:54 ID:XCZiYJqw
「札」という文字をテーブルに入れようとすると
次のようなエラーが出ます

Warning: pg_query(): Query failed: ERROR: invalid byte sequence for encoding "EUC_JP": 0x8e44

どうすればよいのでしょうか?
638nobodyさん:04/04/18 04:06 ID:???
「札」が8E44になるのはSJISの時でないのん?
そりゃDBも往生しまっせ
639nobodyさん:04/04/25 13:29 ID:???
set client_encoding to 'sjis';
640nobodyさん:04/04/26 02:10 ID:WthorSeH
>>639
それやったけど駄目でした・・・
641nobodyさん:04/04/27 23:01 ID:???
mb_convert_encoding('札','EUC-JP','SJIS')すれ
642nobodyさん:04/04/28 01:20 ID:v4hgreAJ
>>641
できました。
ありがとうございます。
643nobodyさん:04/05/01 13:52 ID:mFnw69ow
ERROR: could not extend relation "hogehoge": No space left on device
HINT: Check free disk space.

ってエラーが出るのですが何が原因ですか?
サーバースペースは余ってる筈なんですけど、、、。
644nobodyさん:04/05/01 14:09 ID:jvss00O+
PHPとCGIを同じファイルで使う事は可能ですか?
645nobodyさん:04/05/01 17:49 ID:wi9QOksv
また難解な質問が来たな…。>644

とりあえず「可能」と答えておこう。
質問の意味がまったく分からないけど。
646nobodyさん:04/05/02 20:46 ID:???
>>644
>>645
こういうことじゃない?
-hatena.cgi------------------------------
open(IN, "datafile.txt");
while ($xx = <IN>) { print $xx; }
close(IN);
<?php
$fp = fopen('write.txt', 'w');
fputs($fp, "****\n");
fclose($fp);
?>
----------------------------------------
だったら俺の知ってる限りでは無理
647nobodyさん:04/09/11 05:17:25 ID:???
Postgresの配列型を、PHPの配列にする時どうしてる?
正規表現とかな?
648nobodyさん:04/09/11 05:24:59 ID:???
{}取り除いて、,でexplode
649nobodyさん:04/09/11 13:54:57 ID:???
>>648
{",", "}"}とかに対応できない悪寒
650nobodyさん:04/09/11 15:50:56 ID:???
>>647-649
が解決できたら PostgreSQL の配列型は HTML のチェックボックスを
格納するのに使えそうだね。
651nobodyさん:04/09/11 18:00:56 ID:???
>>649
再帰呼出を使えば出来るでしょ。
652651:04/09/11 18:08:47 ID:???
スマソ勘違いしてた。
デリミタと囲い子の問題ね。
653nobodyさん:04/09/11 18:15:03 ID:???
>>651
多次元配列じゃなくて、特種文字の扱いが問題だと思うのですが・・・・。
preg_match_allやpreg_splitでも正しくパースするのは難しそう。
#PostgreSQLのソースにヒントがあるかな?
PEAR MDBのキャスト機能で配列型も変換してくれるようになったら嬉しいな。
654653:04/09/11 18:16:21 ID:???
ちょっと遅かった... orz
655651:04/09/11 18:24:02 ID:???
>>653
fgetcsvの第一引数が文字列であるような関数があれば可能なんだよな。
656653:04/09/11 21:16:41 ID:???
>>651
自分もそれ考えてた。
一次元の配列に限定すれば、両端の{}を削ったのを一時ファイルに書き出して
fgetcsvすれば","もうまく扱えるはずだけど、オーバーヘッドが大きいし
それ以前にそんなコード書きたくない。
fgetcsv自体がバギーかつ仕様がコロコロ代わってるのも困りもの。

一次元の配列で、数値しか格納しないという前提なら>>648でいけるし、
それだけでもけっこう使えるとは思う。

配列型を活かしたクエリを発行しないならserializeしてTEXT型で保存
→fetchしたデータをunserializeで十分なわけだけど。
657nobodyさん:04/09/25 02:40:26 ID:???
質問させてください
pl/pgsqlを触り始めたのですがエラーに悩まされております
下記のように引数にテーブル名をいれて動かそうとすると
エラーになってしまいます。テーブルの実名をそのまま入れた時は動きました。
うまく動かす方法はないでしょうか?
よろしくお願いします。


CREATE OR REPLACE FUNCTION test_function(text) RETURNS INTEGER AS '

DECLARE
IN_table_name ALIAS FOR $1;
data_cnt INTEGER DEFAULT 0;
rec RECORD;
BEGIN

FOR rec IN SELECT * FROM IN_table_name LOOP
data_cnt := data_cnt + 1;
END LOOP;

RETURN data_cnt;
END;
'
LANGUAGE 'plpgsql';
658nobodyさん:04/09/25 03:12:19 ID:???
>>657
CREATE OR REPLACE FUNCTION test_function(text) RETURNS INTEGER AS '

DECLARE
IN_table_name ALIAS FOR $1;
data_cnt INTEGER DEFAULT 0;
rec RECORD;
sql TEXT;
BEGIN
sql := ''SELECT * FROM ''||IN_table_name ;
FOR rec IN EXECUTE sql LOOP
data_cnt := data_cnt + 1;
END LOOP;

RETURN data_cnt;
END;
'
LANGUAGE 'plpgsql';
659nobodyさん:04/09/25 03:18:53 ID:???
よくわかりました! ありがとうございます
早速試して見ます
660nobodyさん:04/10/12 21:01:41 ID:???
わけあって
httpd.confのデフォルトキャラクタセットSHIFT_JISなのね。
postgreはもちEUCなんだけど
PHP使ってなんかするとき問題あっか?
661nobodyさん:04/10/26 03:37:10 ID:???
SET client_encoding=SJIS;
662661:04/10/26 03:40:51 ID:???
寝ぼけてレスしたけど、よく見ると半月も前じゃん
663nobodyさん:04/10/26 15:42:23 ID:???
わはは、なんかワロタ。

そもそもhttpd.confのDefaultCharsetとPostgreSQLのEncodingは全く関係ないし、
せめて気にするなら、PHPの内部コードと>>660の頭だな。
664ド素人:04/11/23 11:23:13 ID:3+AQgTJt
psqlで  \(バックスラシュ) をインサートしようとするとエラーになります。エンコードはEUC_JPなんですが、、、どうすればいいのでしょうか?
665ド素人:04/11/23 11:36:12 ID:3+AQgTJt
confのclient_encoding とかをEUC_JPとかにするんでしょうか?
666ド素人:04/11/23 11:41:25 ID:3+AQgTJt
寝ぼけて書いたけど、半月前の板じゃん、わはは。なんかワロタ。
667ド素人:04/11/23 11:42:27 ID:3+AQgTJt
とかい言いつつ、、レスを待ちつづける俺。
切羽詰ってたりして…
668nobodyさん:04/11/23 11:45:21 ID:???
sql書け。

\を\\に置き換えてるか?
669ド素人:04/11/23 11:45:43 ID:3+AQgTJt
マジ、だずけでほじぃ。。。
670ド素人:04/11/23 11:47:21 ID:3+AQgTJt
\を\\にしても同じでした。。エスケープってことですよね?
671nobodyさん:04/11/23 11:50:13 ID:???
insert table_name (hoge) values ('\\')

でinsert出来ない?
672nobodyさん:04/11/23 11:50:49 ID:???
insert into table_name ... だった
673ド素人:04/11/23 11:52:21 ID:3+AQgTJt
sqlはこんな感じでございます↓
$inData = array(
'id'=>$sh->dba->nextId('tbl_bbs_id'),
'bid'=>$HTTP_VARS['bid'],
'id_no'=>$aUser['id_no'],
'title'=>ココ→ '\\',
'body'=>$VARS['body'],
'del_flg'=>'N'
)
674ド素人:04/11/23 11:54:36 ID:3+AQgTJt
単純なSQLでinsertしてみたのですが、、同じでした。
675ド素人:04/11/23 12:00:53 ID:3+AQgTJt
dbが壊れてるんでしょうか?通常はありえないんでしょうか?
676ド素人:04/11/23 12:03:12 ID:3+AQgTJt
フィールドタイプが「text」なんですが、これは問題ないでしょうか?
677nobodyさん:04/11/23 12:03:13 ID:???
phpとsql、それぞれのエスケープで\\\\
678ド素人:04/11/23 12:08:44 ID:3+AQgTJt
ありがとうございました!!!!!!
は、、はいった。。涙が・・・
679ド素人:04/11/23 12:14:09 ID:3+AQgTJt
実はezのハートを入れようと、、2日寝ておりませんでした。。
^N\264の場合は ^N\\\\264に変えればでるのでしょうか?
もしも、ご存知でしたらご教授いただけますでしょうか?
場違いでしたら、退散いたします。。
680ド素人:04/11/23 12:22:11 ID:3+AQgTJt
nobody殿に感謝しつつ、退散いたします。
nobody殿、バンザーイ!バンザーイ!バンザーイ!
681nobodyさん:04/11/24 09:19:58 ID:???
どういたしまして^^;
682nobodyさん:04/11/24 11:35:02 ID:???
test
683nobodyさん:04/11/26 07:18:01 ID:???
nobodyknows
684nobodyさん:05/02/23 08:53:54 ID:mE2XQAit
あげ
685nobodyさん:05/03/06 00:22:16 ID:AGppAUzL
ちょっと詰まっていることがあるのですが、わかる方がおられましたらアドバイス願います。
環境は、Linux(CentOS4.0)、Apache2.0、PostgreSQL7.4、PHP4.3(mbstring、pgsql付き)です。

---page1.php---
<?php
$page = "ページ1";
require ("search.inc");
?>

---page2.php---
<?php
$page = "ページ2";
require ("search.inc");
?>

---search.inc---
<?php
$con = pg_connect("dbname=db");
$result = pg_query($con, "select * from table where page = '$page'");
# 以下、内容の表示
?>

という構成で、要するに
page1.phpでは、データベースからpageフィールドが「ページ1」のレコードを表示し、
page2.phpでは、データベースからpageフィールドが「ページ2」のレコードを表示する、ことを意図しています。

ところが、現在生じている問題は、
page1.phpでもpage2.phpでも、「ページ1」「ページ2」両方のレコードが表示されてしまうのです。

他のページでも同様にデータベースからの検索・表示を行っているのですが、
そちらは問題なく、「ページ1」と「ページ2」だけが両方混ざってしまいます。
1とか2とか全角数字が問題なのでしょうか。両方selectされてしまうのが不可解なのですが。
686685:05/03/06 00:44:38 ID:???
補足です。

■page1.phpを、以下のように書き換えても、結果は同じでした。

---page1.php(改)---
<?php
$con = pg_connect("dbname=db");
$result = pg_query($con, "select * from table where page = 'ページ1'");
# 以下、内容の表示
?>

■また、$pageがひらがな・カタカナ・漢字のみの場合は、正しくselectされます。

---page3.php---
<?php
$page = "ほげほげ";
require ("search.inc");
?>

■データベースの内容をチェックしましたが、
 pageフィールドにはきちんと「ページ1」「ページ2」という値が入っています。
687nobodyさん:05/03/06 01:08:04 ID:???
>>685
原因わからない(´・ω・`)ショボーン。
Postgresの設定いじってログにクエリを表示させて見てはどうだろうか。(既存のシステムだと無理だろうけど)

それとpage1.php page2.php page3.phpと分けないで
search.php?page=page1
とかしてやったほうがいいんじゃないか?
688nobodyさん:05/03/06 01:32:40 ID:???
ロケールが設定されているとか。
show lc_collate;
show lc_ctype;
辺り。
689685:05/03/06 16:56:51 ID:???
レスどうもありがとうございます。

>>687
> それとpage1.php page2.php page3.phpと分けないで

実際のpage1.php、page2.phpは、HTML部分が異なるので、別ファイルにする必要があるんです。

>>688
> ロケールが設定されているとか。

なるほど、それが原因ですね、きっと。
しかし、ロケールの設定についてちょっと調べてみたんですが、
何だか難しくてよくわかりませんでした・・・orz。
これからもっと勉強します。

ちなみに、「ページ1」「ページ2」の表記を「ページ1」「ページ2」と半角数字に変えてみたら、
きちんとselectされるようになりました。当面はこれでしのぐことにします。

FedoraCore2では、こういう問題は生じませんでしたから、
OSにも左右されるみたいですね。同じRedHat系なんですが。
690nobodyさん:05/03/06 22:00:03 ID:???
携帯サイト作ってるんですけど
開発環境のWEBサーバー(Apache2.0 Windows2000)では動作するんですが、
本番環境のWEBサーバー(Apache1.3 Linux)へ移すと「接続先のサーバは現在ご利用できません(502)」と出ます。

502のエラーとして調べた結果「ゲートウェイもしくはプロキシサーバが上流から無効なレスポンスを受け取った」とのことです。

このエラーの要因として考えられるのはHTTPD.CONFファイルの設定の違いでしょうか?
とすると、対処法として、本番環境のHTTPD.CONFを開発環境と同じにするしかないでしょうか?
691nobodyさん:05/03/07 08:44:23 ID:???
>>690
ここはPHP postgreSQL のスレです
692nobodyさん:05/03/14 10:56:04 ID:???
テーブルがなければ作る、というのはどういうやり方がスマートなんでしょうか。
693nobodyさん:05/03/14 13:59:50 ID:???
>>692
テーブル名一覧テーブルを参照して、テーブルが
無ければトランザクション内でテーブルの作成と
テーブル名一覧テーブルの更新を行う。
694nobodyさん:05/03/17 08:48:05 ID:6RtiKHZ9
学ぶのに最適なサイトを教えてください
695nobodyさん:05/03/17 16:02:20 ID:???
マニュアル+MLで
696nobodyさん:2005/05/12(木) 17:12:14 ID:???
一寸煮詰まってしまってまして、よろしければアドバイスいただけないでしょうか?
Select (Case When A.Field = '' Then 0 Else A.Field End)::integer From Table as A
というSQLを発行し、A.Fieldが''(空白文字列)だった場合0を出したいのですが、
invalid input syntax for integer:
と、エラーが出てしまいます。
これがもし、A.Fieldが''ではなく、NULLだったらうまくいくのですが。。
この問題を回避する何か良い方法はないでしょうか?

よろしくお願いします。
697nobodyさん:2005/05/12(木) 22:55:49 ID:???
>>696
A.Fieldは文字列ですよね。数値(integer)に変換できない文字列が含まれているんじゃ?
698696:2005/05/13(金) 21:19:35 ID:???
>697
レスありがとうございます。
そういう事ではなく、A.Fieldが’’(空白文字列)の場合にエラーが出るのですよ。
Select (Case When '' = '' Then 0 Else '' End)
とした場合0が出て欲しいのにエラーになっちゃうんですよね。ちなみにElseの後が1とかなら問題なく0が帰ってきます。
ThenやElseの後空白文字列がいけないのは分かったのですが、それを回避したいからCase使ってるのに駄目って
なぜだ〜って感じなんです。
言葉足らずですいません。
699nobodyさん:2005/05/13(金) 22:48:42 ID:???
>>698
> Select (Case When '' = '' Then 0 Else '' End)

??? nanja korya?
何をしたいのか余計にワカランなった。
700nobodyさん:2005/05/16(月) 22:49:41 ID:???
>>698
SELECT (CASE WHEN field='' THEN '0' ELSE field END)
701700:2005/05/16(月) 22:50:28 ID:???
SELECT (CASE WHEN field='' THEN '0' ELSE field END)::integer ね。
702nobodyさん:2005/10/11(火) 18:34:00 ID:A0maUghJ
すいません、質問です。

Linux上にpostgresとPHPがインストールされていますが、
PHPからpgsqlを呼び出す事ができません。
phpinfo()で設定されてない事が確認できました。

で、調べて見た所オプションをつけてコンパイルしなおせば
使えるようになるみたいなんですが、
他に方法はありませんか?

Windowsだとphp.iniを書き直すだけで設定できたのですが
こういうのってLinuxだと無理なんですか?
703nobodyさん:2005/10/12(水) 05:28:13 ID:???
pconnect対策でpgpool入れたんだけどpgpoolにpconnectしても接続数大杉になるよね?

「pgpoolにはconnectで。postgresへの直connectより軽い」が正解?
704nobodyさん:2005/10/12(水) 08:32:39 ID:???
>>702
phpをどうやってインストールしたかによる
rpmならphp-pgsqlのパッケージだけを追加インストールすればよい
ソースからインストールしたのなら全部コンパイルしなおすかphpizeでext/pgsql/のみコンパイルして追加する
705nobodyさん:2005/10/13(木) 21:19:25 ID:???
phpはソースから入れる方がいいように思う。
バージョンによる挙動の違いとかあるから。
うかつにアップデートするとまずいことになる。
706nobodyさん:2005/10/18(火) 17:46:31 ID:???
portsでインスコしてportupgradeでアップデート終了
手抜きする為にFreeBSDを使うのが漏れのジャスティス(´・ω・`)
707nobodyさん:2005/10/18(火) 20:16:46 ID:???
yumやapt-getもあるでよ
708nobodyさん:2005/11/05(土) 16:52:03 ID:3i8SmZZ/
つーか、ちゃんとメンテナンスされてるパッケージシステムを使えばいいだけ。
PHP+DBなんてOSはどうでもいいし。

しかし、PHP+PostgreSQLなんて原価安い分買い叩かれて仕事稼げないのによくやるねえ。
SunEnterprise+Solaris+Oracle+iPlanet+WebLogicの仕事が一番稼げるよ。
709nobodyさん:2006/01/04(水) 20:58:12 ID:D32qMl2A
おまえらあけおめ
710nobodyさん:2006/01/06(金) 14:57:06 ID:XMuialze
PostgreSQL用の追加モジュールのpgsql.soをインストールしたいのですが、
phpizeコマンドが使えません。phpizeは/usr/local/binに入っています、
方法としては、/usr/local/src/php/ext/pgsqlに行き、phpizeを実行する、
と、bash:phpize:command not found となってしまいます。
まったくの初心者で、なにを治していいか分かりません、どなたかご指導願います。
711nobodyさん:2006/01/17(火) 18:44:37 ID:???
Fedora core4にPHP5.1.2、postgres7.3.4、apache2.2.0を放りこまにゃならんのだけど
インストールの順番って特に考えんでも問題なし??

…PHP5.1.2なんてまだ使いたくねぇよorz
712nobodyさん:2006/01/17(火) 18:45:26 ID:0H6x+8rL
ゴメン、ageてみる
713nobodyさん:2006/01/17(火) 19:01:48 ID:???
>>711
分けてあるから平気よ。

枯れた環境がいいならFC4なんて使うなよ。
顧客の要望でFC4なら諦めろ。
714nobodyさん:2006/01/17(火) 19:27:58 ID:0H6x+8rL
>>713
ありがとです。
FC4でデフォルトな装備品で気持ちよく開発したいもんだが、
隅から隅までお客サマの要望ときたもんだ(TT)
posgreをmakeしてるけどwarning吐きまくりだわ。いけるのか7.3.4
ready install!とか言われても不安が尽きないですよ。

715nobodyさん:2006/01/17(火) 19:32:49 ID:???
>>711
なんでわざわざ7.3.4なんだ?
クラは8.1.xの存在知ってる?改良点についても。
716nobodyさん:2006/01/17(火) 19:33:43 ID:???
>>711
俺はFC4じゃないけど、CentOS4に入れてみた。
PHP5.1.2、postgres8.1.2、apache2.2.0。
順番はApacheかPostgresが最初で、最後がPHP。
717711:2006/01/18(水) 10:14:02 ID:???
>>715
結構古くから使ってるDocomoのサイトなんだけど、
それのAU版を新しく作るんだわ。
まったく別にもう1つDBサーバー作るんだけど、
データの共有できる部分が多いからPostgresのバージョンは変えたく無いんだと。
クラの担当者本人が苦笑してたぐらいだからな〜〜orz
「サーバ担当チームが変更してくれん」ってさwww一体誰のこだわりなんだか

>>716
同じ順番になってる。なんかホッとしたー(・∀・)

昨日は私用で帰っちゃったので本日中に開発環境整えれるように頑張ります
718716:2006/01/18(水) 10:40:20 ID:???
>>717
データの共有出来る部分?
よくわからんけど、Postgres7,3,3からPostgres8.1.2に
データ移行したけど、全然問題なく簡単に出来たよ。
パフォーマンスも段違いだし、8にした方がいいよ。
719711:2006/01/18(水) 11:24:09 ID:???
>>718
分かっちゃいるんだけどねぇ…コレはお客サマのお告げなので…(TT)
もう本番サーバー設定しちゃったらしいし。しゃーないわ。

720nobodyさん:2006/01/18(水) 23:58:58 ID:BuFau/7y
PHPにはPostgresqlが似合ってるな(中途半端!)
PerlにはMysqlが似合ってるな(早い!安い!)
JavaにはOracleが似合ってるな(めんどくせー!結構金かかるな!)

PHP+Oracleの案件って見たことねえ
Perl+Postgresqlの案件もあんまり見たことねえ(たまにあるね)
Java+Mysqlの案件は見たことねえ

きっとコストと処理速度と規模で決まっちゃうんだろうな
721nobodyさん:2006/01/19(木) 14:44:01 ID:???
Oracle の JDBC ライブラリは普通にバイナリで出回ってるが
Perl や PHP から Oracle を引くにはドライバを make せんといかんので面倒がられる

PostgreSQL と Perl の組み合わせは、PL/Perl が最強だと思うんだが
現場で使われてるところを見たことがない

Java と MySQL は、よく知らないんだが
昔は UTF-8 対応が足枷になったりしてたのか?
722nobodyさん:2006/01/21(土) 04:00:36 ID:???
>>720
Java+Oracle を PHP + Oracle でリニューアルした案件は結構見る。
723nobodyさん:2006/01/26(木) 03:40:56 ID:???
PHP5.1のrpmが落ちてないなぁ。
エロイ人、お願いします。
724nobodyさん:2006/01/26(木) 03:57:34 ID:???
>>723
すれ違い。
ディストリビューションかかないと解らないし。
725nobodyさん:2006/01/29(日) 19:06:11 ID:???
Perlなら、Oracleについてくるじゃん。
あれって、Windowsだけだっけ?
726nobodyさん:2006/01/30(月) 16:07:49 ID:???
Oracle は Zend と提携したし
727nobodyさん:2006/01/30(月) 23:33:48 ID:???
しっかし 8.1 は速くなったのー。
728nobodyさん:2006/05/03(水) 21:26:11 ID:???
もはやMySQLよりも速い気がしますね。
729nobodyさん:2006/05/08(月) 00:57:02 ID:???
いや、実際速いよ。
730nobodyさん:2006/07/07(金) 12:29:39 ID:AUesg1Gs
はじめまして。
RedHatLinux8.0上でPHPとpostgreSQL7.2.3をつかって顧客管理システムでも
つくろうかなと思っていたのですが、PHPは正常にインストールができてpostgreSQLの
インストールした後の環境変数の設定をしなくてはいけないらしくて、ホームディレクトリ
ディレクトリのbashrcにスクリプトを追加しなくてはいけません。
このpostgreSQLのインストール後の設定についてどなたか教えていただけませんでしょうか?

ちなみに参考文献は
「php×postgreSQLでつくる最強webシステム」
です。
どうかよろしくお願いします。
731nobodyさん:2006/07/07(金) 12:56:12 ID:AUesg1Gs
先ほどの730のものです。
質問があいまいになっていたので、再度カキコさせていただきます。
postgreSQLのインストール行った後に、ホームディレクトリに

POSTGRES_HOME=/usr/local/pgsql/
export PATH="$PATH":/usr/local/pgsql/bin
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH="$MANPATH":POSTGRES_HOME/man

という内容を追加し、「source ~/.bashrc」を実行するとあるのですが、この
bashrcというファイルがどこにあるのかという事と、このホームディレクトリとは
はどこを指しているのかがよくわかりません・・・・
732nobodyさん:2006/07/07(金) 12:58:10 ID:???
>>730
また古い物を、
で、環境設定ならP87から書いてある通りで桶だと思うが。
viでもなんでもエディタでpostgresのホームディレクトリにある
本通りだと/usr/local/pgsql/.bashrc にP88の内容通りすりゃいい。

ログイン時に.bashrcを読み込んでくれないのなら.bash_profileの
中身を確認。RedHat系なら読み込んでくれると思ったが。
733nobodyさん:2006/07/07(金) 13:08:50 ID:AUesg1Gs
nobody様

ご助言ありがとうございます。
参考にさせていただきます!!
734nobodyさん:2006/07/07(金) 14:56:02 ID:AUesg1Gs
/usr/local/pgsql/.bashrc を書き換えたいのですが、bashrcというファイル名
のファイルが見つかりません。windowsのようにフォルダオプションに相当する
コマンドか何かあるのでしょうか?
735nobodyさん:2006/07/07(金) 15:41:15 ID:???
>>734
無ければ作ればいいんだけど・・?
通常は隠しファイルで見えないだけで、 ls -la とかやってみては?
736nobodyさん:2006/07/07(金) 22:39:50 ID:???
/usr/local/pgsql/.bashrcでいいの?
737nobodyさん:2006/07/08(土) 09:08:12 ID:???
>>736
ログインしたユーザーに環境変数をセットしてあげたいんでしょ?
だったら、その人のホーム直下に作らないとダメね。

 ~/.bashrc ね
738nobodyさん:2006/09/27(水) 15:35:11 ID:???
postgreSQL 7.3.1 + PHP
です。
$sql = "DROP TABLE IF EXISTS test";
pg_query($sql);

という感じで、 test というテーブルが存在する場合に DROP TABLEさせたいのですが
テーブルの存在はどのように判定したらよいでしょうか

上記では、pg_query がエラーを出してしまいます。
739nobodyさん:2006/09/28(木) 02:43:52 ID:???
IF EXISTS ってmysqlじゃないですか
740nobodyさん:2006/10/01(日) 13:01:09 ID:???
741nobodyさん:2006/10/01(日) 21:50:33 ID:???
以下のコードで、pg_insert()のエラーが出力されないのですが、エラーを取る方法はあるのでしょうか?

//'bool'カラムでエラー
$data = array('number' => 3, 'bool' => 'trueee', 'time' => date('Y-m-d H:i:s'));

$res = pg_insert($con, 'test', $data);
if (!$res) echo pg_result_error($res);

----------------------------------------------------------

pg_query()の場合は正常にエラーが出力されます。

$date = date('Y-m-d H:i:s');
$res = pg_query($con, "insert into test(number, bool, time) values(5, 'trueee', '{$date}')");
if (!$res) echo pg_result_error($res);

Warning: pg_query() [function.pg-query]: Query failed: ERROR: invalid input syntax for type boolean: "trueee"

環境
 windows XP
 PHP 5.1.4
 Apache 2.0.58
 Postgres 8.1.4

または
 FreeBSD 6.1
 PHP 5.1.4 or PHP 5.2
 Apache 1.3.37
 Postgres 8.1.4
742nobodyさん:2007/06/26(火) 15:17:35 ID:KNA8dvka
phpから、db_dumpの実行方法がわかりません。
もしかして、「psql.exe」を呼び出して実行させるプログラムが別途必要になってくるのでしょうか?
psqlからなら、出来たのですが、、、
743nobodyさん:2007/06/26(火) 15:25:27 ID:KNA8dvka
具体的には「pg_dump」を実行させて、データのバックアップをとりたいのですが、
pg_dump test_db > database_name.sql
をPHPファイルのどこに記入したら良いのかわからないです。
744nobodyさん:2007/06/26(火) 17:39:31 ID:???
system()で実行したらどうでしょうか
745nobodyさん:2007/08/25(土) 00:24:48 ID:???
文字コードの変換は、
PostgreSQLのSET NAMES

PHPのmb_convert_encoding
のどちらでやるほうがいいのでしょうか?
746nobodyさん:2007/09/03(月) 07:59:26 ID:KucjbbQW
初の質問です。
今php+postgresql+fedoracore4でシステムを作っているんですが、
どうも原因がpostgresqlにあるとわかってきました。
自分はDBを作るときまず文字コードをeucに変えて入力するんですが
invalid byte sequence for encoding "EUC_JP": 0xe988
というエラーがでます。
PHPのソースはhttp://www.mywave.co.jp/~ike50/chapter5.zip
にあります。
ぜひ教えてください。
747nobodyさん:2007/09/03(月) 13:19:55 ID:???
>>746
いやです。
関係ないところを削って
30行以内に収めてから出直してください。
748nobodyさん:2007/09/04(火) 02:28:15 ID:???
>>746
マルチは死んでください
749nobodyさん:2007/09/09(日) 02:29:17 ID:zQ9Ko6j+
fedora core4でphp+postgresqlをやろうと思ったんですが
DBが認識してくれません。
DBの部分がエラーになるので、画面が真っ白です。
やった人いませんか?
DB認識はパッケージではだめなんでしょうか?
ちょっとわかりずらいかもしれませんが、よろしくです。
750nobodyさん:2007/09/09(日) 09:10:26 ID:???
apacheのエラーログにはなんて書いてありますか?
751nobodyさん:2007/09/09(日) 11:02:45 ID:???
氏ねバカ、と書いてある。
752nobodyさん:2007/09/10(月) 06:56:33 ID:iLiEDXXm
PHPのconfigure時にPostgresqlが組み込まれているかしりたいです。
fedora core4でパッケージでphpをイントールしたのですが。
組み込まれているのでしょうか?
またこれ追加はできないのでしょうか?
後php info();で見てみたんですが、
dbx support enabled
dbx version 1.1.0
supported databases MySQL ODBC PostgreSQL Microsoft SQL Server FrontBase Oracle 8 (oci8) Sybase-CT SQLite
てでたんだがphpのconfigureの部分はなかった。
どうでしょうか?
753nobodyさん:2007/09/10(月) 14:55:10 ID:???
PostgreSQL(libpq) Version とか出てないのか?
754nobodyさん:2007/09/10(月) 20:00:15 ID:???
DB板のPostgreSQLスレに湧いていた馬鹿が、こんどはこのスレにきたか。消えろ。
755nobodyさん:2008/03/27(木) 13:58:14 ID:???
ユーザIDをキーに持つテーブルを作ってですね

SELECT * FROM TABLE1 WHERE USER_ID = 'T&E SOFT';

まあ、IDはサンプルですが、このように'&'を含む文字列を条件に指定すると結果が一行も返ってきません。
IDに対してpg_escape_stringをかけても結果は同じでした。
CSEやpgAdminではこのクエリーは普通に期待する結果を返してくれるのですが…。

何か特殊なエスケープ処理を行わなくてはいけないんでしょうか?
PostgreSQLはversion7.4
PHPは4.3.3
Apacheha2.0.46
です。
756nobodyさん:2009/05/15(金) 11:17:54 ID:WsVpM47h
質問です。
データベースに先生用テーブルと生徒用のテーブルがあります。
カラム名をtloginIDとsloginIDとして、
新規登録でログインIDの重複をチェックしたいと思っています。
SQL文を教えてください。
テーブル名は、teacherとstudentです。
757nobodyさん:2009/05/15(金) 11:23:15 ID:???
確認するけど、ログインIDの重複をチェックしてどう処理するの?
許可するの?弾くの?
758nobodyさん:2009/05/15(金) 11:30:37 ID:???
select count(tloginID) from teacher
select count(sloginID) from student で2以上なら重複あり
759758:2009/05/15(金) 11:33:25 ID:???
間違った
select count(*) from teacher where tloginID='hoge'

だな
760nobodyさん:2009/09/24(木) 09:08:59 ID:DwG28PME
トランザクションして select for update ってやれば、
selectした行はロックがかかって他の人はその行は参照もロックされて待たせられるのでしょうか?
761nobodyさん:2010/01/21(木) 14:04:11 ID:2fYoTKfz
いつも勉強させてもらっています。質問です。

いくつかのプロセスが残ってしまう問題で行き詰まりました。このような

hogehoge 31926 25387 0 12:04 ? 00:00:00 postgres: nanashi nanashi2010 192.168.00.00(37729) idle

のが数プロセス溜まってしまいます。
select * from pg_stat_activityとしてみても、確かにidleなものが確認出来ます。

PHP 4.3.2 + PostgreSQL 8.1.9 です。
pconnect関数、pgpoolも使ってません。

もし同様の問題についてご存じの方がいらっしゃいましたら、
アドバイスいただけるとありがたいです。
よろしくお願いします。
762nobodyさん:2010/01/21(木) 20:19:55 ID:???
いや問題じゃないので
763nobodyさん:2010/01/21(木) 20:37:51 ID:2fYoTKfz
>>762
仕様だ、ということですか?
764nobodyさん:2010/01/21(木) 21:46:20 ID:???
当然接続は明示的にcloseしてるよな
Apacheがプロセス持ってるからとか言うオチだったらぶっ飛ばすからな
765nobodyさん:2010/01/22(金) 17:15:36 ID:6+I3LoB3
>>764
もちろんしています。
Apacheプロセスについては、残っている場合とそうでない場合があり混乱しています。
通常、Apacheのプロセスが落ちれば残るはずは無いと思うんですが。
766nobodyさん:2010/12/02(木) 19:36:47 ID:JyGm6z0o
■環境
centos5.3
postgresql 8.1

http://www.hizlab.net/app/meibo.html
上記よりsqlファイルをダウンロードし
以下を実行したのですが、エラーがでるのですがわかる人いますか?
2002年位に作られたページみたいなのでpostgresのバージョン違いのためでしょうか?

[www@localhost ~]$ createlang plpgsql -d inet_db
[www@localhost ~]$ psql -f /home/www/meibo.sql -d inet_db
psql:/home/www/meibo.sql:16: ERROR: function m_update_editdata() does not exist
CREATE FUNCTION
psql:/home/www/meibo.sql:29: ERROR: table "inet_job" does not exist
psql:/home/www/meibo.sql:37: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "inet_job_pkey" for table "inet_job"
CREATE TABLE
psql:/home/www/meibo.sql:41: WARNING: changing return type of function m_update_editdata from "opaque" to "trigger"
CREATE TRIGGER
psql:/home/www/meibo.sql:45: ERROR: sequence "seq_inet_profile_code" does not exist
CREATE SEQUENCE
psql:/home/www/meibo.sql:52: ERROR: table "inet_profile" does not exist
767nobodyさん:2010/12/03(金) 09:15:27 ID:???
存在しないってエラーが出て、その後作成しましたって出てるから作成されてるんじゃないの?
作成に失敗したってエラーが出てれば作成途中で終わってるだろうけど
768nobodyさん:2010/12/03(金) 23:43:10 ID:???
>>767
レスありがとうございます。
ソース(http://www.hizlab.net/view/app/meibo/meibo.sql)
をよく見たところ以下のようにDROP ナニナニ している部分を
コメントアウトしたところエラーがでなくなりましたが
新たに作ったデータベースに
DROP ナニナニ する作者の意図はなんなのでしょうかね?

-- 修正日/修正者を更新するトリガプロシージャを作成
DROP FUNCTION m_update_editdata();
CREATE FUNCTION m_update_editdata() RETURNS OPAQUE AS '
省略
-- テーブルの作成
DROP TABLE inet_profile;
CREATE TABLE inet_profile (
省略
-- 職種マスタの作成
DROP TABLE inet_job;
CREATE TABLE inet_job (
省略
-- INET_PROFILE 用のシーケンスを作成
DROP SEQUENCE seq_inet_profile_code;
CREATE SEQUENCE seq_inet_profile_code
省略
769767:2010/12/04(土) 00:37:08 ID:???
それは初期化スクリプトの定番でしょ

コマンドラインから流し込んでDB初期化するときに、もし前のデータが残っていればそこで初期化が頓挫してしまう
先にDROPした上でCREATEすれば何度流し込んでも同じように初期化できる
770nobodyさん:2010/12/05(日) 10:56:11 ID:???
>>769
なるほど失礼しました。私が無知でした。
ありがとうございました。
771電脳プリオン:2012/01/02(月) 22:52:37.95 ID:??? BE:456084959-2BP(1960)

  ( ・∀・)      | | ガガッ
 と    )      | |
   Y /ノ      .人
    / ) .人   <  >_∧∩
  _/し' <  >_∧∩`Д´)/
 (_フ彡 V`Д´)/   / ←>>479
            / ←>>384
772nobodyさん:2013/08/17(土) NY:AN:NY.AN ID:???
.          \\      ,土ヽ l 十  ├  ゝ‐、ヽ ll               尸  //
            \\  (ノ ) | Cト、.Cト、   ノ l_ノ よ  ̄ ̄ ̄ (⌒/   //
                   .....       .:_ -― ─- 、:.    ......
                  ..::⌒>.、:: ...::/::.::/::.:: ヽ::.::.\::....::x<⌒::.
              ::x-=≦.::.-=`ミO.:/:/:/|:./.:ハ::ヽ::`O::-=ミて`く⌒ヽ::
            ::, イ::ノ⌒'Z _⌒ Y彡::./V  j/ヽ::ハ.::.V::Y⌒/;^)- 入 \:
           ::/ :/八  '(:::::':,\ トV::./⌒     ⌒ヽ.::∨/,.::'::/  /:::∧  '\::
           ::/ `V::/ヽ\ \ :':, 八W __    __ jハ:::l, :':::::, ′ /:::/   ̄ ノ\::
        ::〈   ,.:'::/   ヽ \ \:l:ハ| 〃⌒    ⌒ヾ ハ:|::::/  ,.イ:::/     ∠.::勹::
       ::/ ! :.'::::∧   |  ヽ  \ム .:::::  r ┐ ::::.,'ノ/  / /::/   |__:/::
     ::∠._jハ_ん:ヘ/}ノ /ヘ  ヽゝ_  ヽ ノ   イ/  /⌒ん'⌒)_>::
                     ̄   ̄`ヽ   `=≧r ‐i彡''´  /::     ̄
                      ::\ヽ   ` ´   / /::
                       ::          ,′
                       ::i  :;     :;  i::
                       ::|          |::
                       ::l         |::
                         ::j            ::
                        ::,′           l::
                         ::/           |::
                     ::/              !::
                       ::/    〉┴r      ::
                       ::,′    /:: ::|     |::
773nobodyさん:2013/09/03(火) 08:13:13.43 ID:???
ぬるぽ
774nobodyさん:2013/12/30(月) 19:24:59.46 ID:???
まあまあこんな感じだよ
775nobodyさん:2014/01/02(木) 21:57:26.13 ID:???
今年のラッキーカラーは?
776nobodyさん:2014/01/03(金) 18:08:08.71 ID:???
来てるかも
777nobodyさん:2014/01/27(月) 20:19:46.52 ID:???
周辺は厳戒態勢
778nobodyさん:2014/01/27(月) 22:05:39.86 ID:???
世界一
779nobodyさん:2014/01/29(水) 21:03:23.07 ID:???
どうもどうも
780nobodyさん:2014/08/31(日) 21:38:28.44 ID:???
781nobodyさん:2014/12/16(火) 14:57:58.06 ID:???
782nobodyさん:2015/01/05(月) 20:22:59.39 ID:???
あけおめ
783nobodyさん
ことよろ