PHP + PostgreSQLat PHP
PHP + PostgreSQL - 暇つぶし2ch136:電動ナナシ
2001/03/30(金) 06:59
ふうむ、そういうことなのかあ。
ソースちょっと追ったけど、connect() の場合と pconnect() の場合とで
ほとんど同じ処理をしているんだよね。単にリンク数のカウンタ処理部分が
違うくらいで。

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

謎だあ。もうちょっと追ってみよう。
# 暇ができたらだけど・・・。


137:Error 401
2001/03/30(金) 09:17
>>136
>connect() だと postgres は死んでくれるの?

はい、死んでくれます。

>謎だあ。もうちょっと追ってみよう。

念の為書いときます。
configure optionの --enable-sigchildが、Oracleの持続的
接続を使う場合には必要という情報を見つけ、
リコンパイルしてみたんですが、これは関係ありませんでした。
オプション無しの場合と全く同じ挙動でした。

138:電動ナナシ
2001/03/30(金) 17:52
>>137
なんとなく原因がわかった雰囲気。

ひょっとして PostgreSQL だけでなく、あらゆる持続的接続の Close が
きちんとされてないという予測を立てたんだけど、追試できる人っている?


139:名無しさん@お腹いっぱい。
2001/03/30(金) 18:45 PF8gszDA
きちんとって何?
close で close されたら、pconnect の意味なし

140:電動ナナシ
2001/03/30(金) 19:45
え、じゃああれでいいんだ。
馬鹿さらしてしまった。鬱だし脳。


141:名無しさん@お腹いっぱい。
2001/03/30(金) 20:12 PF8gszDA
pconnect は、apacheのpreforkみたいなもの。
バックエンドをpreforkさせるための便宜的手法。
fastcgi みたいなものと言った方がわかりやすい?

142:Error 401
2001/04/03(火) 17:13
ひっそりと、PostgreSQL RC2が出てるよsage。
しかし、話題になりませんね・・・。

143:電動ナナシ
2001/04/05(木) 08:30
>>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 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
>>144
> fork()って、PHPのプロセスのことですか?
いや、httpd のプロセスのこと。
さっきマニュアル見たらちゃんと書いてあった。httpd の Child Process ごとに
永続的接続するよって。
鬱だし脳。
URLリンク(www.php.net)


146:名無しさん@お腹いっぱい。
2001/04/05(木) 16:26 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
>>146
ereg()とかpreg_xxxx()などの正規表現ライブラリ関数を使って、
妥当性チェックしてみてはいかが?


148:146
2001/04/05(木) 23:25 tP58bUgQ
>>147
早速ereg("[[:alnum:]]{2}", $test_id)として、ちゃんと指定の
形で英数字2文字だけが入力されているかを判定させてみました。
無事考えていたことが出来ました。
ありがとうございます。

149:名無しさん@お腹いっぱい。
2001/04/06(金) 16:39
ereg()の正規表現って気持ち悪いね
ereg()の正規表現って気持ち悪いね

150:名無しさん@お腹いっぱい。
2001/04/06(金) 23:58 EZv8sM3A
149って気持ち悪いね
149って気持ち悪いね

151:名無しさん@お腹いっぱい。
2001/04/07(土) 05:13 vwo99Xeg
>PostgreSQL の場合、ホビーよりビジネスでの利用が多いから、
>安定性が確認されていないベータ版には興味がないのかもしれないね。

つーか、ほいほい導入してもデータの移行が大変なんだよ

152:名無しさん@お腹いっぱい。
2001/04/10(火) 14:37 zIPEt9lw
セッション管理についてわかりやすく説明されている
サイトはありますか?

153:名無しさん@お腹いっぱい。
2001/04/11(水) 01:46
基本中の基本だとは思うのですが、私の少ない脳味噌では考え付かないので、
どなたかご親切なアドバイスをいただけませんか?

フォームからInsert用のデータを受取り、それを処理するファイルがhoge.php3
とします。
フォームからのデータ自体をphp3利用でPostgreSQLにInsertすることまでは出
来ました。
しかし、このままでは本当にそのデータがちゃんとデータベースに登録されたのかど
うかがフォームに書き込んだ人は判りませんから、同じhoge.php3にデータ登録後
に今度は今ちょうど登録したデータはこれでいした、みたいに表示させたいのです。
でも、それを簡単に処理する方法がどうしても思い付きません。

是非この簡単・初歩の初歩だとは思うのですが、それすら判らない厨房に是非暖かい
アドバイスをいただけませんでしょうか?


154:名無しさん@お腹いっぱい。
2001/04/11(水) 02:49 bTSMk3Jw
$sql = "insert into hoge values('$hoge')";
$result = pg_exec($sql);
if($result){
echo "登録したデータは$hoge";
}

155:Error 401
2001/04/11(水) 10:38 BTheoUl2
>>153
どこが判らないのかが良くわかりませんが、
pg_getlastoid()
を使えば、pg_exec()でInsertされたオブジェクトのoidを取得できます。これで、
select * from table_name where oid = $last_oid
とすれば、今Instertしたタプル(行)を取り出せます。

それとも、取り出したタプルを簡単に表組して表示する方法がわからない
のかな?


156:名無しさん@お腹いっぱい。
2001/04/11(水) 14:34 ojYfWFHg
>>155
私もそれでいいと思います。

同時にinsert,selectの部分はトランザクション入れた方がいいかも。

oid取得後selectして、
表組みが面倒ならpg_fetch_array($r,$row)で配列に格納して
テンプレートファイルに埋め込むという手も。
見栄えはいいかも・・。



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

今晩家に帰って早速皆様から教えていただきました方法を試してみ
ます。
結果はまた今度お知らせします。

158:PHP-jp観察者
2001/04/11(水) 17:56
PHP-jp 11121
より引用。

-----------------------------
ってな、環境のシステムのプログラムを引き継ぐ事になってプログラムの改良を
行っているのですが、以下の様なコードで2回目のpg_execで処理が戻るまで
約40分くらい掛かってしまいます。
 ----------------------------------------------------------------------
  $sql1 = "SELECT * FROM usertable WHERE syumi='".$syumi_data."'";
  $user = pg_exec($conn, $sql1);
  $row = pg_numrows($user);
  $temp = "user_id in ('".pg_result($user, 0, user_id);
  for ($j = 1; $j < $row; $j++) {
   $temp = $temp."','".pg_result($user, $j, "user_id");
  }
  $temp = $temp."')";
  $sql2 = "SELECT * FROM maintable WHERE ".$temp." ORDER BY user_id";
  if (false == ($main = pg_exec($conn, $sql2))) {
   echo "検索失敗";
   return false;
  } else {
   echo "検索完了";
  }
 ----------------------------------------------------------------------

原因は、前のpg_execで見つけてきたuser_idが7000件近くあって、
-----------------------------

joinを知らない奴、逝ってよし。
しかも質問者は、selectを中止させる or postgresプロセスをkillする
方法を探してるときたもんだ。

159:153
2001/04/11(水) 19:44 5X9lWT8g
>>158
実は私が質問する際、PHP-jpと2ちゃんねるのどちらで聞こうか
迷いました。
最終的にこちらで教えてくれる人達の方が凄く親切・丁寧である
ような気がして、昨晩書き込みした次第です。
なんだかPHP-jpだと、初心者だと突き放されそうな気がして、ど
うも尻ごみしてしまいます。

160:Error 401
2001/04/11(水) 20:50
>>159
ここは、あまり煽ラーがいないので、いごこちいいですね。

161:電動ナナシ
2001/04/12(木) 10:39
>>158
これはちょっとショッキングだなあ。
SELECT m.user_id, .... FROM usertable u, maintable m WHERE u.user_id = m.user_id
AND u.syumi = :SYUMI ORDER BY m.user_id;
ってするだけの話だよね。

さっき pgsql にも流れてきたけど、根本的に SQL が分かっていないねえ。


162:Error 401
2001/04/12(木) 12:04
>>161
どんな言語が出ても、こうする人たちは一生こうしていくんだと思う。
で、「このSQL文投げると○○分帰ってきません」とかなる。

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

この間、ちょっとかかわった某大規模システムもそんな感じで設計されてた。
JOINを知らないのはおろか、数千レコードのあるカラムの合計を取ってくるのに、
数千回ループして、+=してた。
しかも、それ、Webシステムのサーバアプリ部分。どうなったのかな、アレ。

163:153
2001/04/12(木) 12:12 UHdu1Ra2
>>160
たまたま話題としてPHPの判る人でなければ煽れない(のかな?)
ということで、本当に煽ラーがいなくて助かります。
逆に皆さんの書き込み見ていると、欲しいと思っていた答えがズ
バリと回答されてたりしますので、この板を色々参考にさせてい
ただいてます。

164:名無しさん@お腹いっぱい。
2001/04/13(金) 00:34 I2dkOEWk
>155
 insert 直後なら、プライマリキーも保持したまま
だろうから、それを where につっこんだら
いいんじゃないのかな・・。
oid は、索引されてなくて遅い。


165:名無しさん@お腹いっぱい。
2001/04/13(金) 14:32
sage

166:153
2001/04/13(金) 23:38 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 7roKMnwY
そもそも 主キーはないの?


168:153
2001/04/14(土) 00:19 6zrOcEr.
>>167
一応テーブル内にはIDというフィールドを設けております。
上記の例ではinsert部分で省略して書いてしまいました。
IDはprimary keyで、自動的に番号を振るようにtest_id_seq
を設定してあります。

169:153
2001/04/14(土) 00:24 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 3tHlDu72
くっきー

171:名無しさん@お腹いっぱい。
2001/04/14(土) 12:22 .31zka6.
主キーを設定しているんなら、oidではなく、それを where に入れたらいいやんか。


172:cookie
2001/04/14(土) 12:52
sage

173:153
2001/04/14(土) 13:46 DdiGfCB6
>>171
ご指摘ありがとうございます。
その場合、今登録された主キーのIDはどのようにして特定すればいい
のでしょうか?

174:電動ナナシ
2001/04/14(土) 13:58
POST された内容に含まれているでしょ?
というか、主キーが意味はわかっていないのかな・・・。
テーブル中のレコードを一意に識別する ID に相当する列のことだよ。

例えば、人事テーブルがあって、そのテーブルが
(従業員ID, 氏名, 住所, 連絡先)
という風になっており、同姓同名の人を区別するために従業員 ID を使って
識別しているなら、従業員 ID が主キーになる。

普通主キーとなる列に対しては、重複する列の挿入を禁止するために
Primary Key 制約か Unique 制約を定義するけど、その辺ちゃんとやってる?
これは PHP とか PostgreSQL とかいう以前の、データベース一般の設計の
お話だよ?


175:電動ナナシ
2001/04/14(土) 14:34
>>174
おおっと、ID も Primary Key はあるって >>168 に書いてあるね。
勘違いしていた。ごめんなさい。

なるほどね、INSERT した直後に、自動的に割り当てられる ID をどうやって
特定するかって質問なのね。

これは先の人が書いているように oid を取得して特定するしかないんじゃないかな。
それ以外の列って重複する可能性があるから当てにならないしね。

ちなみに自分は自動連番はやってない。登録フォームを表示するときに
squence から番号を取得して、その番号をフォームに保持させておく。
そうすれば、POST された内容に ID が入っているのでそれをキーに参照
できるようになる。

これの欠点は、番号に欠番が生じるということ。だけどそれがそんなに気に
するほどのことかなあ。


176:名無しさん@お腹いっぱい。
2001/04/14(土) 15:02 PpPxojBE
insert した直後なら、currval( 'sequence名') に入ってるよ。
select currval() するのもよし、直接使うのもよし。



177:名無しさん@お腹いっぱい。
2001/04/15(日) 14:43 ymJfG9Fc
>>176
NO!
同じスクリプト内であっても、別なプロセスがINSERTしてしまえば
CURRVALの内容は変わってしまう。初心者にありがちなミス。
正解は電動ナナシ氏指摘の通りOIDの取得。

178:名無しさん@お腹いっぱい。
2001/04/15(日) 15:02 /XgA0t4.
>>177
 ほんとかな。begin, end で囲っているのに?


179:176
2001/04/15(日) 18:06 QgXC.DBc
>>177
>CURRVALの内容は変わってしまう。初心者にありがちなミス。
 同じセッション内なのに、currval の値は変わるのですか?
last_value の値は保証されないようですけどね。どうか教えてください。

 なんせ、初心者 なもので。


180:名無しさん@お腹いっぱい。
2001/04/15(日) 23:12 .dQ4e2NQ
age

181:名無しさん@お腹いっぱい。
2001/04/16(月) 00:28 HgcNtlTE
> 同じセッション内なのに、currval の値は変わるのですか?
>last_value の値は保証されないようですけどね。どうか教えてください。
やってみりゃいいじゃん。

182:名無しさん@お腹いっぱい。
2001/04/16(月) 00:41 HgcNtlTE
PostgreSQL7.1リリース・・・まじかみたいね。
ファイル名がpostgresql-7.1.tar.gzになってる。

183:176
2001/04/16(月) 01:22 BsAjfbqo
>>181
 変わらないよ。要はそれを言いたい。


184:176
2001/04/16(月) 11:46 rXDXOhM2
177 さんの場合では、変わるようで、
わたしの実験ミスも考えられるし、想定外もあるし、
特定の環境というケースもあるので、変わるケースがあるなら
教えて欲しいのですよ。


185:名無しさん@お腹いっぱい。
2001/04/16(月) 14:47
>>184

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

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

という問いには、

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

ということでよいでしょうか?>All

186:185
2001/04/16(月) 14:50
大間違い。

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

これは誤り。1DML1トランザクションでも、currval()は他のプロセス
(トランザクション)にかかわらず、普遍ですね。
セッション内で一貫性があるようです。

鬱氏。

187:名無しさん@お腹いっぱい。
2001/04/16(月) 17:04 rXDXOhM2
とどのつまり、今回の用途では、currval() は使ってもいいんでは


188:名無しさん@お腹いっぱい。
2001/04/16(月) 19:20 .KTK4KoY
というわけで、PostgreSQL7.1正式リリースage

# RDBMSについてしゃべる場所ってどこかないのかな?

189:名無しさん@お腹いっぱい。
2001/04/16(月) 21:24
まぁ、どうでもいいことなんだけど、MLで
「シーラカンス本」
「マンモス本」
を前提に語るのはやめて欲しいなー。
あ、俺は両方持ってるんだけど。
前者はバージョンが古いし、後者はちょっとアレだし・・・。
今一、人に薦めづらいんだよね、この本って。

190:名無しさん
2001/04/16(月) 23:32 XhwOU/N.
型でserialを宣言してるところに
insertで失敗してもカウントが1上がってしまうのですが
これはしょうがないことなのでしょうか?


191:名無しさん@お腹いっぱい。
2001/04/17(火) 00:07
sage

192:名無しさん@お腹いっぱい。
2001/04/17(火) 00:07 khLeTQ8c
MLはなんか変な奴多くない?
技術系ってそうなのかなぁ。妙に偉そうだったりするの

193:名無しさん@お腹いっぱい。
2001/04/17(火) 00:42
JavaHouseに比べればマシ。

194:名無しさん研究所
2001/04/17(火) 00:51
>>192
激しく同意。うかつに質問なんてできないっしょ。
だから意地になってマニュアル+マンモス本+過去ログで
自分で解決してる。恐ろしく効率悪いけど・・・

# 聞くは一時の恥、聞かぬは一生の恥 とも言いますが・・・

195:名無しさん@お腹いっぱい。
2001/04/17(火) 10:14
>>194
そう。ネット上じゃ逆だねぇ。。

196:名無しさん@お腹いっぱい。
2001/04/17(火) 12:33 O8m0NJyM
>>190
トランザクションを入れてみては・・

197:名無しさん@お腹いっぱい。
2001/04/17(火) 15:05 fcj0RQUQ
apache+PHP+postgreでシステム構築したいのですが、OSによる
環境の違いとかはあるのでしょうか?
あと、お勧めのOSは何ですか?

198:名無しさん@お腹いっぱい。
2001/04/17(火) 15:23
>>197
うーん、デフォルトの文字コードが違うとか、使えるシステムコールやライブラリ
のPHPのラッパ関数が違うとか、かな?

OSは、Linux系をお勧めします。

199:名無しさん@お腹いっぱい。
2001/04/18(水) 01:01 oVgMs8gw
>>190
>>196
トランザクションをアボートしても、serial型の場合、
インクリメントされちゃった値はもどんないよ~。
って、どっかのスレでも話題になってなかった?

200:153
01/04/21 16:07 2SRwUN3c
やっと皆様からご指摘いただきましたoid=$last_oidを条件に、
たった今insertで登録したデータをselectで引っ張り出すこと
が出来ました。
ありがとうございます。

201:名無しさん@お腹いっぱい。
01/04/21 19:35
えらい、時間がかかっとるやないか。

いや、ほのぼのとして、良いぞ。

202:153です
01/04/22 10:09 GJXSK57Q
>>201
実はスクリプト自体は皆さんのご指摘を元に作成出来ていたのですが、
ずっとエラーが出続けてました。
で、oid=$last_oidの部分が多分問題なのかと思って、ここを色々
いじくっていたんです。
解決出来たのは、もう一度スクリプトをじっくりと眺めていて、「"」
と「'」が2か所抜けておりました・・・

203:名無しさん@お腹いっぱい
01/05/05 16:54 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:名無しさん@お腹いっぱい。
01/05/05 17:35
' を \' に置換するだけ。

205:203
01/05/05 18:30 ejxtLiFA
>>204
%と_は?

206:名無しさん@お腹いっぱい。
01/05/05 20:35
前にエスケープ文字\ を入れろ。つか基本だべ?

207:203
01/05/06 16:11 kun4pZhs
'と%と_で全部?

208:名無しさん@お腹いっぱい。
01/05/06 18:36
>>207
シングルクォートのときはシングルクォートの前に入れるだけで良かったと思うけど。

209:名無しさん@お腹いっぱい。
01/05/07 20:18
7.1からvacuumいらなくなるって話聞いたことあったけれど、気のせい?
これさえいらなければなーとつくづく思うんだがね > PostgreSQL

210:名無しさん@お腹いっぱい。
01/05/07 20:56
>>209
残念ながら気のせいです。

211:名無しさん@お腹いっぱい。
01/05/08 18:58
PHPのPostgreSQLインターフェイスってUNIXソケットからローカルホストの
バックエンドに接続できないの?
pg_connectでエラーが出て、postmasterに-iをつけて起動しなおしたら
すんなり動くようになって、動くのはいいんだけれど、なんか気分悪い

親切な方教えてください

212:名無しさん@お腹いっぱい。
01/05/08 19:19 Nor6.bTw
UNIXドメインのソケット経由で接続できるはずです(やったことないけど)。
マニュアルの、「LIXPostgreSQL 関数」を参照。
pg_connect()の実引数が微妙に違うみたいです。

213:211
01/05/08 20:09
>>212
URLリンク(www.php.net)
の「表 1PostmasterとPHP」ってとこだね
ホスト名を明示しちゃうと、TCP/IP経由になっちゃうんだね
書いてあるとおりに書き換えたらUNIXソケットで接続してくれるようになったよ
どうもありがとう!

214:名無しさん@お腹いっぱい。
01/05/08 20:54
あ、章番号が変わってるんだ。ごめん。

そろそろ、自動でマニュアルをダウンロードしてmknmzかけるしくみを
作っとかんといかんな。

215:774
01/07/08 23:52 AeZs44/g
postgreSQL7.0を入れたのですが、psqlの中でヒストリ機能が使えません。
カーソルの上を押したら、前に打ったコマンドが出るようにしたいのですが、
どうしたら良いでしょうか。
ちなみに、通常のコマンドラインではカーソルの上を押せば
前のコマンドが出ます。

216:名無しさん@お腹いっぱい。
01/07/09 12:36
>>215

readline がないんじゃない?

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

>>215
OS はなんだろう?FreeBSD ?
./configure --with-libraries=/usr/local/lib ....
とかで解決できないか?

218:774
01/07/09 23:37 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:名無しさん@お腹いっぱい。
01/07/10 02:12
>>218

libtermcap を入れてみよー

220:218
01/07/10 08:58
またまたご回答ありがとうございます。
libtermcapも入っておりました。
うーむ。

221:名無しさん@お腹いっぱい。
01/07/10 16:49
>>220

となると、 config.log を見て readline を見つけそこなっている
原因を探るだねぇ

222:名無しさん@お腹いっぱい。
01/07/14 11:38 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:名無しさん@お腹いっぱい。
01/07/14 11:39 ZarpnJWo
↑原因はなんでしょうか。
フツーにselectで,tableの内容を表示しようとするとこうなる。
当方,管理者ではないので,設定イジくれません。

224:名無しさん@お腹いっぱい。
01/07/15 01:06 fduksvn.
pg_connect() でホスト名を空にしてないとか

225:初心者
01/07/23 06:07 xOk2bt2U
postgresのあるテーブルのdisplay_date列にdate型を格納してるんですが、
今日の日付と一致する行を表示するにはどうすればいいのでしょうか?

226:名無しさん@お腹いっぱい。
01/07/23 06:34 SYz87UN6
select * from "あるテーブル" where display_date = 'now'::date とか

227:225
01/07/24 02:01 goR17G.A
>>226さんありがおつございます。
で、cshで、.chsrcに「setenv TZ JST-9」としたものの、
psqlで、select 'now'::date;としても、7/24のはずが、
7/23(昨日の日付)が表示されてます。タイムゾーンが設定されていないようです。
postgresはunixとは別の独自のタイムゾーンを持つようだ、ということは、
マニュアルのdatetime-appendix.html
を見てなんとなくわかるのですが、しかしJSTに設定する方法が、これを見てもわかりません。
どうすればいいのでしょうか?

228:JAPU
01/07/24 04:11
set timezone to 'JST-9';
ついでにいうと、確認のためには select 'now'::datetime; が吉かもしれないにょ。

229:225=227
01/07/25 16:26 I8vfzaAc
>>228
すると、毎回set timezone to 'JST-9';の文章を実行しなければならないのですか_
あるいは、postgresの.chsrcみたいのがあればいいのですが・・・

230:名無しさん@お腹いっぱい。
01/07/25 17:23 bOBsSY92
postmaster を起こしたやつの timezone になるはず。

231:ナナシファン
01/07/25 19:13 xCgI2gSw
PHPでpg_pconnectを使ったときって、何かおかしくない?
ちゃんと動いているという事例を聞いたことがないんだけど、
期待通りに動いている人っている?

232:ほげ
01/07/25 21:06
>>231
期待どおりにって、SQL投げられるし別に普通だけど。

233:
01/10/11 22:30 tBxjcP4c


234:名無しさん@お腹いっぱい。
01/10/11 23:11
>ちゃんと動いているという事例を聞いたことがないんだけど、
狭い世界にお住まいなのですね。

235:Error401
01/10/18 17:24 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

236:Error401
01/10/18 17:35 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

237:Error401
01/10/18 17:37
すまぬ、pg_connect()とpg_pconnect()の場合が逆だった。

238:名無しさん@お腹いっぱい。
01/11/05 22:38 I5P+61E/
age がてら。

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

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

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

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

スレ違いならスマソ

239:名無しさん@お腹いっぱい。
01/11/06 15:52 aGDSTcYL
あれ?
電話番号の市外局番ってMax4桁になったの?

240:名無しさん@お腹いっぱい。
01/11/06 16:01
なったの?って昔からでんがな。

241:名無しさん@お腹いっぱい。
01/11/06 16:44
つか、5桁もある

242:名無しさん@お腹いっぱい。
01/11/06 18:24 y3LOZtVD
質問です。

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

説明下手でわかりにくいかもしれませんが、誰か、イイアドバイス、お願いします。
ド素人なので、その辺も考慮して、お願いします。

243:名無しさん@お腹いっぱい。
01/11/06 18:34 OqD8s6xc
>>242
マンモス本読んだ?

244:>>243
01/11/07 10:11 ieoCTquz
マンモス本読んだけど、いまいちよくわかんないんです^^;

245:名無しさん@お腹いっぱい。
01/11/07 11:28 ieoCTquz
>>243
どの変(ページ数とか・・・)教えてくれると助かるんですが・・・。

246:名無しさん@お腹いっぱい。
01/11/07 12:02
>>245
漏れが持ってる PHP3 用のやつでよければ 81 ページからあたり。

247:245
01/11/07 12:43 ieoCTquz
>>>246
自分が持ってるのは、PHP4なので^^;

248:名無しさん@お腹いっぱい。
01/11/07 12:56 rEwaGgOJ
>>242
PHP4のやつはP144,145あたりを読めばいいかと。
でもPostgreSQLのselect文を理解してからのほうが
いいな。

249:242
01/11/07 14:14 ieoCTquz
もう少し、本読んで、勉強しなおします。
ご教授、ありがとうです。

250:その他
01/11/09 16:03 vDpRquZJ
PostgreSQLのインストール後
regression testを行ったのですが、全てが「failed」
になってしまいました。けれども、createdbもcreatetableも
insertもselectも問題無しに出来ます。でも、あとあと支障とか
あるのでしょうか?知っている方がいらしたら教えて下さい。

251:hen
02/02/07 13:36 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: って帰ってきます・・

252:hen
02/02/07 13:42 Bho0YULV
$sql = "select item_id from item
where item_name = \"$itemname\"";

すんません
これに変えるとAttribute 'XX'not found

253:名無しさん@お腹いっぱい。
02/02/07 22:38 blA7jPNr
SQLで文字列は ' で囲む

254:  
02/02/07 23:32 z4yCqxdv
いつも、教わってばっかりだから、
たまにわ、教えてやるヨ
$sql = "select item_id from item where item_name = '$itemname'";
って書くんだよ。
''で、変数を囲むんだよ、
これ最強

255:
02/02/07 23:33 t9L0Eq4j
スレリンク(ad板)l50
スレリンク(ad板)l50
スレリンク(ad板)l50
スレリンク(ad板)l50
スレリンク(ad板)l50
スレリンク(ad板)l50
スレリンク(ad板)l50
スレリンク(ad板)l50
スレリンク(ad板)l50
スレリンク(ad板)l50
スレリンク(ad板)l50
スレリンク(ad板)l50

256:marois
02/02/10 22:51 MJ34x4JG
CGI版のPHP4をあるホスティングサービスで使っています。
pg_close($this->con);
のところで「pg_close -1」という値をクライアント(HTML上)
に返してきてしまうので困っています。
@を付けたり色々やってみたけど駄目。
同じスクリプトをPHP3で流すとOK。
ローカルのPHP4(Apache版)でもOK。
なにがいけないのでしょうか?
#このホスティングサービスPHPのサポートはしてくれないのです。

257:名無しさん@お腹いっぱい。
02/02/11 06:04 yEMLRxJJ
pg_fetch_object()でPGSQL_NUM(数値配列)引数を付けた場合,
次のような$rcプロパティでどのようにアクセスすればフィールドを
参照できるのでしょうか。

$this->rc[$i] = pg_fetch_object($result, $i, PGSQL_NUM);

258:  
02/02/11 18:01
>>256
pg_close($this->con); 自体を削除すればOK!
closeなんて、かかなくても、動く。

259:marois
02/02/11 20:58 PVwY953h
>closeなんて、かかなくても、動く。
動くとは思いますが、問題は出ないでしょうか?
一連のスクリプトで何度もOPENするのですが。
#セッションは1つなのでしょうか?
#疑ってすみません。

260:名無しさん@お腹いっぱい。
02/02/11 21:08
ついさっきOIDの表示の仕方忘れて大変だった、
select oid, * from table;
って書けばいいんだけどoid,とか記憶から消えてたね。
PostgreSQLの解説系のサイトどこに行ってもoid,の事には
あんまり触れてもないしgoogleでも引っかからないし・・・。

そういえばPostgreSQL関係で新しい本出てたね、あれなんだっけ?

261:  
02/02/12 00:06
>>259
書かなくても,問題でない。
どーせ、commitとか、してないんだろ。
そんな、PGだから、closeなんて、不要



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

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

同時接続50-100ぐらいを想定しているもので...ちょっと心配なのでした。


263:名無しさん@お腹いっぱい。
02/02/12 21:51
>>260
公式本とかいうやつか?
postgresql.jpのだろ。

264:名無しさん@お腹いっぱい。
02/02/18 21:01
とりあえず、PEARのDBクラス使いませんか?>ALL

コネクション云々を考える負担が軽減されますよ。

265:名無しさん@お腹いっぱい。
02/02/18 23:58
>264
pearてわからんちん・・・( ´Д⊂ヽ ウエーン

266:(=゚ω゚)ノ ◆SI2r4V0c
02/02/19 10:36
日本語マヌアルあるよ。

267:(=゚ω゚)ノ ◆SI2r4V0c
02/02/19 10:38
URLリンク(pear.php.net)

268:名無しさん@お腹いっぱい。
02/02/19 10:44
>>262
URLリンク(www.php.net)
らしいです。

あんまり神経質にならなくてもいいみたいです。

269:名無しさん@お腹いっぱい。
02/02/19 16:40
Postgreからtimestamp型のフィールドを取り出すとき、
日付の末尾に+9という値(GMT?)が付くんですが、これを取り外すには
どのようにすればいいんでしょうか。

270:名無しさん@お腹いっぱい。
02/02/19 16:59
>266
マヌエルて助っ人野球選手がいたよね昔。
(◕ฺ∀◕ฺ)

271:marois
02/02/19 23:38 SCYCQAYn
>>268
情報ありがとうございます。
大変参考になりました。

話が変わるのですが、皆さんは文字コードに何をつかっておられますか?
結構文字化けに悩まされています。(PHP3i18でも)
私の場合、EUCでソースを書いて、EUCでDBに格納しているのですが、ブラウザが
Shift-JISと間違って判断してしまう場合があるようです。
<meta .htaccess と色々試してみたけど、駄目なときがある。
Shift-JISでソース、Shift-JISでDB格納していらっしゃる方はいらっしゃいま
すか? どんな組み合わせが文字化けしにくいんでしょうか?


272:名無しさん@お腹いっぱい。
02/02/20 00:07
>270
情報ありがとうございます。
大変参考になりました。

273:名無しさん@お腹いっぱい。
02/02/20 11:00
>>271
理屈上は、EUC-JPオンリーな運用をすれば化けないはず。

でもそれは現実的な話では無いからなぁ…

274:名無しさん@お腹いっぱい。
02/02/24 05:50 IIwngioo
php+postgreでwebアプリ構築してるんですが、
ログイン画面でユーザが入力したID、パスワードを照会するとき、
IDでSELECT ID, PASSWD ... みたいに引っ張ってきて、
そのPASSWDとPOSTに入ったパスワードをmd5で照会する、
この方法って無意味ですか?(セキュリティ上の観点で)


275:274
02/02/24 05:52
>>274
事故レス。情報不足してました。
DBには裸の状態でパスが入ってます。


276:名無しさん@お腹いっぱい。
02/02/24 06:50 gC0AF2pI
>>274
 無意味。

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

 質問の内容からして効率悪そうな開発をしているっぽいので、
crypt関数と、mod_auth_pgsql について調べることをおすすめ
する。

277:274
02/02/24 13:30 IIwngioo
>>276
早速調べて入れてみました。
で、今さらなんですが、パスワードはphp以外の箇所(言語)でも使うため
仕様変更が難しいようです。
まあごく限られたネットワーク内での使用を考えてるので(外には出さない)、
それほどセキュアなシステムで無くても良いんですが、DBを暗号化せず
セキュリティを高める方法ってないでしょうか(SSL以外)。

278:名無しさん@お腹いっぱい。
02/02/24 18:08 L35l4mFf
>>277

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

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

 無い。

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

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

280:名無しさん@お腹いっぱい。
02/02/24 20:43 L35l4mFf
> どうやって元のパスワードを教えて上げるの?

 当然、教えてあげない。

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

 そうする。基本だよね?

281:名無しさん@お腹いっぱい。
02/02/26 00:31 EFcQI2qb
>>273
PHP3-i18nでもPHP4.0.6以降でも、出力だけSJISってのができるから、それが一番
問題起きないんじゃない? 出力がEUC-JPだと文字化けするブラウザは結構あるし。
PHP,DB内部はEUC-JPで、HTTP入出力はSJISでずっとやってますが、大きな問題は
おきてないな。


282:名無しさん@お腹いっぱい。
02/02/26 01:58 myAGwwd4
しつもーーん
URLリンク(www.jlb.dyn.to)
こんな感じで、みんなも、定期的に、バキュームしてる?
自分は、したことないぞーばきゅーむなんて。

283:名無しさん@お腹いっぱい。
02/02/26 02:19 R0qwrTOR
野球ヲタワラタ

URLリンク(ime.nu)

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

繰り上がり日数の指定ってできないのでしょうか?

285:名無しさん@お腹いっぱい。
02/02/26 15:19 ws1pgQhy
>>281

 MIMEヘッダーに文字コードをつければ化けない。
 HTMLファイルにも、httpd.conf や .htaccess に AddType を
加える事で可能。

286:  
02/03/24 17:12 S817rdf9
現在、PHP+PostgreSQLで小規模なDBシステムを開発していますが、
教えていただきたいことがあります。

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

ただ、現在はインストールした後ですので、後でpdflibを追加することは
可能ですか?厨房なので、詳しい方法を教えてくれませんか?よろしくお願いします。


287:nobodyさん
02/03/25 01:50 hKhhq3k3
>>286
 コンパイル時に組み込むものだから、後からは無理だと思われ。
 リコンパイルする手間はそんなに無いと思うので、やり直しをおすすめ。

> 厨房なので

 DBシステム開発自体を辞めておけ。

288:nobodyさん
02/07/31 14:56
PHP4.2.2セキュリティー対応上げ

皆さん入れ替えましたか?

289:nobodyさん
02/07/31 16:33
( ´,_ゝ`)プッ
URLリンク(freehome.kakiko.com)

290:nobodyさん
02/09/01 20:10 h2ERcGeK
何でこのスレッド書き込みが無いの?
とりあえずあげ。

291:b
02/09/01 20:21 hC+cV5mq
URLリンク(www.jsweb.sexheroes.com)

292:お役立ちサイトです。
02/09/01 23:25 eeJda9o6
究極の総合リンク集

URLリンク(home9.highway.ne.jp)


293:ノンノン
02/09/28 21:30 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 が使えない場合、どうやればいいのでしょうか?
どなたかご教授願います。

294:nobodyさん
02/09/28 21:38 B9guHGNW
整形してから引っぱり出すんじゃなくて
引っぱり出してから整形してください

295:hmk
02/09/28 21:39
よーわからんが、nichijiは本当にtimestamp型になっているのかぇ?

296:ノンノン
02/09/28 21:59 Mv9w8xYv
> よーわからんが、nichijiは本当にtimestamp型になっているのかぇ?

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

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

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

local($nichiji);

なんてものを使えば良いのでしょうか?


297:294 じゃないよ
02/09/28 22:17
「引っぱり出してから整形して」というのはたとえば、
EXTRACT(YEAR FROM nichiji) AS nchj_y,
...
みたいに SQL を書くという意味ではないかな。ちょっ
と手間は増えるけど、漏れはいつもこうしてる。

298:ノンノン
02/09/29 13:23 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 です。

299:297
02/09/29 13:49
>>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 lz5l3CdA
やっぱりそうですか。
ということは、to_char でエラーが出るのもパージョンのせいですね。
レンタルサーバなのでどうにもできません。
フィールドのタイプを変えるしかないないですね。
原因が分かっただけでも良かったです。

みなさん、ありがとうございました。
また、何かあれば願いしますね。


301:297
02/09/29 14:17
>>300
date_part 関数使えば、フィールドの型は変えなくて済むと
思われ。でも標準(略

302:やりたいのに
02/10/02 19:31
思い立ってから既に一週間。
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_ほにゃほにゃ系の関数を使う為には何をどう設定すればいいのかひたすら調査中です。
どなたか「おい、ここチェックしたのか」とか思い当たる事項があれば
突っ込んで下さると非常に喜びます(涙)


303:nobodyさん
02/10/03 06:22
Apache,PHP4,PostgreSQL7でWEB鯖構築するやり方載ってる本あったからそれでも見れば。onLinuxだったけど。

304:nobodyさん
02/10/03 06:33
Windows上でやったことないのでアレだけど、
WindowsってUNIXドメインソケット使えないよね?

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

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

みたいにして、あとは PostgreSQL の pg_hba.conf で
localhost からの接続の認証してやればいけそうな気がするが。


305:nobodyさん
02/10/03 06:34
つーか、エラーメッセージ見れ。
pg_connect()したときにエラーメッセージ出るだろ。


306:nobodyさん
02/10/03 06:38
スマソ。俺がカキコ見てなかった…。欝だ氏のう…。

307:やりたいのに
02/10/03 11:24
お返事多謝です。非常に喜んでます♪

>>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");
 なるほど、ローカルホストだぜ!って明示的に指定するわけですね。

早速やってみます!ありがとうございました。


308:nobodyさん
02/10/03 19:35
大助かりage

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

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



そんな漏れん家のサーバは1回/半年で十分だ。数秒で終わる(w

310:307
02/10/04 14:40 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とかその辺を更新した後、サーバごと再起動しないと駄目という
実に非現実的な環境になってしまいました(爆)

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

多謝多謝、多謝です~!

311:nobodyさん
02/10/06 21:27 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?
っていわれちゃうんだけど、解決方法わからないですか?

自分のパソコン上でやるとできるのですががが。

312:nobodyさん
02/10/07 01:33 hvZZAVT1
>311
まんまやん!
-i と一緒に走らせろよ。

pg_ctl stop
pg_ctl start -o "-i"

だな

313:312
02/10/07 01:37 hvZZAVT1
追加
DBが別サーバなら pg_hba.conf の一番下辺りの trust あたりを見る。
んで、適時追加する(アクセスするサーバへの許可)。
↑の起動オプションの追加やconfの変更が出来ないんならわからん!

314:nobodyさん
02/10/07 08:25 tYSAfVj4
つーか、ApacheとPostgreSQLが同じマシンで走ってるなら、
ふつーはUNIXドメインソケットで接続するんちゃうやろか。
-i オプションつけずに動かして。

なので、「host=$hst」つーのはいらないのでは?


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

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

そんなんされてたら、どうにもできんが(www

316:312
02/10/08 00:19 OGtZEEu6
をぉ!
隣のパソコン≠localhost ぢゃないか!!(w

逝ってくる...

317:nobodyさん
02/10/09 01:18 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;
}

318:nobodyさん
02/10/09 02:48 uMeBQ3Ig
カラムの型なんでしょう?

319:nobodyさん
02/10/09 07:54
つーか、なぜ $sSQL を加工する度に echo して調べないのかと小一時間(略

320:nobodyさん
02/10/16 17:38
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 38ZRylkG
WEB データベースでは 1ページ毎に

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

とするのが普通なのでしょうか?
DB オブジェクト $db をグローバル変数として
他のページでアクセスする方法はあるのでしょうか。


322:nobodyさん
02/10/22 10:47
> とするのが普通なのでしょうか?
普通。けど、ココはPHPのスレ。

323:nobodyさん
02/10/22 11:08
>>322
ええ。PHPスレと知ってて質問しています。
PHP-4.2.2 を使用してます。
PHPでグローバル変数は扱えるのかな? と思って質問しました。

現在、最初に postgres の user、password を入力させて
それを各ページに POST して使い回して connect しているんですが
みなさん、このようにして使っているのでしょうか。


324:nobodyさん
02/10/22 12:38 4eylDja6
>>323
session利用して保持すれば?

325:nobodyさん
02/10/22 15:18
pgpconnect?

326:321
02/10/22 16:15
>>324
そうですね。
各ページで connect を行う場合はそうします。

ただ、DBオブジェクト(今回は Class のオブジェクト)を
グローバル化出来れば便利(早い) だと感じたのですが、
皆さんそのようには作られてないようで...
何か、問題あるのかな?
もうちょっと、色々勉強してみます。


327:nobodyさん
02/10/22 16:43
>>321
>>325が自信なさげにつぶやいてるけど
URLリンク(www.php.net)
じゃ駄目なのかと?

328:321
02/10/22 17:21
>>327
ごめんです。
別に無視していた訳ではないです。>>325 さん。

今 Class と PEAR を使って色々勉強中でして、
「こんな風に出来ないものか?」と試行錯誤してます。
pg_pconnect は DB::connect( $dsn, TRUE ) で実現
出来るようです。
色々試してみたいと思います。


329:nobodyさん
02/10/22 20:50 bCdHvFBv
>>326
DBへの接続で、パーシステントな香具師が居たかと...
「永続的接続」だっけか?

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

つ~か、↑は、デバッグ時にはまった場合の話ね。
きれいになったコードでは問題ないはずだよ。

330:教えて君
02/10/30 20:04
上の永続的とかは関係なくて、
最初にconnectしてから
"begin"を宣言しておいた後、
放置してPHP終了した場合って、
"commit"しなかったんだから"rollback"しなくても良いんですよね?
pg_closeは省略できるらしいし。
どうなの?

331:330
02/10/30 20:05
要するに"rollback"も省略できるかってことです。

332:nobodyさん
02/10/30 20:11 CX80yU9D
どこが2重カキコなんじゃボケェ!
2重カキコじゃないってば!!>ERRORさん

rollbackは今までの作業を捨ててその後で新しく作業するのに使うんですよね?
取消で終了するなら言わなくてもいいっすよね?

333:330
02/10/30 20:12 CX80yU9D
>>332
俺です(鬱)

334:330
02/10/30 20:20 CX80yU9D
URLリンク(php.lamphost.net)
> BEGINで始まり、 そのトランザクションが有効な場合はCOMMITまたは ENDで終わります。
> トランザクションが失敗した場合、 そのトランザクションはROLLBACKまたは ABORTにより閉じる必要があります。
> ラージオブジェクトリソースを閉じる前に接続リソースを閉じないように して下さい。
エラーでこけたらどうなるんすか?

335:329
02/10/30 21:02 6KbHJvYg
>334さんへ

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

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



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

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


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

頼む!

336:山崎渉
03/01/15 13:47
(^^)

337:nobodyさん
03/01/18 03:13 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の設定をしないといけないのかな?と思いましたが、
なにか参考になる話を聞かせてくれませんか?

338:337
03/01/18 03:15 bdZI9lM1
エラーメッセージのうち user の箇所は nobody でやったりと
他のuserを使ったりはしています。

339:nobodyさん
03/01/18 03:35
>>337
pg_hba.confだろ。


340:337
03/01/18 03:49
>>339

そうですか
調べてみます。
ありがとうございました。

341:nobodyさん
03/02/26 18:10
どうしても2カラムで1キーになるテーブルが多いのですが、

a 102
b 2003
aとbでキー

そういう場合は

c 1002-2003
というカラムを作った方がいいですか?

342:nobodyさん
03/02/28 12:52 Gr9BwE/o
>>351
勉強し直してきてください

343:nobodyさん
03/02/28 19:20 qSGW/gfl

    ☆^~^★【新着情報追加】
   URLリンク(sagatoku.fc2web.com)
  あなたの探し物こちらで見つかります


344:nobodyさん
03/03/07 14:00 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
(^^)

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

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

いや、ダメだろうなぁ。なんかもったいないし?

347:nobodyさん
03/03/17 18:57 UoxJY4S2
>>346
昇順になってるカラムはないの。
あればそのカラムで逆順にソートして最初の10行を取得する。

348:nobodyさん
03/03/17 19:34 RRSo0s2u
>昇順になってるカラムはないの。
あります。

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

要はページに最新のデータから10件ずつ表示させていくヤツが
作りたいのです。

349:346/348
03/03/17 20:14 RRSo0s2u
出来ますた。
SELECT * FROM テーブル名 ORDER BY (昇順カラム) DESC LIMIT 10 OFFSET 0
ですね。サンクスです。

350:346
03/03/18 12:18 frl1VUIP
でも、テーブルの総行数を調べたい事ってあると思うんだけど
そん時は莫大なメモリを食いそうな(あくまで漏れの稚拙なイ
メージなんだけど)

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

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

あと、JOINってどんな時に使うの?

351:nobodyさん
03/03/18 12:30
>>350
count() 使え。
SQL の基礎について解説した本か、シーラカンス本買った方が良いよ。

352:346
03/03/18 14:44 frl1VUIP
>>351
サンクスでし。
SELECT COUNT(カラム名) FROM テーブル名
でしね。できますた。
シーラカンス本もマンモス本も持ってます。しかし、まだ敷居が
高すぎます。COUNTについて書いてあるのなんて1ページのほんの
少しでし。

JOINわかんねぇ。つまりテーブルを結合しる・・・と。
ブツブツ・・・。

353:nobodyさん
03/03/18 16:07 iRf6zAa0
足が短いと、どんな敷居も高く見える

354:346
03/03/18 17:11
>>353
なるほど。うまい。

『SQL Webデータベース/独習テキスト完全図解』\2800-すばる舎を
買ってきますた。出なおします。

355:nobodyさん
03/03/22 15:32
こんちわっす、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という数字が導きたいのだがどうしたらいいかわかりません、
続きのプログラムはどう書いていいのか分かりません、教えて下さい。

356:gn355my0
03/03/22 15:47
select no,hougaku from ~
じゃダメなん?

357:nobodyさん
03/03/22 15:59 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"];
となる。

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



358:357 ◆Kiss.FX29M
03/03/22 16:02
うひゃ、ageてもた。

>>356
noの取得が目的なら、
select no from ~
で、いいよねぇ。

359:nobodyさん
03/03/22 16:22
>357
できましたありがとう

360:nobodyさん
03/03/25 22:15 8MjhOhZv
perlでDBD::Pg使ってました。
結果を変数にぶち込みたいんだけど
$結果 = $db->selectrow_array("SQL文");
みたいに1行で片付けたい。
PHPだとどうすればいいんかな?

良くわからんのでとりあえず
$rs = pg_query($con, "SQL文");
$結果 = pg_fetch_result($rs,0,0);
にしてるんだけど何か変な気がするし。
昨日PHPはじめた漏れに誰か教えてクレイ。

361:nobodyさん
03/03/26 01:04
>>360
PEARのDB使え。
URLリンク(pear.php.net)

362:nobodyさん
03/03/26 18:48 +smbNkro
複数のファイルの値をひらいて
1回の起動で1ファイルに1回その値をINSERT INTOで
データベースに流し込んで
それを複数回繰り返しているPHPがあるんだけど
なんかメモリが急に100%になってすまう?

363:nobodyさん
03/03/27 13:31
>>362
メモリが100%になるってなんだよ。今まで半分しか使ってなかった
メモリがやっと100%使えるようになったって意味か?よかったな。

で、その100%って何を見て確認したの?


364:362
03/03/28 11:54 PjWv+k5d
>で、その100%って何を見て確認したの?
phpsysinfoってPHPなんすけど。見やすいのでコレで確認すてます。
URLリンク(phpsysinfo.sourceforge.net)
ひどくなってくるとスワップまで食い尽くしてメモリオーバーになっちゃう。
しょうがないのでリブート(まだローカルのテストなんでいいけど・・)。
なんか違う方法を考えよう。
CSVのデータを大量にDBに追加する時って何でやってますか?。皆様は?

365:362
03/03/28 12:08
ああ。COPYですればいいかぁ。
でも、COPYだと一度ファイルに落とさなきゃならないかぁ。
ブツブツ独り言でし。sage

366:nobodyさん
03/03/28 15:33
>>365
何が問題なんだかよくわからんが、とりあえずLinuxなら
URLリンク(www.math.kobe-u.ac.jp)
でも見れ。

367:362
03/03/28 16:41
>>366
おお、すばらすいページだ。こんなん探してますた。
サンクスでし。
なるほどぉ、LINUXのメモリ管理ってのはこうなってたのか。
勉強になりますた。

368:nobodyさん
03/04/16 18:58 0S8YCSoo
PHP4+PostgreSQLで、新しくWEBを作る時、
最近ではPEARとPHPlibはどっちがお勧めでしょう?

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

それと、どちらも詳しいリファレンスが乗ってる書籍とか
あったら教えてください。

369:nobodyさん
03/04/16 21:12 RoExleB5
6.xインスコしてある鯖使ったんだけど、
「JOINはまだ実装されていません」と言われてがーん
最新版にアップデートしたら、
「datetimeって型はありません」
といわれ、コードをすべて書き直した。
あーめんどくさ

370:nobodyさん
03/04/17 01:15
>>368
最近はPEARしか使ってないなぁ
ところでphplibってまだメンテされてるの?

371:368
03/04/17 09:56
>370
PHPlibはここに↓2003年1月13日のバージョンがあるようです。
URLリンク(sourceforge.net)
メンテされてるかは不明・・・。

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

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

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

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

それぞれ使ってる方の意見なぞ、きけるとうれしいです。


372:山崎渉
03/04/17 11:57
(^^)

373:nobodyさん
03/04/17 23:31 38lUA/N9
php_pgsql.dll下さい。
何処に落ちてますか。

374:373
03/04/17 23:37
やっぱり今のは無かったことに。

375:佐々木健介
03/04/18 00:19
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (5      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < こんなサイトを見つけた
|| | | |  \ ┃  ┃/    \  正直、スマンカッタ
| || | |    ̄         \_________
URLリンク(freeweb2.kakiko.com)

376:動画直リン
03/04/18 00:26 s9K3wIjP
URLリンク(www.agemasukudasai.com)

377:nobodyさん
03/04/19 16:04
あのさ、例えば従業員の名前やら住所やらが入ってる
データベースをブラウザから管理出来るようなシステム
をPostgresQL + PHPで作るとしますよね。

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

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




378:nobodyさん
03/04/19 16:17
LIMIT と OFFSET を使う。

379:nobodyさん
03/04/19 16:48
>>378
各ページを表示させるときはそうなんですけど、全件数が分からないと
各ページへのリンクを表示させるところでどう処理すればいいのかな
と思ったんです。

380:gn355my0
03/04/19 17:58
count()

381:名無しさん@Emacs
03/04/19 19:09
>379
100件表示するページなら、LIMIT 101とする。

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

当然、表示するのは100件までよ。


382:名無しさん@Emacs
03/04/19 19:10
ちなみに、全件数を知りたいなら、INSERTやDELETEにトリガを仕込んで
カウンタを別に持つ方が無難。更新の少ないシステムならね。


383:nobodyさん
03/04/19 22:19 3QKaD4h9
timestamp型をepoch秒で返す関数ってありませんか?

384:山崎渉
03/04/20 05:58
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

385:nobodyさん
03/04/20 07:17 JR0rvjcu
このスレ今日はじめて見ましたが、実務経験豊富な方が
大勢住んでいらっしゃるようですね。

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

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

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



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

SELECT * FROM hoge;

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

SELECT COUNT(*) FROM hoge;

として、バックエンドに数えさせるべき。


387:nobodyさん
03/04/20 15:04
>>386
レスサンクスです。とりあえずその方法に変更しておきました。
>>382
の方法ってのは、カウンタ用のテーブルを作成しておいて
他のテーブルが更新された時にそのカウンタを更新するよう
にトリガを仕込むってことですよね?更新頻度が多いと>>386
のほうが効率よいですか?

388:nobodyさん
03/04/20 15:34
>>387
自己レスですけどUPDATEは頻繁に行われるがINSERTと
DELETEはあまりないので、トリガ仕込んでみようと
思います。

389:nobodyさん
03/04/20 23:37 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
( ´∀`)/< 先生!!こんなのを見つけました。
URLリンク(web2001.kakiko.com)
URLリンク(www.web2001.kakiko.com)
URLリンク(web2001.kakiko.com)
URLリンク(www.web2001.kakiko.com)
URLリンク(web2001.kakiko.com)
URLリンク(www.web2001.kakiko.com)
URLリンク(web2001.kakiko.com)
URLリンク(www.web2001.kakiko.com)
URLリンク(web2001.kakiko.com)
URLリンク(www.web2001.kakiko.com)

391:nobodyさん
03/04/20 23:48
configure: error: no acceptable C compiler found in $PATH
エラーの内容が分かんないようだと、Win nativeなヤツを使うほうがいいかと。

392:nobodyさん
03/04/23 10:59
全件数をカウントする関数を作りたいんですけど、
今 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
>392
SELECT INTO

394:nobodyさん
03/04/24 09:51
>>393
SELECT INTO counters COUNT(*) FROM $1;
でいけますた。ありがとう。

395:nobodyさん
03/04/24 10:45
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
テーブル名指定したいなら、引数じゃなくてTG_RELNAMEが使えると思うけど?
TG_RELNAMEはname型だけどね。

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

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

マニュアル読んだほうがいいよ?ここ↓
URLリンク(www.postgresql.jp)
functionはここ↓
URLリンク(www.postgresql.jp)
結構判りやすいと思うんだけど・・・。


397:しろ
03/04/24 17:41
396は395のレスです。スマソ

398:nobodyさん
03/04/24 20:13
>>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
>398
> あとtempというテーブル名は例にあげただけで実際は違う名前です。
> まぎらわしくてすみません。

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

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

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

$1については下記に書いてあります↓
URLリンク(www.postgresql.jp)
要するにトリガで指定している引数の部分を指してると思います。

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

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

では頑張ってください。


400:nobodyさん
03/04/25 22:48
>>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';

とすることで成功しました。
で、本当にやりたいことなんですが

401:nobodyさん
03/04/25 22:56
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]);
としても同じエラーが出ます。こういうふうには使えないの?

402:nobodyさん
03/04/26 00:58
動的問い合わせには EXECUTE を使え。
いま環境ないからてきとうだけど、

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

でどうよ。

URLリンク(www.postgresql.jp)
23.5.4. 動的問い合わせの実行

も見れ。

403:nobodyさん
03/04/26 12:05
>>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'
という文字列を実行するってことですよね?
||の意味がよく分からないので、そこに問題がある
気がします。ドキュメントを読んでもダメでした。
||はどういう意味なんですか?

404:nobodyさん
03/04/26 18:37
>>395
「業者2人」がたいへんそうですね

405:402
03/04/27 21:51
>>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';

|| は文字列の結合です。

406:nobodyさん
03/04/27 23:08
>>405
上手くいきますた!
長年の夢が叶った感じです。どうもありがとう。

407:nobodyさん
03/04/29 11:51
URLリンク(itb-tech.itboost.co.jp)
PostgreSQLでセッション変数管理したいな
と思ってたんですけど、ここ見たらmysql
の方がいいかなと思ってしまいました。
みなさんはどうしてます?

408:nobodyさん
03/04/29 13:04
>>407
対象pgsqlのバージョンが古そうだな。今は稼動しながらvacuumできる。
ま、セッション管理のためだけなら、軽いと言われるMysqlの方がいいかもね。


409:nobodyさん
03/04/29 16:42
>>408
今はPostgreSQLだけ導入しててセッション管理は/tmpでしてます。
セッション管理のためだけにmysql導入するの躊躇してましたが
稼働しながらvacuum出来るならちょっと試してみます。レスどうも
です。

410:nobodyさん
03/05/07 16:15 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
>410
秀丸とPeggy Proつかってまつ。

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

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

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

他にももっとマシなやりかたあるかもしれないけど。

412:nobodyさん
03/05/07 17:04
「その他」「動作環境」「編集」「文字コードの自動認識をする」「詳細」

413:410
03/05/07 19:15 o2l25maR
>>411,>>412さん、ありがとうございます。
なるほど、出来ました。
それから、Peggy Proってのを探して使ってみました。
これいいですね。411さんはどっちを使ってますか?

414:nobodyさん
03/05/07 19:34 n2ggMpEP
どうすりゃいいの?
      /        /       |    ヽ           \
 ∧ ∧/         /      |     ヽ          ∧\∧
( / ⌒ヽ        /         |       ヽ         ( / ⌒ヽ
 | |   |         /         |      ヽ           | |   |
 ∪ / ノ         /        |        ヽ         ∪ / ノ
  | ||   ミ    /            |           ヽ       / / /
  ヽ_)_)     ∧/∧         |        ∧ヽ∧  彡  しl_ノ
        ( / ⌒ヽ        |        ( / ⌒ヽ
         | |   |  ミ   ∧ |∧  彡    | |   |
         ∪ / ノ     ( / ⌒ヽ        ∪ / ノ
          | ||        | |   |         / / /
          ヽ_)_)      ∪ / ノ        しl_ノ
                   | ||
                   ∪∪
日本ロジテム(一部上場、みずほの融資先)の
子会社せいも素(みずほの融資先)でサービス残業の過労による自殺者が出た。
URLリンク(www.samos.co.jp)<)l50
スレリンク(company板)l50

415:しろ
03/05/07 19:44
>413
「どっち」とは??
使っているのは「秀丸とPeggy Pro」です。

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

Peggy Proはシェアだけど、他の色んな言語に対応してるし、
高機能なので結構重宝してまつ。

416:nobodyさん
03/05/07 19:48 JylB+nG2
●貴方に代って恨み晴らします● 【復讐・特殊業務】
--------●○●別れさせ屋●復讐代行業務●○●----------
●騙された・裏切られた・弄ばれた・逃げられた・捨てられた・
相手に誠意が無い・異性問題・家庭内暴力・不倫疑惑解明・人間関係・金銭トラブル★ URLリンク(www.blacklist.jp)
別離工作・情報収集・トラブル対策・ボディガ―ド・等々!
●真剣にお悩みの方、安心してご相談下さい。解決へ導きます★
□■各種データ・電話番号調査・住民票・戸籍謄本など調査■□
   URLリンク(www.blacklist.jp)
【注意】ジャンプしない場合はURLをコピーしてファイルから開いて下さい●○● URLリンク(www.blacklist.jp)
--------------------------
◆リンク◆復讐現場密着24時◆ URLリンク(www.123456789.jp)


417:413
03/05/07 23:41
>>415しろさん、遅レスすみません。
Peggy Proが便利そうなんで、PHPソース書きなら秀丸の出番が
無いかなと思ったもので、、、、聞いてみました。

418:nobody
03/05/08 04:11 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 R/vnapw0
URLリンク(homepage.mac.com)

420:しろ
03/05/08 10:24
>417
Peggy Pro一本でも全然問題ないと思いますよ。好みの問題ですね。
自分は単に秀丸にマクロ入れてるのがあるので
それ使う時だけ秀丸使ったりとかです。

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

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

あとは「PHP4徹底攻略」あたりかな。
赤マンモスの方はPDFにもなってる↓
URLリンク(www.net-newbie.com)


421:418
03/05/09 18:21 STzTzCJD
>>420
早速本屋に逝ってきました。参考になりますね。
また分からないことがあればお世話になるかもしれません。
その時はよろしくです。ありがとうございました。

422:nobodyさん
03/05/11 01:35 6HQj9LIx
従業員の名前、住所、メールアドレス、電話番号をDBで
管理していて、普段はメールアドレスの検索が主な操作
な状況です。こんな場合、メールアドレスだけ別テーブル
に保存して検索するのと SELECT mail FROM hoge みたい
に検索するのってどっちが効率いいんですか?

423:nobodyさん
03/05/11 01:36
えーと、indexを貼るのもよろしいかと。

424:nobodyさん
03/05/11 02:21
>>423
CREATE INDEX ってやつですか?

425:nobodyさん
03/05/11 02:27
従業員の管理ったってそんなに大人数でもないだろうに

ポスグレでも20万件程度までならサクサク動くから

426:nobodyさん
03/05/11 03:59
小規模なとこで働いてる限りあんまり
チューニングってのは考えなくていい
んですかね。やっぱり。

427:nobodyさん
03/05/11 04:14
>426
Accessでどうのこうのといったレベルなら。
小規模でもオンラインゲームのマップ情報とかDBに載せてたりすると
チューニングが肝です。

428:nobodyさん
03/05/12 06:11
postgresもObjectBrowser
みたいなもんがないのかねー

429:nobodyさん
03/05/12 11:45
これじゃダメ?

URLリンク(www.hi-ho.ne.jp)

430:nobodyさん
03/05/12 15:41
7.2.3でDBのエンコーディングをEUC_JPにしてスキーマをつくって、
JDBCからアクセスするアプリをつくってみたんですが、~とかマルイチなどの
文字が化けてしまうんですよね。。どうにかなりませんか?
ポスグレはShift_JISエンコーディングはサポートしていない??


431:428
03/05/13 14:33
>>429さん
ありがとうございました。
なんなものがあったなんて知らなかったよ




432:nobodyさん
03/05/15 11:09 LGr+4aCV
>>429
ここのページのDB利用実態調査が面白い。
特に、MyとPostへのLOVE度、ワラタ。

433:bloom
03/05/15 11:10 fs87NLJj
URLリンク(homepage.mac.com)

434:nobodyさん
03/05/16 03:28 3cK7BkGM
$sql = "SELECT passwd FROM customer_auth WHERE login = '".$login."'";
このSQL文を実行すると条件に1つもマッチしない場合エラーになりますよね。
@$rec = pg_query($conn,$sql);
if (!$rec){
exit("そのようなユーザーは存在しません。もう一度確認して下さい。");
}
としても $recがTRUEになってるみたいで上手くエラー処理をしてくれません。
何かよい方法ないでしょうか。

435:nobodyさん
03/05/16 03:36
>>434
エラーにはならんだろう。
if(!pg_num_rows($rec)){...
でどうよ。

436:nobodyさん
03/05/16 10:24
あ、なるほど。データがなくても別にエラーにはならない
訳ですね。それで上手くいきました。ありがとう。

437:田中
03/05/16 12:32 shMd76bE
先ずはココを見てください!
本当に、すごいです。
URLリンク(www.c-gmf.com)

438:山崎渉
03/05/22 02:02
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―

439:山崎渉
03/05/28 17:19
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎―◎                      山崎渉

440:nobodyさん
03/06/03 17:33 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と同じように、件数のチェックをして
エラーチェックをしたいのですが、削除の場合の件数は
取得できないのでしょうか?

何か間違ってるでしょうか。。

441:440
03/06/03 17:34
>440 の2行目まではコピペのミスです、スミマセン;

442: 
03/06/16 11:17
最近の PostgreSQL って pg_atoi() のチェック厳しくなりましたよね。
おかげで

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

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

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

↑のようなパターンが随所にあって、
手動での修正はかなり厳しいものがあります。
何かいい方法はないでしょうか?

443:nobodyさん
03/06/19 00:43
MySQLとPostgreSQLの違いって何ですか~
初心者で御免


444:nobodyさん
03/06/24 11:30 s+ewonQw
レンタルサーバーでPHP+Postgre使ってます。(WebProg経験浅いです)

データベースのテーブルデータをフォルダに移したいのですが
select * from テーブル名 into outfile '/usr/home/xxxx/ファイル名'
と言うsql文は普通に使えるはずでしょうか?
どうしてもparse error at or near "into"が出ます。
単純なミスでしょうか。よろしくお願いします。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch