トップページphp
1001コメント345KB

PostgreSQL

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2001/05/09(水) 11:36ID:GHX.oCXo
PostgreSQLについて語りましょう。
関連アプリケーション特有の話題は、以下のスレッドへ。

☆関連スレッド
[PHP + PostgreSQL]
http://corn.2ch.net/test/read.cgi?bbs=php&key=983128806
[PHP以外+PostgreSQL]
http://corn.2ch.net/test/read.cgi?bbs=php&key=988929199
[MySQL vs PostgreSQL]
http://corn.2ch.net/test/read.cgi?bbs=php&key=989341364
0334nobodyさん02/06/16 02:06ID:8EBDLVWp
Yahoo!とかFreeMLみたいに、階層にページをわけて、
「aaa > bbb > ccc」みたいに現在地を表示させるには、
postgresだと、データをどうやって持たせるのが得策(定石?)なのでしょうか?
033533202/06/16 10:42ID:IP4vfeht
>>333
 反則技としては pg_dump を用いて、CREATE TABLE しているところを
確認すればよい。以下のような文が見つかるはずだ。

Constraint "initial_error_no_pkey" Primary Key ("initial_error_no")

>>334
 自己結合(プ
0336nobodyさん02/06/16 12:06ID:O6K9M+cM
>334
3階層のフィールドを用意するだけ
0337初期不良02/06/16 17:29ID:???
>>335
ありがと。なんかやる気出た。
0338初期不良02/06/16 17:41ID:???
キタ━━━━(゚∀゚)━━━━ ?
select indkey from pg_index
where indisprimary=true and indrelid=(
 select oid from pg_class
 where relname = 'tablename'
);
これで int2 の配列が帰ってきて何番目のフィールドが
プライマリキーかがわかる。あってる?
0339初期不良02/06/16 17:44ID:bMMKPpy6
さげてもた
0340初期不良02/06/17 09:59ID:???
>>338
よく見たら \d tablename で出てくるインデックス(tablename_pkey 等)を
調べればわかることだったんだな...
\d tablename_pkey とすると出てくる。
unique の場合は tablename_fieldname_key のようなインデックスができるので
\d tablename_fieldname_key
とすれば unique なフィールドがわかる。
けど、テーブル名から調べる場合は前に書いたやり方の方が良さそうだな。
unique の場合はこうすればよし?
select indkey from pg_index
where indisunique=true and indisprimary=false and indrelid=(
 select oid from pg_class
 where relname = 'tablename'
);
0341質問君Φ02/06/19 11:01ID:qIh4juAy
だれかシーケンスを自動作成するtriggerを作成するヒントくれ
insert delete updateの際に欠番なしでシーケンシャルに増減するような奴

作ってみたんだが、どうしても無駄な番号アトリビュートを使って
orderbyしてupdateするという陳腐な方法しか思いつかん
もっとスマートに出来るはずだ。
よろしこ
0342初期不良02/06/20 00:04ID:???
>>341
ちょっと意味が分からんのだけど
serial で delete すると穴が空くけどそれを詰めたいって事?
0343初期不良02/06/20 00:05ID:???
>>342
俺のも意味が分からんな...
serial 型のフィールドでシーケンスをつくるとって事ね。
0344質問君Φ02/06/21 13:36ID:???
お前あたまいいいいいいいいいいいいいいいいいいいいいいいいい
そう言うこと
0345初期不良02/06/21 13:44ID:???
>>344
どういうの作ったかみしてケロ
0346nobodyさん02/06/25 03:48ID:XBDHwftN
データベース内に指定したものがあるかないかで処理を変えるプログラムを作ろ
うとしています。とりあえず以下のようなものができあがりましたが、もっと簡
単で効率のよい方法ってありますか?

selectrow_arrayref()よりもこの場合に適したものがあるんじゃないかと思って
訊いてみました。

use DBI;

$string = "文字列";

$dbh = DBI -> connect ("dbi:Pg:dbname=testdb", "a");
if ($dbh -> selectrow_arrayref("select * from images where url = '$string'")) { print "ある\n"; }
else { print "ない\n"; }
$dbh -> disconnect;
0347nobodyさん02/06/25 03:56ID:???
>>346
もしそのあとに何かDBでするんだったらPL/pgSQLで書いたほうが
いいとは思うが、Perlからやるんだったらこうか?

my $dbh = DBI->connect(...);
my $sth = $dbh->prepare( 'SELECT 1 FROM images WHERE url = ?' );
$sth->execute( $string );
if( $sth->fetchrow_arrayref ) { # 多分$sth->rowsでも平気かな
print "ある\n";
} else {
print "ない\n";
}
$dbh->disconnect;
0348nobodyさん02/06/26 01:44ID:WIsWhSE/
>>347
なるほど。
ああ…まだまだ勉強不足…。
ありがとうございました。
0349nobodyさん02/06/27 18:35ID:eHTNEubk
インストールしてみたがまともに動いてるのかまったくわかりません。

php4とpostgresqlが入ってたらまともに動くという
超簡単な環境検証用スクリプトみたいなものありませんかね?
本当に小さいものでかまわないです。
php4とpostgresqlに詳しい方であっという間に作れる方いませんか?
0350nobodyさん02/06/27 21:37ID:fDXVhhFf
>>439

まずは PHP を捨てるところからはじめよう。
0351nobodyさん02/06/28 00:10ID:???
>>349
てめー、おちょくっとんか氏ね。
0352nobodyさん02/06/28 07:27ID:xBL4mzWk
>349
逝ってよし
0353CHANCE FOR EVERYONE02/06/28 17:31ID:hU48lsFK
インターネットは使い方次第で個の力を何倍もの力に変えることが可能です。
費用対効果で他の媒体にこれより優れたものは無いでしょう。
長い目で見ても素晴らしいネットワークビジネスの紹介!!
私たちの参加しているネットワークビジネスは 在庫をもつ必要がなく、
製造メーカーの製品を直接広めるものです。
私たちのグループは、製造会社の製品をHPとメールという媒体も活用して、
低価格、高品質なよき製品を広めようという集まりです。
流通コストを消費者に還元して製品を広めるというこのシステムは、
何人かの識者が本などで発言しているのを読んでみると、
人間的かつ将来有効なシステムを創っていける可能性の大きいものだと感じます。
実際、有名な大会社AT&T、GM、マスターカードなども採用しだしています。
興味のある人には、ぜひ参加して一緒にやってみましょう。
以下のホームページでの説明も御覧ください。
http://ailove22.fc2web.com/lpd/index.html
0354nobodyさん02/06/29 10:20ID:???
>>353

>インターネットは使い方次第で個の力を何倍もの力に変えることが可能です。
>費用対効果で他の媒体にこれより優れたものは無いでしょう。

誰だって知ってる

>長い目で見ても素晴らしいネットワークビジネスの紹介!!
>私たちの参加しているネットワークビジネスは 在庫をもつ必要がなく、
>製造メーカーの製品を直接広めるものです。
>私たちのグループは、製造会社の製品をHPとメールという媒体も活用して、
>低価格、高品質なよき製品を広めようという集まりです。

禿げしく既出。

>流通コストを消費者に還元して製品を広めるというこのシステムは、
>何人かの識者が本などで発言しているのを読んでみると、
>人間的かつ将来有効なシステムを創っていける可能性の大きいものだと感じます。
>実際、有名な大会社AT&T、GM、マスターカードなども採用しだしています。

さらに既出のシステムだと自分で公言してるし…。

>興味のある人には、ぜひ参加して一緒にやってみましょう。
>以下のホームページでの説明も御覧ください。

ところで、2chにコピペすることは経営的に見て正解なのか?
0355libpq02/07/01 00:16ID:???
libpq(PostgreSQL 7.2.1)を利用してWindowsのクライアントを作成中の者です。
マニュアルに目を通していると、PQconnectdb()のパラメータにrequiresslを
指定できるとあったのですが、Windowsのクライアントでこのパラメータを実際に
使用している方はいらっしゃるでしょうか?
0356nobodyさん02/07/01 10:01ID:b4xBEoiz
データベースに保管してある、Perlのcrypt関数で暗号化した文字列を
参照してパスワード認証を行う方法を考えています。

以下のスクリプトだとうまくいくのですが…。

print "名前:\n";
$name = <STDIN>;
chomp $name;
$pwd = <STDIN>;
chomp $pwd;
$dbh = DBI -> connect ("dbi:Pg:dbname=testdb", "test_user");
$pre = $dbh -> prepare ("select password from test_list where name = '$name'");
$pre -> execute;
while ($i = $pre -> fetchrow_array) {
print "データベースに保管してあるパスワード\t$i\n";
if ((crypt ($pwd, $i)) eq $i) { print "OK\n"; } else { print "NG\n"; }
}
$dbh -> disconnect;

while文内のif文を、$dbh -> disconnect;文以下にもってくると
うまく処理されません。どうやらwhile文で使った$iは、$dbh -> disconnect;
した後は消去されてしまうようです。

$dbh -> disconnect;した後もスカラ変数や配列に代入された値を
そのまま保持する方法ってありますか?

なんか見当はずれの質問をしているっぽくて不安なんですけど…。

よろしくおねがいします。
0357初期不良02/07/01 14:10ID:???
>>356
なんだか perl な話だが、$i = $pre -> fetchrow_array
って事は array が返ってきているわけだよな?
スカラーに入れるって事はリファレンスになっちまってないかい?
password しか select してないからそれでも使えるのかもしれないけど
本当は参照の代入じゃなくて @i に入れてきちんと値のコピーを取るべきだろね。
そしたら disconnect したあともコピーした方は残ってるでしょ。
0358nobodyさん02/07/01 15:01ID:???
>>356
>while文内のif文を、$dbh -> disconnect;文以下にもってくると
の意味がよくわからんのだが、

$dbh -> disconnect;
while ($i = $pre -> fetchrow_array) {
print "データベースに保管してあるパスワード\t$i\n";
if ((crypt ($pwd, $i)) eq $i) { print "OK\n"; } else { print "NG\n"; }
}
→ $dbhをdisconnectした後にfetchrow_arrayを呼んでも無効

while ($i = $pre -> fetchrow_array) {
print "データベースに保管してあるパスワード\t$i\n";
}
if ((crypt ($pwd, $i)) eq $i) { print "OK\n"; } else { print "NG\n"; }
$dbh -> disconnect;
→whileを抜けた後は$iがundefになっているので比較しても意味なし

のいずれかでは?
0359初期不良02/07/01 23:18ID:???
>>358
>whileを抜けた後は$iがundefになっているので比較しても意味なし
うう、これだぁね、たぶん。
俺の目が節穴だった...
0360nobodyさん02/07/03 23:21ID:9oP/71OL
updateで、set total = total+100みたいな書き方をすると、
Warning: PostgreSQL query failed: ERROR: Unable to identify an
operator '+' for types 'varchar' and 'int4' You will have to
retype this query using an explicit cast in ***.php on line ***
と出て先へ進めません。何か間違ってますでしょうか。
0361nobodyさん02/07/03 23:31ID:???
>>360
自分で書いてるじゃないか。きみはそれでもアメリカ人か?
0362nobodyさん02/07/04 00:45ID:???
え〜と、なになに…。ばーきゃら型といんとふぉー型のどちら向けに'+'を使えば
ええか識別できんって書いとるね。
このコードは多分、ばーきゃら型のtotalにいんとふぉー型と解釈された100を加算
しようとしたからエラーになっとる。型を合わさなあかんてことやね。
ん〜。ほら、後ろのほうに「はっきり型変換してくれ」て書いとるがな。
0363nobodyさん02/07/07 02:35ID:xYfdkDpE
すいません、むちゃくちゃ初心者なのですが、検索してもわからず・・・
postgresのテーブルにそこにExcelデータをインポートしたいのですが、
ふつう、どうやってやるものなんでしょうか?

#アクセスのリンクテーブルでやればいいのかなとも思ったのですが、
postgresのテーブルにしか存在しないフィールド(serial型)があるもので、
ペーストしようとしても、怒られてしまいます。
0364nobodyさん02/07/07 05:00ID:???
おいらはCSVで保存してPerlでパースして、SQL作ってダラダラ流し込んでる。
0365nobodyさん02/07/07 07:18ID:???
無駄に検索する前にマニュアル読もうぜ、なあ兄弟。
http://www.postgresql.org/idocs/index.php?sql-copy.html
ポイントは一番下のユーザーコメントね。
0366nobodyさん02/07/07 15:04ID:???
psqlで、insert into hoge(myouji) values('山田');をペーストしようとしても、
「山田」の部分が「\123\332\222」のような文字列で表示されてしまいます。
(DBにはきちんと登録されている)
これはなぜなのでしょうか?

なお、Teraterm日本語版を使ってます。(送信、受信ともEUCに設定しています)
また、コピーした文字列は、明らかにEUCです。
0367nobodyさん02/07/07 16:24ID:???
>>366
ユーザの環境変数LANGは何?
0368nobodyさん02/07/07 16:34ID:???
createdbのときに--encodingを指定しる。
036936602/07/07 16:36ID:mEMpxNTI
言い忘れましたがFreeBSDです。
で、setenv LANG=ja_JP.EUC
したのですが、症状は変わらずです。。。
#自分、はずしてますでしょか・・・
0370初期不良02/07/08 00:52ID:???
>>363
漏れも基本的には >>365 と同じなんだけど、
Excel ってセルを選択してコピー、テキストエディタで
ペーストするとタブ区切りのテキストになる。
これ CVS で出力より便利。
これを COPY コマンドで流し込んで、最後に
SELECT setval('table_id_seq', (SELECT max(id) FROM table));
なんてやってやるといいかと。んでリレーションの関係で
INSERT しないといけない場合は >>364 の方がいいかと。
0371初期不良02/07/08 01:05ID:???
>>369
ports/japanese/postgresql7
のを入れると大丈夫だったぞ。
普通のでもなんとかできるかも知れないけど
最後の手段として。
0372nobodyさん02/07/08 15:29ID:Qyr7qWYN
>>363
1.awk か perl を使って先頭に行番号を入れたファイルを作る。
awk '{print NR "\t" $0;}' < source.txt > destination.txt

2.psqlを使ってインポートする
copy "target table" from "source.txt"

3.シーケンスをインポートした数より増やす
select setval('sequence name',10000);
0373nobodyさん02/07/08 16:42ID:???
>370
てゆーか、Excelってタブ区切りファイルに保存できるべ。ふつーに。
0374初期不良02/07/09 09:20ID:???
>>373
いや、それが面倒だから...
0375nobodyさん02/07/09 13:48ID:???
オラクルマスターやめて ポケモンマスターになりたいんだけど
なんかある?
0376nobodyさん02/07/09 22:48ID:???
失礼すマスタ
0377nobodyさん02/07/17 22:44ID:pXjI4Thg
まだ設計段階でPostgreSQLの実行環境がないのでここで
質問させていただきます。

テーブルの継承を行った際のバックアップですが、
上位から継承したテーブルを\copyコマンドで指定して
バックアップをとったら、上位の継承元のテーブルと
いっしょにバックアップされるのでしょうか? それとも
下位のテーブルのみが対象となるのでしょうか?
どなたかご教授お願いします。
0378nobodyさん02/07/18 00:51ID:???
ここらへんかな?

http://ml.postgresql.jp/pgsql-jp-old/pgsql-jp/2001Dec/msg00295.html
0379ごんた02/07/18 13:46ID:q5AT3Pt2
PostgreSQLと相性のいいJ2EEアプリケーションサーバってある?
ただしリーズナブルなやつで。。
0380nobodyさん02/07/18 16:34ID:zcxvlzIl
>>378
ありがとうございます。バックアップできる様ですので
検討してみます。あと継承機能を使った際、処理が増える分、
パフォーマンス的には落ちるのでしょうか?
その辺り触れたページが見つからなかったのでご存知の方
教えてください。
0381初期不良02/07/18 20:06ID:5Jy0ruag
XMLPGSQL って使ってる人いる?
ドキュメントが少ない気がするけど
SoftwareDesign のバックナンバー取り寄せた方がいいのかな?
0382nobodyさん02/07/19 14:31ID:???
>379
jbossかな?

>381
いまんとこ、DOMで事足りてるからねぇ。
0383nobodyさん02/07/20 00:24ID:???
postgres以外のユーザから
psql -U postgres
ってやったらパスワードも求められずにpostgresユーザでログインできたけど
PostgreSQLってそういうモンなの?
0384Name_Not_Found02/07/20 00:50ID:???
>>383
pg_hba.conf で設定しる!
0385nobodyさん02/07/20 08:48ID:???
local all password
host all 127.0.0.1 255.255.255.255 password

ってやってもパスワード聞かれないよ〜
0386nobodyさん02/07/20 17:53ID:???
pg_hba.confの上の方でlocal trustとかやってるに5万リペカ。
0387nobodyさん02/07/20 20:34ID:/K3zxWeq
PostgreSQLって -i 付けて起動しないと
DBD::PgやPHPで使えないんだっけ?
0388nobodyさん02/07/21 18:28ID:???
PHPは使える。
DBD::Pgは使ったことないから分からんけど、多分大丈夫。
0389Name_Not_Found02/07/21 23:55ID:???
>>388
man DBD::Pg すると
-i が必要だよーんって書いてあるよ。
0390初期不良02/07/22 03:25ID:???
>>389
postgresql 用 JDBC インターフェイスも -i が必要だね。
unix ドメインソケットに対応している PHP の方が珍しいのかも。
039138802/07/22 15:07ID:???
がーん、ごめんよー。
0392nobodyさん02/07/24 18:53ID:xJEMjSg0
将来使うかもしれない項目という理由で、
テーブル内に空のTEXT型のフィールドを10個くらいあらかじめ用意すると、
レコードが大量に増えてくると容量的にどの程度コストがかかりますか?
あとからalter tableで追加シル!という意見は要らないです。
0393nobodyさん02/07/25 20:30ID:4Z9IBTld
>>392
 可変長テキストであるため、NULLが入っている限りたいした量ではないです。
 1個のTEXT型で10バイトもとらないと思われます。

>あとからalter tableで追加シル!という意見は要らないです。
 正規化しましょう。
0394nobodyさん02/07/26 03:33ID:???
hostとportを指定しなかったらDBD::PgでもOKだったよ。<-i 無し
0395Name_Not_Found02/07/26 04:30ID:???
>>394
まじですか。
んじゃ JDBC だけか。
JDBC でも UNIX Socket で動くようにならんかね。
0396nobodyさん02/07/26 13:12ID:it2WH5Xf
PostgreSQLを勉強始めたばかりの者です(2日目)

SOFTBANK社の「はじめてのPostgreSQLプログラミング」
を読んで練習しているのですが、

 select to_char(timestamp, 'now','HH12:MI:SS');
が実行できません。
 ERROR: Attribute 'timestamp' not found
というエラーがでます。
今のところ他の簡単なSQL文は実行できています。

何が間違っているのでしょうか?
どうしたら実行できるでしょう?
よろしくお願いします。

環境:WindowXP PostgreSQL7.2でCSEを使用してます。
0397nobodyさん02/07/26 13:36ID:???
>>396
>  select to_char(timestamp, 'now','HH12:MI:SS');
select to_char(timestamp 'now','HH12:MI:SS');
こうじゃない?
039839602/07/26 13:37ID:???
自己レスです。
カンマが余計でした。スンマソン
 select to_char(timestamp 'now','HH12:MI:SS');
でできました。逝きます・・・
039939602/07/26 13:38ID:???
397さんありがトン!
040039602/07/26 15:45ID:it2WH5Xf
もう一つ質問です。
例えば

 SELECT DISTINCT ON(dept_id) dept_id AS 部門ID
FROM employees;

とするのと、
 
SELECT dept_id AS 部門ID
FROM employees
GROUP BY 部門ID;

とするのは、どっちが早いとか、どっちを使うべきかというのが
知りたいのですが、どうなんでしょうか?
0401nobodyさん02/07/26 16:08ID:???
>>400
"EXPLAIN"を使ってくらべてみ。今やってみたら俺のテーブルでは
全く処理内容は一緒だったけど。
0402nobodyさん02/07/27 23:08ID:V7PX6eYj
RedHatLinux7.2上でPostgreSQL7.2.1のフロントエンドを
libpqを使って開発しています(C言語)。
DB接続用関数「PQconnectdb()」の使い方がワカランです。
引数が可変長なのは理解できるんだけど、その指定方法がいまいち。
マニュアル通り、「keyword = value」ってやってもできん。
どなたか、使用例ってのを見せておくんなまし。

追加でもう一つ。PGstatusの返り値の違いがワカランです。
特にCONNECTION_OKとCONNECTION_AUTH_OKかな?
あと気になるのは(マニュアルより引用)
「CONNECTION_MADE 接続はOKです。送信されるのを待っています」
いったい何が送信されるのを待ってるんだろう。
どなたか謎を解明してくんさい。
0403親切な人02/07/27 23:23ID:???

ヤフーオークションで、凄い人気商品、発見!!!

「 RX-2001 」がパワーアップした、
「 RX-2000V 」↓
http://user.auctions.yahoo.co.jp/jp/user/NEO_UURONNTYA#.2ch.net/

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。

ヤフー ID の無い方は、下記のホームページから、
購入出来る様です↓
http://www.h4.dion.ne.jp/~gekiyasu/#.2ch.net/
0404名無しさん@Emacs02/07/28 03:17ID:???
>402
PQconnectdb()でなければならない?
問題なければ、PQsetdb()使った方が簡単だと思いますが。

PQstatus()の返り値は、通常は not CONNECTION_BAD を
調べます。CONNECTION_MADE や AUTH_OK は libpq が
内部状態を記憶するのに使うのであって、
通常アプリケーションの方からは使いません。
0405nobodyさん02/07/29 10:45ID:???
ちょい質。

例えば社員データベースに格納したいデータとして

社員番号、社員名、住所、電話番号

があって、その中で社員番号と社員名は頻繁に問合せされるけど、
住所、電話番号が問合せされることはほとんどない、といった状況があった場合、
次のどれが問合せの効率としてはいいんでしょうか?

1.全て一つのテーブルに持ち、必要な情報だけを問い合わせる
2.全て一つのテーブルに持ち、よく使われる問合せをビューとして定義する
3.よく使われるデータとそうでないデータを社員基本情報と社員付加情報のような
  別テーブルにわけリレーションをはる
4.それ以外
0406初期不良02/07/29 12:49ID:???
>>405
実験した方が...
見た感じ postgresql がやることとしては
1, 2 は変わらない感じだから、3で速くなって
その速度が必要だと思ったならテーブル分けて
結合する view を作って view に insert delete update
できるようにするのがいいかと。
0407nobodyさん02/07/29 16:33ID:???
>>406
あ、もちろん実験はするつもりでした。
ただ、メリット・デメリットがわからない状態で闇雲に実験しても
「実はこういう場合もある」みたいなケースがあるかなと思いまして、
先達の皆様のご意見をお伺いしたかったと、まぁそういうことです。
今のところ

1.テーブル設計が楽。フィールドが増えると検索に時間がかかる。
2.SQLの組み立てが1よりも楽。検索速度は1.よりも若干遅くなるかも。ビュー定義を別に行う必要がある。
3.検索速度が2.よりも速い。ビュー定義が複雑になる。

ぐらいかと思ってるんですけど、本当でしょうか?
0408nobodyさん02/07/29 16:55ID:???
405のテーブルって正規化した結果だよね。それを前提とすると、
3.の場合は社員番号、社員名テーブルと社員番号、住所、電話番号テーブルの
整合性に気を使う必要がある。
というのもあるかも。
つまり、工数が増える->ミスする可能性が増える、ということなので、
俺なら、その部分がボトルネックになってて、かつテーブルを分ける事で
大きく性能が改善される事がベンチマーク等で確認されないかぎりは、
一つのままにするかな。
0409pg初心者02/07/29 17:26ID:???
最近勉強し始めたのですが質問です。
SERIAL型で最大値(2147483648)を超えた場合,
次の値はどうなるんでしょうか?
0410nobodyさん02/07/29 18:06ID:yb513x2/
始めまして。なんか最近面白いサイトが出来たみたいですよ。
キャラクター(笑)とかがタダで持てたり、着替えさしたり・・・・
でも今だけらしいですよ入会無料なのって
詳しくは下記UELをクリックして、確かめて!!
http://www.e-mansion.co.jp/co/ac.html
0411初期不良02/07/29 20:23ID:???
>>409
select setval('seq', 2147483648);
select nextval('seq');
しる
0412nobodyさん02/07/29 21:30ID:???
>>408
です。でもそういう意味ではわざわざテーブルを分けること自体、
正規化の逆を行ってたりします?

確かに気を使う割には件数がそんなに莫大というわけではないので
#実際には社員テーブルではないのですが。。。
とりあえず1.でやってみて、問題になりそうなら考える、という形にします。

どもありがとうございました。
0413nobodyさん02/07/29 22:17ID:+EFE+b01
>>412
 遅いレスだけど、速度を出すときは結合(ソート+マージで高コスト)を
減らす。
 列の数が気になるようだが、サーバーとクライアント間の転送量が最初に
問題になるので、問い合わせ時に絞れば問題ない。
 さらに例示されたテーブルを無理に分割すると、第五正規化・対称制約条
件に従わない、に違反するので非正規化になる。
0414nobodyさん02/07/29 22:54ID:???
>>413
ですよね。大したデータでもないのにわざわざ正規化じゃなくするのは
ちょっとヤな感じがしてきてたところです。これで安心して1.で逝けます。
0415nobodyさん02/07/30 00:36ID:HDFyLWHU
質問です。知っている方,居られましたらご教授下さい。
PostgreSQLVer7.1.3を使っているんですけど,
ロックタイムアウトの時間とかは指定できないんでしょうか?
もし,タイムアウト時間が指定できなければ,どのテーブル(又はレコード)に
ロックがかけられているか調べる術などあるのでしょうか?


0416nobodyさん02/07/30 01:09ID:???
>>415
トランザクション使えば明示的なロックが必要な部分ってかなり少なくなると
思うんだけど、本当にロックが必要?
わかってて聞いてるならスマソ。

やるとすれば、PQsendQuery して自前でタイムアウト処理して、間に合わない
ようなら PQrequestCancel すればいいのかな。やったことないから正しいか
どうかわからないけど。
0417nobodyさん02/07/30 01:24ID:HDFyLWHU
>>416
JavaからDBを触っているんですけど、処理上どうしてもあるレコードが
ロックされているか知る必要があるのです。
(そもそもシステムの設計に欠陥があるのですけど、もう後の祭り…)

「PQsendQuery」調べてみました。
検証してみないとなんとも言えませんが、使えそうな気がするので実験してみます。
アドバイスありがとうございました。
0418nobodyさん02/07/30 21:46ID:w4X2IPfe
insert delete update
などのテーブルのデータに対して使用する関数はようやく使えるようになりましたが
テーブルそれ自体の項目名を変更したり削除したりするのは
どうやったらいいのでしょうか?
今までは間違えたらDrop Table
して一からCreate Tableしていたのですが、
さすがにそれでは追いつかなくなりました。
SQL一覧をみてもそれらしいのが見つからないのです・・・
0419nobodyさん02/07/30 21:48ID:???
>>418
データはないときはalter tableすれば? 載ってなかった?
042041802/07/30 23:37ID:w4X2IPfe
>419

見事に出ておりました・・・
アルファベット順だったのでこんな上にあったとは・・・
042141802/07/31 00:28ID:boduSA+6
うーん。でもどうもリネームはできるけど属性だけ変える方法がわからないです。
ALTER TABLE mytable ALTER mycolumn integer;
こんなかんじでtextになっているmycolumnをintegerに替えようとしているのですが・
ちなみに
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/sql-altertable.html
これを参考にしています
0422nobodyさん02/07/31 10:32ID:aLb8xrtM
そもそも、textで作ったものをintegerに変更しなきゃいけないという事態が
頻発するのはどうかと思うが。

新しいテーブルを別に作って select 〜 into 〜 するときに
text を integer に変換して入れる、ってのはどう?

で、古いのを drop して新しいのを rename。
0423nobodyさん02/07/31 10:54ID:v8yqPDdo
>>421
新しいテーブルを作って、サブクエリー付きでinsert intoすればよい。
0424nobodyさん02/07/31 11:28ID:vDTHZH0e
[前の20件][次の20件]みたいなものを実現するのに
LIMITやOFFSETが使えそうですが、20件/1200件
のように全件中の20件のみの表示の場合、全件数を
検索して件数を取得してから、またLIMIT 20 OFFSET 0
とかでSELECTし直して表示させる方法はなんだか
無駄のような気がします。
何か他によい方法はないでしょうか。
042542402/07/31 11:32ID:vDTHZH0e
説明足らずだったかもしれません。
最終的には例えば、

1200件中の21〜40件を表示しています。

みたいな表示をしたいのですが、
@全件数を取得するクエリと、
A21件目〜40件目を取得するクエリと
2回クエリを実行させないといけないので、
他に何かよい方法がありましたらお教えください。
042642102/07/31 12:07ID:boduSA+6
>422
うううそうなのですか・・・
たくさんある項目の中で一箇所だけintegerにすべきところをtextにしてしまったのですよね。
まだデータをいれてないのでまあテーブルごと消して直してしまえば
それまでなのですが・・
0427nobodyさん02/07/31 13:26ID:???
>>424
ない
0428nobodyさん02/07/31 13:26ID:???
>>425
だからないっつーの
042942102/07/31 15:27ID:boduSA+6
mytableにオートナンバーのシリアル値の項目を足そうとして

pgdb=> ALTER TABLE mytable ADD myautonum serial;
このように実行すると
NOTICE: ALTER TABLE will create implicit sequence 'company_autonum_seq' for SERIAL column 'company.auto
num'
NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index 'company_autonum_key' for table 'company'
ERROR: Adding columns with defaults is not implemented.
Add the column, then use ALTER TABLE SET DEFAULT.

こんな感じで怒られてしまいます。
tableに項目を足したり削除したりというのがどうもできません。
名前の変更だけはできるのですが・・・

>422
レスありがとうございます。
しかしどうも私の力じゃ理解しきれないもようです・・。
ちょっといろいろネットを当たっては見ているのですが、
postgresは意外と情報が少ないというか
ハイレベルな話が多くて、本当の初心者向けの話が少ないですね。
0430nobodyさん02/07/31 20:44ID:3uNj3n4c
>>429
ERROR: Adding columns with defaults is not implemented.
を日本語に訳せば原因がわかるよ。

あと、Postgres を使いこなしたいなら、シーラカンス本は必須。
とくに DB 使った経験が少ないならなおさら。いまだと改訂第3版が出ている。
0431f02/07/31 21:04ID:ZYUYyFHP

-------風俗の総合商社・MTTどこでも-------

〇デリバリーヘルス〇デートクラブ〇女性専用ホストクラブ〇
〇ハードSM奴隷クラブ〇レズビアン倶楽部〇ホモ・オカマ倶楽部
〇変態痴女と遊ぶ会〇痴漢・覗き趣味の会〇変態同好会・各種!
●楽しく遊べます! 090-8002-8356番
-----------美男・美女会員など多数在籍中-----------
  http://www.mttdocomo.jp/
-----女性アルバイト随時募集・高収入(日払い)月100万円可能-----
-----レズビアン・スタッフ●ホモスタッフ●女性専用ホストスタッフ同募-----
http://www.mttdocomo.jp/
------------------------------------------------
0432396=40002/08/01 12:22ID:???
>401さん
ご解答ありがとうございます。ご返事遅くなって申し訳ありません。
EXPLAIN使ってみました。
このチェックの仕方知らなかったので大変勉強になりました。
速度的には特に問題なさそうですね。
巨大なテーブルがあったらまたチェックしてみます。
ありがとうございます。
0433nobodyさん02/08/02 14:00ID:IWsgOaFu
どなたかpostgreSQL+cocoon分かる方いませんか〜?
oracleのXSQL見たいなことが出来ると聞いたので試してみてる最中なのですが。

ttp://four.sssg.org/documents/
を参考にTomcat/postgres/cocoonは全て起動するようになったのですが、
そこから先がよく分からんです。

ttp://www.atmarkit.co.jp/fxml/rensai/cocoon01/cocoon01.html
も見てみましたが肝心の連動の話はまだ先のようで…

XSPとか使うんでしょうか?

環境を一応…
RedHat7.2J
postgreSQL 7.1.3
tomcat 3.2.3
apache 1.3.20
cocoon 1.7.4

ここではなく他に適当なスレがあるのであれば誘導お願いします…
関連っぽいスレがここしか見当たらなかったので…
■ このスレッドは過去ログ倉庫に格納されています