PostgreSQL & pgsql-jp ML 3テーブル目

このエントリーをはてなブックマークに追加
1NAME IS NULL
PostgreSQLについて語って2万テーブルをめざしましょう。
関連アプリケーション特有の話題は、以下のスレッドへ。
pgsql-mlのヲチもここで。

●過去スレ
PostgreSQL
http://pc2.2ch.net/php/kako/989/989375812.html
PostgreSQL 2テーブル目(移転前)
http://pc2.2ch.net/test/read.cgi/php/1047317680/
PostgreSQL 2テーブル目
http://pc2.2ch.net/test/read.cgi/db/1056944337/

●関連スレ
PostgreSQLのことならここで聞け
http://pc2.2ch.net/test/read.cgi/db/1056960249/
MySQL vs PostgreSQL
http://pc2.2ch.net/test/read.cgi/db/1056943680/
PHP + PostgreSQL
http://pc2.2ch.net/test/read.cgi/php/983128806/
PerlでPostgreSQL
http://pc2.2ch.net/test/read.cgi/php/999249463/
2NAME IS NULL:04/03/20 17:30 ID:???
>1
3NAME IS NULL:04/03/20 19:19 ID:cQph4WXC
>>1
スレ立て乙。
4お願いします:04/03/29 15:15 ID:bZAOhvfO
966 :NAME IS NULL :04/03/29 14:20 ID:bZAOhvfO
PostgreSQLって、コラム名にuser使えないの?

967 :NAME IS NULL :04/03/29 14:43 ID:bZAOhvfO
ERROR: parser: parse error at or near....
って何よ。。

968 :NAME IS NULL :04/03/29 15:00 ID:bZAOhvfO
********=# CREATE TABLE accesslog (
********(# time timestamp(0),
********(# path varchar(80),
********(# ssid varchar(80),
********(# user varchar(80),
********(# group varchar(80),
********(# lang varchar(10),
********(# remote varchar(80),
********(# browser varchar(80),
********(# error text);
ERROR: parser: parse error at or near "user" at character 84
5NAME IS NULL:04/03/30 16:50 ID:???
予約語だ。"user"とダブルクォートで括れ。
http://www.postgresql.jp/document/pg742doc/html/sql-keywords-appendix.html
6NAME IS NULL:04/03/30 19:11 ID:???
通し番号をつけるのに今は max を利用しています。

番号が飽和してしまったときの処理が必要なときは、
max を使わない方がいいのでしょうか。
7NAME IS NULL:04/03/31 23:46 ID:???
imiwakaran
8NAME IS NULL:04/04/08 17:18 ID:???
ガイシュツのような気もするのですが、ポスグレで

UPDATE t1 SET a = b, b = c;

とやったときの評価順序って規定されていないんでしたっけ?
それとも左から右が保証されてます?
9NAME IS NULL:04/04/08 17:33 ID:???
>>8
何が言いたいのか良くわからん。勘違いしているかも知れんが、

UPDATEされる前の値が参照されるので、順序は関係ないと思われ。
10NAME IS NULL:04/04/08 18:44 ID:???
>>9
> UPDATEされる前の値が参照される

これがわかれば充分です。そういうもんなんですね。
11NAME IS NULL:04/04/19 02:21 ID:???
ちょっと質問があります。
PostgreSQLオフィシャルマニュアル
http://www.amazon.co.jp/exec/obidos/ASIN/4844315897
読みながら色々試してたんですが……。

point型を数値に型変換する方法がわかりません。
atan2にぶちこんで、ラジアンに変換したいんですが、とりあえず生でぶちこんでも駄目だと言われます。
何か、とても簡単な方法があるような気がするんですが、みつけられないでいます。
ヒントをいただけないでしょうか。
12NAME IS NULL:04/04/19 02:46 ID:???
>>11
pがpoint型として
select atan2(p[0],p[1]) from table...
1311:04/04/19 12:52 ID:???
>>12
できました。
これって、他の幾何型にも使えるやり方ですね。勉強になりました。
ありがとうございました。
14NAME IS NULL:04/04/27 23:45 ID:wkoq9ZT+
Postgre本スレあげ
15NAME IS NULL:04/04/28 02:27 ID:KBMCaswf
Redhat 9でusogresがコンパイルできない…。
makeするとこんなエラーがでてしまう…。

/usr/include/c++/3.2.2/exception:57: overriding `virtual const char*
std::exception::what() const throw ()'
make[2]: *** [exception.o] エラー 1
make[2]: 出ます ディレクトリ `/home/nozaki/usogres-0.8.1/src'
make[1]: *** [all-recursive] エラー 1
make[1]: 出ます ディレクトリ `/home/nozaki/usogres-0.8.1'
make: *** [all-recursive-am] エラー 2

gccとglibc関係はインストールパッケージのrpmそのまま。

compat-gcc-7.3-2.96.118
gcc-g77-3.2.2-5
gcc-java-3.2.2-5
libgcc-3.2.2-5
compat-gcc-c++-7.3-2.96.118
gcc-3.2.2-5
gcc-c++-3.2.2-5
gcc-gnat-3.2.2-5
glib-1.2.10-10
glibc-common-2.3.2-11.9
glibc-2.3.2-11.9
glib2-2.2.1-1
glibc-devel-2.3.2-11.9
glibc-kernheaders-2.4-8.10

usogresのサイトみるとgcc-2.95.x と glibc2.1.9xではだめで、最新のgccならOKと
いうようなことを書いてあるけど、新しすぎてもだめなのかな?
だれか上手くいった人います?
16NAME IS NULL:04/04/28 04:25 ID:???
テーブル作成日時とテーブル変更日時を知りたいんですが
どんなコマンドでみれますか?
17NAME IS NULL:04/04/28 16:45 ID:N09xy6IO
>>16
ls(1)
181:04/04/29 02:52 ID:???
新スレたててから移行まで1ヶ月か・・・
19NAME IS NULL:04/04/30 15:17 ID:???
oid ってありますよね?これが最後まで行ったらどうなるんですか?
20NAME IS NULL:04/04/30 15:26 ID:???
>>19
行き着いたときだったか、使い尽くしたときだったか忘れたけど、
動かなくなってしまうんじゃなかったかな。
今のところそこまで使い切ったDBは存在しないらしい。
って、ソースコードの中かリリースノートかなんかで読んだ。
開発者自身も検証していないようなコメントだった。
21NAME IS NULL:04/04/30 17:16 ID:???
22NAME IS NULL:04/05/01 00:19 ID:???
>>21
なるほど、これもよさげですね。
こちらを試してみます。

どうもありがとう。
23NAME IS NULL:04/05/01 00:41 ID:ZjwnXM2M
>>19
おいらも気になってた
確かlog int だったかな
じゃ直ぐ無くなる
24NAME IS NULL:04/05/01 01:33 ID:???
>>19
一応初期オブジェクトの分を除いてループする。
けどそのときの動作保証はない。
25NAME IS NULL:04/05/01 09:55 ID:???
log intはイヤだ
26NAME IS NULL:04/05/01 12:38 ID:???
MLで巨大なファイルを扱いたがってる人、最近DBを使い始めたのかと
思ったらpostgre95のころからMLにいるのね。

ぐぐったら1996年のアーカイブが出てきたよ。

経験=スキルではないんだね…
27NAME IS NULL:04/05/01 15:23 ID:???
漠然とイメージだけで「メモリが足りないんじゃない」とか
「常識的に考えましょう」とか釣られて回答してる奴らの方がキモいのでは。
結局誰も答えられてないし。

ファイルがでかいからって、lo_unlinkって5分もかかるのかなあ。
28490:04/05/04 12:02 ID:jR8ayW8M
ちなみに「pg_ctl start」コマンドを打つと以下のようになります。


Administrator@windows2000 ~
$ pg_ctl start
pg_ctl: Another postmaster may be running. Trying to start postmaster anyway.
FATAL: File /usr/local/pgsql/data/PG_VERSION is missing. This is not a valid da
ta directory.
pg_ctl: cannot start postmaster
Examine the log output.
29NAME IS NULL:04/05/04 12:03 ID:???
どうちなむのだろう?
30490:04/05/04 12:04 ID:jR8ayW8M
まちがいました。
31NAME IS NULL:04/05/12 04:59 ID:???
PostgreSQLにODBC経由でMS Accessを使ってテーブルを見ています。
ですが、テーブルを表示させると全レコード全カラムの値が「#Deleted」
になってしまう場合があります。

ですが、Postgres上で

create view hoge as select * from fuga;

(fugaは#Deletedになるテーブル)
とやって、このビューをAccessで見るときちんと値が取れています。
なんか不思議です…

んで、テーブルを見たときに「#Deleted」になる場合とならない場合があります。
特定のテーブルではなる、別のテーブルではならないんです。
この再現条件がよくわかりません(わかってもどうなるもんでもないかも)。

この変な現象ってぐぐってみても不思議な現象みたいな書かれ方をしてて
原因が特定できてないような感じです。

これ、回避する手段ありますか? view使うのは…それでもいいんですけど、
できれば直接テーブルを参照してってのはできないんでしょうか?

バージョンはPostgreSQL7.4.2、ODBCドライバ7.03.02.00、Access2000(9.0.3821 SR-1)です。
あと、Postgresとの接続にはSSHのトンネルを介しています。
32NAME IS NULL:04/05/12 10:13 ID:???
>>31
Oracleとかでもそうなるよ。
他のクライアントから削除、更新をすると#Deletedになるんじゃなかったかな。
で、結局回避方法は再表示(だったか再接続だったか・・・)ぐらいしか
なかったような気がする。

原因はプライマリキーをアクセスが拾えないとかじゃなかったかな。

「かなかな」ばかりですまんが。
3331:04/05/13 03:33 ID:???
>>32
遅くなってすんません。

他からはデータベースに接続してない状態で
ただ単にテーブルを表示させるだけでも#Deletedになっちゃうんです。

テーブルの定義をして、念のためAccessを終わらせて、
再度起動してテーブルを開くと#Deletedになっちゃうんです。

なんか、情報があんまりなさそげですね…
そんな状態でもinsertやupdateはできてるみたいだから、参照はviewを使うことにするか…
34NAME IS NULL:04/05/13 16:00 ID:???
>>31
うろ覚えなんだけど、OIDオプションの「インデックスを装う」をonにすることで回避できたような気が。
35NAME IS NULL:04/05/13 17:29 ID:???
>>31
serialやdefaultを使ってるとなる?
http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/faq.html
3631:04/05/15 05:45 ID:???
またまた遅くなりました。本当にどうもありがとうございます。

>>34
今現在手元に実機(てか、Accessの入ったマシン)がないので、
あとでやってみます。

「oid オプション 装う」でぐぐってみたらこんなのが引掛りました。
http://osb.sra.co.jp/PostgreSQL/odbc/odbc732.html
まだ読んでませんが、参考になりそうです。

>>35
defaultを使ってます。でもその文書の記述だとinsertなどをしたときになるような感じですね…
37NAME IS NULL:04/05/17 10:13 ID:???
>>36
テーブルに主キーが設定されてないとか?
38NAME IS NULL:04/05/25 18:57 ID:xgZdnpwF
7.4でunicodeのデータベース使ってるんだけど、euc-jpのPHP4.3.4からpg_connectするとバケまくり。
解決方法しらないですか?
39NAME IS NULL:04/05/25 19:11 ID:xgZdnpwF
pg_set_clientencodingで解決した。けど、どっか一括で設定できんのかね・・・
40NAME IS NULL:04/05/25 19:18 ID:???
>>39
postgresql.conf
41NAME IS NULL:04/05/26 00:42 ID:hRTK0adv
>>40
それをやるとJavaから呼び出したときに文字化けするかもしれないことがわかった。
一括設定はあきらめる。
42NAME IS NULL:04/05/26 17:57 ID:???
PostgresSQLのバージョンアップで
7.1.2から7.3.3にしました。
データの移行が済んで、データの確認をした所
order by が正常に機能しなくなりました・・・
症状としては、

テーブルを作ってあいうえでデータを入れてorder byをかけた所






(4 rows)
で帰ってくると言う物です。

ほかでも調べて
./configureの設定やnitdb --encoding=EUC_JP --no-locale
もやってみたのですが、全然うまく行きません。
なんとかなる方法は無いでしょうか?

環境は
PostgresSQL7.3.3
apache_1.3.29
PHP4.3.1
です。

どなたかよいアドバイス等あったらお願いします。
43NAME IS NULL:04/05/26 18:33 ID:???
>>42
のまえに、なぜ7.3.3なんだ。
せめて7.3.6に上げてみれば。
44NAME IS NULL:04/05/26 23:11 ID:???
その手の問題はほとんどlocaleが原因なんだけどね。
psqlからshow all;かなんかしてlc_*がどうなってるか見てみたら?
4542:04/05/27 01:14 ID:???
>>43,44

返事ありがとうございます。また返答遅くなって申し訳ございません。
Show all で確認したところ、エンコーディングはEUC_JPなっていました・・・
Psql -l だとEUC_JPと表示されます・・・・
そしてlc_* us_en に・・・・
これが原因なのでしょうか?
/etc/sysconfig/li18nも
LANG=EUC_JP
LC_ALL=EUC_JP
LC_CTYPE=EUC_JP
LINGUAS=EUC_JP
と変えてあります・・・
4644:04/05/27 11:43 ID:???
>>45
ソレダ!!
lc_collateあたりは、initdbした時に決定して以降変更できないはず。
やっぱinitdbの時に--no-localeなってくれなかったように
見えるな。気の毒だけどinitdbしなおすしかないと思いマス。
4742:04/05/28 05:33 ID:???
>>44
返事が遅れて申し訳ないです。

pg_ctl stop
rm -rf /usr/local/pgsql/data
initdb --encoding=EUC_JP --no-locale
pg_ctl start

で、テストデータを流しなおして
createdb test_base
psql test_base
CREATE TABLE T_TEST (T VARCHAR(128));
INSERT INTO T_TEST (T) VALUES ('あ');
INSERT INTO T_TEST (T) VALUES ('い');
INSERT INTO T_TEST (T) VALUES ('う');
INSERT INTO T_TEST (T) VALUES ('え');
SELECT * FROM T_TEST ORDER BY T;

であいうえお順にデータが並びました。
その後
SELECT * FROM pg_settings WHERE name like 'lc%' or name like '%encoding'
でサーバークライアント共にエンコードがEUC_JPになって居るのを確認。
lc_*が全てCになっているのを確認して、データのリストアを無事に終了しました。

初歩ミスでポストマスターが正常に終了せずに変な挙動になっていたみたいです。
無理やりポストマスターをつぶして上記作業で正常動作になりました。

>>43
助言に従って7.3.6にアップしました。

以上ありがとうございました。
48NAME IS NULL:04/05/29 03:54 ID:???
にしても、最新の7.4.2にしなかった理由が知りたい。
49NAME IS NULL:04/05/29 16:29 ID:???
バージョン上げればいいってもんでもないしょ。
50NAME IS NULL:04/05/29 18:46 ID:???
それにしても、運用方法とかデータ型が大きく変わるわけではないのに、7.4のメリットを捨てて7.3にする理由が知りたい。
だって、もとは7.1だよ。
51NAME IS NULL:04/05/30 00:23 ID:???
よくわかんねぇけど
激しく変化したから?
52NAME IS NULL:04/06/03 02:09 ID:???
さいとうさんも大変だな。

ここで聞けスレにも書いてるみたいだが、英語だけでなく日本語も苦手っぽいし

53NAME IS NULL:04/06/04 22:35 ID:???
BOFの中継を見るの忘れた…
54NAME IS NULL:04/06/06 02:05 ID:czq84YCV
以下のモノをCで書き直すにはどうしたらよいでしょうか?
教えてエロい人。

CREATE FUNCTION hogehoge() returns opaque as '
BEGIN
NEW.last_access := CURRENT_TIMESTAMP;
RETURN NEW;
END;
' language 'plpgsql';
55NAME IS NULL:04/06/06 09:29 ID:???
char* sql = "CREATE FUNCTION hogehoge() returns opaque as ' "
 "BEGIN "
 "NEW.last_access := CURRENT_TIMESTAMP; "
 "RETURN NEW; "
 "END; "
 "' language 'plpgsql'; "
56NAME IS NULL:04/06/07 17:02 ID:???
>>54
http://www.postgresql.jp/document/pg742doc/html/triggers.html
http://www.postgresql.jp/document/pg742doc/html/spi.html
この辺の話だと思うが、諦めたほうが得策。
どうしてもやりたかったら、自力でやってみてどこまで出来たか教えれ。
57NAME IS NULL:04/06/21 17:35 ID:HUxGxZ26
PostgreSQL 7.2.1 から 7.3.4 に移行しようとしています。
7.2.1 で使っているラージオブジェクトを含むデータを
 % pg_dump -b -F c DB_NAME > foo.out
などとしてバックアップを取り、7.3.4 の方で
 % pg_restore -d DB_NAME foo.out
として戻そうとすると、
 pg_restore: [archiver (db)] could not execute query: ERROR: Column "COLUMN" is of type timestamp without time zone but default expression is of type text
     You will need to rewrite or cast the expression
と言われてしまいます。

ラージオブジェクトを含まないデータなら、timestamp 型の記述を書き換えて
restore すれば良いみたいなのですが、ラージオブジェクトを含むデータの場合は
どう対処すれば良いでしょうか。お知恵をお貸し下さい。
58NAME IS NULL:04/06/21 18:10 ID:???
なんで7.3.4とか中途半端なバージョンなの?
59NAME IS NULL:04/06/21 19:38 ID:HUxGxZ26
たまたま今の作業環境が 7.3.4 なだけで、深い意味は無いです。
7.2.1 から最新バージョン(7.4.x)への移行の問題として捉えて下さって結構です。
どなたかよろしくお願いします。
60NAME IS NULL:04/07/09 01:31 ID:???
MLにひさびさに面白い方がきていましたね。
なんでしょうねあれ。
61NAME IS NULL:04/07/09 09:18 ID:???
房でしょう
62NAME IS NULL:04/07/19 18:43 ID:3/3kexye
文字列の場合、
 ・char
 ・varchar
 ・text
の違いがわかりません(><)
誰か教えてください。特に、charとtextの違い。
やっぱり、textの方がメモリを食うんですか?
63NAME IS NULL:04/07/19 19:15 ID:???
(><)
64NAME IS NULL:04/07/19 19:46 ID:???
(><)
6562:04/07/19 19:56 ID:???
PostgreSQLのことならここで聞け
だと思ってカキコしたら違ってました・・・(><)
dat落ちしてしまっているみたいだし・・・どうすれば・・・。
66NAME IS NULL:04/07/19 20:20 ID:???
6762:04/07/19 21:59 ID:???
>>66
ありがとう。行ってきます。
68NAME IS NULL:04/09/30 11:17:58 ID:???
こちらのスレは使われないなぁ。

俺的ブックマーク
Windows版PostgreSQL配布サイト
ttp://pgfoundry.org/
ttp://pgfoundry.org/projects/pginstaller/
69NAME IS NULL:04/11/19 10:56:55 ID:???
UTF-8 で困る環境って携帯電話以外でもあるの?
70NAME IS NULL:04/11/19 16:31:44 ID:???
Lモード
71NAME IS NULL:04/11/19 17:38:51 ID:???
MULCOとかWebTVとか。
72NAME IS NULL:04/11/19 18:57:48 ID:???
出力とDB内部がUTF8なのと直接的な関係はないぞ
73NAME IS NULL:04/11/19 19:10:52 ID:???
UTF-8 だと半角カナも使いやすいのになぁ。
ISO-2022-JP じゃなきゃだめなのかぁ。
74NAME IS NULL:04/11/22 20:52:17 ID:???
34321 みたいな質問はどういう風に答えたらいいのでせうか。
いやな予感がするので、レス書けません。
75NAME IS NULL:04/11/22 21:55:28 ID:???
いい英和辞典でも紹介するのがよいのでは?
76NAME IS NULL:04/11/23 07:36:43 ID:???
pgpoolを使うことを考えてるんだけども、
time関連の値が同じになることが保証されないんだってね。

こまかいtimestampに依存をしないようにはするけど、
日付がちょうどかわるときにきたtime関連値を使用する値をどう扱えばいいんだろう。
できればデータベースで完結する方法として。

例えば、日付と日付支番を主キーにしたいんだけども、
マスターのnowが2004-11-23 23:59:59.9を前提に処理し、
セカンダリが2004-11-24 0:0:0.1を前提に処理したら、
マスターでは日付、日付支番が
2004-11-23 10
なりとなり、
セカンダリでは、日付、日付支番が、
2004-11-24 1
となる。

日付が変わる直前直後5秒づつぐらいアクセスを拒否する設定とかでもいいんだけどな。
同期がとれているんだったら。
77NAME IS NULL:04/11/23 13:11:58 ID:???
>>75 ありがとう。
英和辞書を紹介したら、引き方のレクチャーもしなきゃいけない
なんてことないですか。

あ、堅いレスがついているようですね。
78NAME IS NULL:04/11/23 22:11:07 ID:???
>>76
使ったことないが Slony-I は time の値は同じになるとのこと。
非同期レプリだけどね。
79NAME IS NULL:04/11/26 18:25:32 ID:TIFoj5JU
>>78
ただ、そちらはラージオブジェクトが使えないそうなんですよね。
pgpool_now()とかって関数を入力したら、そこだけ置換してくれるとかあれば嬉しいのに。
80NAME IS NULL:04/11/26 19:49:50 ID:ybnduqE4
>>79
pgpoolに関してはSQLレベルで分配してるだけだから。
だからpostgresql側の変更が不要なかわりに、
nowなどサーバ依存な動作は不許可なわけ。

仮にpgpool_now()なんてつくって、それはpgpoolが解釈して
時刻を埋め込むものだとしても、どっかで破綻しない?
クエリーがpgpool依存になるってのは目をつぶるとしても。

って書いてて思ったのだが、
クエリーを投げる側(アプリ側)でnowとか使わないように
アプリ側で時刻を埋め込めばいんじゃん。


#問題はシーケンスとかだろなあ。
81NAME IS NULL:04/11/27 01:02:45 ID:???
>>79
ラージオブジェクトは使えないね。
セミナーに行ったとき、開発者が NO と断言してた。
82NAME IS NULL:04/11/28 11:09:47 ID:???
>>80
>って書いてて思ったのだが、
>クエリーを投げる側(アプリ側)でnowとか使わないように
>アプリ側で時刻を埋め込めばいんじゃん。

ってまあ、たしかにそうなんだけどね。
ただ、nowはよく使う関数だからなぁ。

Slony-Iはテーブル単位での管理ができるってことだから、
ラージオブジェクトの管理だけ別にやって残りで使うって手もあるか。
83NAME IS NULL:04/11/28 22:53:29 ID:7LOVBWil
>>82
Slony-Iは非同期。
最悪10秒くらいデータの不一致が発生するけどOK?
84NAME IS NULL:04/11/29 21:17:05 ID:???
>>83
うーん、かたっぽのDBがアボーンした時に、
即座にもう片方で動作できるようにするのがレプリケーションする目的なんで、
最悪スレーブの方読みに行かなくてもいいかもなぁとか思ってたり。

日付関連値をできるなら主キーにしたいんで、
そこの不整合が起きるとめんどいしね。

pgpoolで、一つ思ったことに、
アプリ、pgpool側で乱数を発生させ(重複がまず発生しない桁数)
マスタ側で時刻テーブル(乱数、now())なりで一旦適当なテーブルにnowなりの値を保存。
マスターもスレーブもそのマスターにあるテーブルをみて、乱数をキーにして時刻を取得。
マスターアボーンしてるとわかったら、スレーブは自前のnowを使う。

これはシーケンスにも使えるかもね。
縮退運転に備えて、シーケンス番号をこまめにセットしないとならないけど。
シーケンスにトリガ貼るってできるんかな、、、、、?

もちろん、これはDB越しのアクセスってなんかでき無いとダメだけどね。
Slony-Iをみるかぎりできそうだけど(でないとレプリケーションできないはずだよね)
試してない。

とか言うのどうかなぁ?とか思ってみたり。
85NAME IS NULL:04/11/29 21:20:31 ID:???
シーケンス発行だけでもpgpoolでやってくれないものかなぁ。
まあ、順序が保証されるんなら、max+1でもいいから特に重要ではないかもしれんが。
86NAME IS NULL:04/11/29 21:25:57 ID:???
レンカキすまん。

、、、良く考えたら、「順序が保証される」ようにできるのなら、
どちらかのシーケンスにpgpool経由以外からアクセスさせないようにしておけば、
両方のサーバーともシーケンス番号は同じになるんじゃないかな

それともおいら何か見落としてる?
87NAME IS NULL:04/11/29 21:58:26 ID:???
というか、そんなの日常でやってる奴なんて稀だから、
自分で試さないと答えは出てこないような気が。
88NAME IS NULL:04/11/30 09:34:18 ID:8FceD7Au
>>86
原理的には。
しかし、運用に負担がかかる。

そもそも、シーケンスという概念で隠蔽したもろもろが、
そのような運用にしたとたん、
主にトラブル時だが、一気に表面に出てくる。
nowとかも同じね。

運用が面倒になることのデメリットが理解できないのなら、
レプリケーションを実運用すべきでない。
89NAME IS NULL:04/11/30 09:51:11 ID:???
>>84
乱数とかいってる時点で厨房だな。

レプリケーション、いやDBに手を出すのはやめといたほうがいい。
90NAME IS NULL:04/12/01 01:35:49 ID:???
いや、すべての電気機器を操作するのは危険だ。
91NAME IS NULL:04/12/02 12:59:27 ID:pHcXoZZE
psqlodbc.dll内の関数のマニュアルとかってどこにあるんですか?
探したけど見つかっていない状態なのでどなか教えてください
92NAME IS NULL:04/12/27 00:15:28 ID:NPDFfQpi
siteAとsiteBという二カ所の物理的に離れてる場所があるとして、
どっちにもpostgreSQLが回してあって、
どっちかがサイトごと死んでもそのまま生かし続けられる、
と云う構成にしたい場合、
siteAとsiteBにそれぞれpgPoolを入れて、
その下のdbをたすき掛的にレプリケーションをしておけばok?
ちなみにpgPoolへの接続は自動的に切り替えられるものとして。

わかりにくいかな?
まあ明日テストしてみるけど。
93NAME IS NULL:04/12/27 00:18:34 ID:???
>>92
pgpoolはどちらか一方、もしくは別マシンでOK。
9492:04/12/27 00:23:04 ID:NPDFfQpi
いや言葉が足りなかった。すまん。
siteAとsiteBには通常運用時(両方生きてるとき)はパラでアクセスが来るんだよね。
だからたすき掛がいいかなと。
9593:04/12/27 00:35:57 ID:???
あぁーなるほど。はやとちりスマソ。
96NAME IS NULL:04/12/27 00:36:39 ID:???
siteAとBの間のネットワーク速度は大丈夫?
9792:04/12/27 00:38:54 ID:???
それは問題ない
9892:04/12/28 23:06:02 ID:???
今日試してみたけどあまりにもあっさり成功。
クラスタDBのネットワークケーブル抜いたりしたけど、
2度ほど障害が出ただけであっさり再開(縮退モード)。
こりゃ便利だわ。
99NAME IS NULL:04/12/29 11:21:19 ID:???
Postgre初心者なのですが、
psqlのコンソールから日本語を入力する方法
ってどうすれば調べられるでしょうか?
100NAME IS NULL:04/12/29 11:28:54 ID:???
>99
言ってる意味が良くわからんのだが。日本語って普通に入力できないか?

ってか、情報少なすぎ。
Postgresが動いているマシンの OS、文字コード設定
psqlを動かしている画面(端末エミュレータ?)が動いている OS、端末ソフト、文字コード設定

最低限このぐらいを晒さないと答え様がない罠。
101NAME IS NULL:04/12/29 11:57:58 ID:???
>99
DB名や項目名に日本語を使うのはアマチュアがよく犯す間違い
102NAME IS NULL:04/12/29 12:13:30 ID:???
OSはFreeBSD、文字コードはEUC_JPでテーブルを作成。
端末エミュレータは起動してません。
Wnnは起動してます。kinput2もインストール済みです。
つか、日本語入力の仕組みがイマイチわからないんですが。
JSERVERはWnnをローカルホストで起動させ、
kinput2をFEPに設定することはできてると思うのですが。

また、項目やDB名に日本語は使いません。
SQLファイルを作成してpsqlに流し込む方法もあるのかもしれませんが、
日本語が使えるエディタが起動できていないので、
どうしようかと思案中です。

あと、DBの基礎知識は少しはあります。運用経験はありません。
どうか、良きアドバイスをお願い致します。
103NAME IS NULL:04/12/29 12:18:35 ID:???
pgAdmin 使うとか。

アプリケーションの裏において使うものなので、
アプリを作るところからはじめてくれ。
10499、102:04/12/29 12:30:15 ID:???
>103
Windowsで使うものでは?
今Windowsマシンとネットワーク繋がっていないんです。
105NAME IS NULL:04/12/29 12:51:04 ID:3gim2RWe
>102
X使ってないならkonしてるか?
[shift]+[space]で漢字入力にならないか?
106NAME IS NULL:04/12/29 12:59:30 ID:???
>>100
そもそもpsqlじゃないときは
日本語使えてるの?

使えてないなら板違い
10799、102:04/12/29 13:44:45 ID:???
>105
konって表示専用じゃないんですか?
前に起動させたことはありましたけど、
シフト、スペースで何も起こりませんでした。

とそれよりpostmasterが起動できなくなってしまいました。
いろいろ環境変数を追加したりしてるのが原因でしょうか?
一度再起動してみます。

psqlの時も日本語つかえてません。
emacsとかどうやって起動させるんでしょう?
UNIX板で聞けばいいですか?
108NAME IS NULL:04/12/29 13:47:56 ID:???
>>107
その状態でここで質問するってことがすごいね。

悪いことは言わない。
あきらめろ
109105:04/12/29 13:57:32 ID:???
>107
少し落ち着け。

>konって表示専用じゃないんですか? 
漢字が正しく入力されているか、表示されなくても分かるのか?

ってかさ、Xは起動してるの?
それともフルスクリーンでテキストコンソールになってるの?
そこが分からんと、説明のしようが無い。

#kinput2とか言ってる所をみると、X使ってるっぽいけど、
#「端末エミュレータは起動してません」ってじゃあ、藻前がpsqlを使ってる画面はどこに出てるのかと小一時(ry
#Xでデフォルトのxtermで作業してる気がしてならないのだが・・・。
110NAME IS NULL:04/12/29 14:02:43 ID:???
pgAdminIIIの1.2.0でフォント設定をMSゴシックにしてみると
とても面白いことが起きるよ
11199、102:04/12/29 14:08:59 ID:???
>109
どうもレスありがとうございます。
UNIX使いの人にも親切な方っていらっしゃるんですね。

konを起動させたときは、色々キーを叩いてみましたが、
アルファベットしか入力できなかったです。

Xが起動してるとは・・・psコマンドで見る限り、
cshしかアクティブになってませんが。
ログインスクリプトとか全然書いてないので。

フルスクリーンでテキストコンソールにはなってます。
Xでデフォルトのxtermとは一体?たぶんそうだと思うのですが、
どのようなサイトを見たら意味がよくわかるでしょうか?

>#kinput2とか言ってる所をみると、X使ってるっぽいけど、
>#「端末エミュレータは起動してません」ってじゃあ、
>#藻前がpsqlを使ってる画面はどこに出てるのかと小一時(ry
>#Xでデフォルトのxtermで作業してる気がしてならないのだが・・・。

そう言われてみると端末エミュレータは起動してますね?

しかし、postmasterが起動しなくなったのは一体???
112NAME IS NULL:04/12/29 14:13:00 ID:???
>>111
強制終了かなにかでdata/postmaster.pid のファイルが残ったまま落ちちゃったんじゃないか?
あったら消せ。
113105:04/12/29 14:21:51 ID:???
>111
その様子だとXは起動してないな。

とりあえず、FreeBSDの日本語周りのFAQな。
http://www.jp.freebsd.org/QandA/HTML-QA/japanese-qa.html
ここ見て分からなかったら、

初心者もOK! FreeBSD質問スレッド その56
http://pc5.2ch.net/test/read.cgi/unix/1103066264/l50
この辺にでも行って「コンソールでの日本語入力の起動方法」を聞いてみそ。

psqlも普通のコンソールアプリだから、漢字入力が出来るマシンからTELNET(SSH?)して
漢字入力しても同じはずだけどな。
114NAME IS NULL:04/12/29 14:24:18 ID:???
>>110
なにも起こらないけど?
どうなるの?
11599、102:04/12/29 14:47:10 ID:???
>112
/usr/local/pgsql/dataをみましたが、そのようなファイルはありませんでした。
どうなってるんだか。
116NAME IS NULL:04/12/29 21:13:30 ID:???
管理者に聞いて下さい
117NAME IS NULL:04/12/29 23:07:09 ID:???
>>114
起こらないはずないよ
まぁやってみれば分かります
118NAME IS NULL:05/01/11 16:20:11 ID:mtFH19Sy
CSEみたいに使いやすくてかつ
開発が続いてるクライアントアプリってないですかね?

今はCSEをだましだまし使ってる
119NAME IS NULL:05/01/12 15:03:33 ID:/0becKYD
すいませんちょっと質問があるのですが、Webmin上からPostgresが見れないのです。
僕のような入門者には、Webminはありがたいのです。

SQL select tablename from pg_tables where tablename not like 'pg_%' and tablename not like 'sql_%' \
order by tablename failed : ERROR: relation "pg_tables" does not exist

このようなエラーを返してくれます。

状況としては、最初にソースからインストールしたのですが、うまくいかずapt-get からRPMでの
インストールを行いました。OSはFC3、Pgのバージョンは7.4.6です。

どちらさまかお助けいただけないでしょうか。
120NAME IS NULL:05/01/12 15:16:28 ID:???
初期化してないとか
121119 initdb:05/01/12 16:43:03 ID:/0becKYD
>>120
神!てゆうか未熟すぎてすみませんでした。
朝起きたら120様のほうに向かいおまいりします。
122120:05/01/12 16:51:46 ID:???
東京都目黒区在住です
123NAME IS NULL:05/01/12 22:13:52 ID:???
SSHを使って、コマンドでテーブルを表示させようとしたのですが、文字化けしました。
どうすれば解決するでしょうか?
124NAME IS NULL:05/01/12 22:43:17 ID:???
psqlの話をしてると仮定して \encoding
125NAME IS NULL:05/01/17 11:59:04 ID:???
update 対策で vacuum を cron で回す、という話はよく聞きますが、
例えば PHP などで大量に update した後にプログラム内で pg_query($db, "vacuum") を
している方はいらっしゃいませんか。
126NAME IS NULL:05/01/17 13:25:12 ID:???
そこまでしなくていいんじゃないかな。
127NAME IS NULL:05/01/17 14:58:39 ID:???
つか、なんでcronで回すかってーと、systemのidle時を狙い打つためなのね。
phpでアップデート後というとまあ普通は時間が特定出来ず、高負荷時に
VACUUMをかける可能性もあるのでお勧めできない。

その大量アップデートの後はsystemが比較的idleなことが確実で、どうしても
やりたいんだというなら止めないが。

更新直後のVACUUMの必要性はその大量更新によって参照パフォーマンスに
どれくらい影響があるかによる。たとえば数百万単位のレコードの
index対象項目を殆ど更新してしまうような更新処理でもしない限り、
そこまですることはないと思う。
128125:05/01/18 10:18:51 ID:???
>>126-127
ありがとうございました。

一番いいのは DB のパフォーマンスが下がり、
かつ idle なら vacuum 自動実行なのですが。
129NAME IS NULL:05/01/18 10:59:11 ID:???
すみません。教えていただきたいのですが、
SELECT count (*)を使わないで、
システムカタログ等からテーブルのレコード件数を把握したいのですが、
どこを見れば宜しいでしょうか。
130NAME IS NULL:05/01/18 11:25:39 ID:2UkA0amN
>>128
パフォーマンスが下がるって意味わかる?
なんか、パフォーマンスっていいたいだけかと。
4時ごろやっときゃ問題なかろ。
131NAME IS NULL:05/01/18 12:45:46 ID:???
>>129
まずはしょーもないこと考える自分の頭の中を
132125:05/01/18 12:51:50 ID:???
>>130
現在は 30 分おきに cron しているのですが、
それでは足りないときがあるんです。

かといって 10 分おきだとご指摘の通り
過負荷時に vacuum 走ることになりますよね。

ですから `w` で rup を取得し、idle がある閾値以下なら
pg_query() で vacuum させようかとも思い始めました。
133NAME IS NULL:05/01/18 13:13:59 ID:22aeSu5q
>>132
おまえのところは10分おきに百万レコード単位でインデックスの変更
が行われるのか?ただVACUUMいいただけちゃうんかと。
134NAME IS NULL:05/01/18 13:19:00 ID:???
>現在は 30 分おきに cron しているのですが、
>それでは足りないときがあるんです。

30分置きにVACUUMしても足りないというのは特殊な状態だから、
多少はどういったシステムなのか、レコード数の規模なんかも
出さないと答えようがないと思うぞ。

>かといって 10 分おきだとご指摘の通り
>過負荷時に vacuum 走ることになりますよね。
10分置きVACUUMを考慮するということは更新が10分以内には終わる、
ということでそれは「大量」とは思えないんだよね。

だもんで、もうちょい詳しく情報出してくれんと。
135132:05/01/18 15:34:42 ID:???
情報小出しですみません。

100 件しかない商品テーブルだと思ってください。
その 100 件の(例えば)在庫数カラムの在庫数を書き換えるために
毎回 100 回の update が一気に走ります。普通は数秒で終わります。

この作業が昼間であれば 1 分間に 1 〜 10 回くらい発生します。
ピーク時にそんな状態が数分続くと update が異常に遅くなるんです。
数秒のものが十数秒、数十秒になり、load avarage も上がっていきます。
vacuum するとまた数秒程度に戻ります。

この update 作業中にもいろいろな SQL が走りますが、
その商品テーブルを select するだけでその他に update/insert はありません。

PostgreSQL 7.2.6 / P3-930M / 256M / RH7.3 という環境です。
136NAME IS NULL:05/01/18 16:24:49 ID:???
1操作で更新系100SQL、ピーク分1000SQL以上走るという
実装が既に腐ってるんだが。

ものすごい勢いで不使用領域を作るからVACUUMも大事だけど、
レコードはたかが3桁のオーダーだしなあ。
トランザクションの書き戻し待ちさせられててスピードが
落ちてるだけのような希ガス。

まあ、実装を考え直したほうがいいが、動いているものの改修だと
そうもいかないだろうし、辛いやね。
137NAME IS NULL:05/01/18 19:08:20 ID:22aeSu5q
単純にファイルI/Oの問題だろうな。まずはメモリを1GBにしてみろ。
138132:05/01/18 21:34:26 ID:???
>>136-137
いろいろありがとうございました。
とりあえずメモリを増やしてみます。
139NAME IS NULL:05/01/18 21:36:41 ID:???
>>136
a 〜 z にそれぞれ 1 〜 26 の数字を振り、
z の 26 を 1 にした場合、
a は 1 → 2, b は 2 → 3, ... y は 24 → 25 とずらす場合に
26 回 update が走るのですが、これのうまい実装はあるでしょうか?
140NAME IS NULL:05/01/18 21:42:52 ID:???
>>139
>これのうまい実装はあるでしょうか?
そもそもその「これ」とやらが間違ってると思われ。
141NAME IS NULL:05/01/18 22:02:24 ID:???
>>140
では、「これ以外」の実装とは?
142NAME IS NULL:05/01/18 22:07:13 ID:???
PostgreSQL自体に手を加えたいのでは無いでしょうか?
143NAME IS NULL:05/01/18 22:34:59 ID:???
>>139
意図がつかみかねるけど、a 〜 z (1から26)の値が入っている
項目を X としたときに、(X + 1) % 26 をやりたいと言ってるだけじゃないか?
144NAME IS NULL:05/01/18 23:41:04 ID:???
ねじが100種類あって、Aセットなら20種類50個、Bセットなら50種類230個、
というようなの組み合わせで販売するとする。
セットのねじ−個数はなんらかのマスタに持つとする。

で、Aセットが購入されたら、20種類のねじ在庫からおのおの個別個数の
在庫を引かなければならない。もちろんねじだから、1本からも販売はある。

で、最多注文時間帯は1分間に10受注ぐらいする場合がある。

このWebシステムのうまい実装を考えよ。

‥か。こりゃ結構骨の折れる演習問題だな。
145NAME IS NULL:05/01/19 00:15:59 ID:???
RDBではなくOODBを使うと、RDBの場合より実装しやすそう。

つうか、1分に10受注って、ピーク時にもそんなに負荷はかからない、ということがいいたいのかな?
146NAME IS NULL:05/01/19 00:29:53 ID:???
人気通販サイトとかの方がトランザクション多いと思うけど、
バキュームなんて日に1回程度だろ。
なんか違うところがおかしいはず。
147NAME IS NULL:05/01/19 01:00:26 ID:???
>>144
PostgreSQLスレじゃなく、データモデリングに関するスレで聞いたほうがいいよ
148NAME IS NULL:05/01/19 04:29:43 ID:???
>>141
どうやってa 〜 z に1 〜 26 を割り当てているのかによる。
alpha text,no int2
というテーブルhogeが合ってalphaにa 〜 z、numberに1 〜 26を入れると仮定した場合
Xだけずらすには
update hoge set no = ((no - 1 + X) % 26) + 1

テーブルの仕様が分からないと、正確な事は言えんから、残念。
149141:05/01/19 10:17:38 ID:???
>>148
例が悪かったです。すまん。ローテートではなく、

a,b,c,d

の c を 1 個上にソート

a,c,b,d

そして、b を 2 個上にソート

b,a,c,d

のようなことです。
これを実現するためにテーブルはおっしゃる通り

alphabet text, no int

で、 order by no したい、ということです。

c を 1 個ソートは b と c の 2 回の update で済むが、
b を 2 個ソートだと 3 回 update、
これが z を a だと 26 回 update ですよね。
これを 148 のようにクールに書く方法はないかな、と。
150NAME IS NULL:05/01/19 10:41:50 ID:???
>>144
スレ違いすみませんが
これの実装方法気になる。
この話題、別のとこで再開してるのなら誘導お願いしますー
151132:05/01/19 11:42:51 ID:???
私も知りたいです
152NAME IS NULL:05/01/19 11:52:08 ID:???
>>149
移動位置にあるアルファベットの数字を移動するアルファベットに割り当て
それ以降(ソートによっては以前)〜移動するアルファベットの間にある数値を
+1すればよいんじゃないか?一回じゃ無理だけど。2,3回か。

でも何を使ってPostgreSQLを操作しているか知らないけどスクリプト等で
文字列で、検索、切り取り、挿入をしたほうが簡単じゃないか?
153NAME IS NULL:05/01/19 11:57:03 ID:???
>>145-146
ECサイトなら分100アクセスはあっても
同一商店(この場合テーブルを指す)から1分当たり
100商品1000在庫が変動するなんてことはないでしょ。
154NAME IS NULL:05/01/19 12:00:27 ID:???
>>152
つうか
alphabet text, no int, prev int, next int
として前後のnoを格納しておけばあらゆる異動は2UPDATEで済む。
155NAME IS NULL:05/01/19 12:04:36 ID:???
>>150
いつどれが何個売れたとか何個入庫したとかという情報も必要かな。
だから、入出庫履歴テーブルを用意してそこに記録する。
現在の在庫量を算出するには、
SELECT * FROM ネジマスター LEFT JOIN (SELECT ねじコード,sum(入出庫量) FROM 入出庫履歴 GROUP BY ねじコード)AS foo USING(ねじコード);
見たいな?

このままほっとくと、入出庫履歴テーブルが結構な行数になっちゃうので、
INSERTはいいけど、在庫量を調べる上のクエリに時間が掛かる。

そこで、定期的に(1日おきか1時間おきかは置いといて)現在庫量をそっくりそのまま在庫テーブルに
移して、出庫履歴テーブル(記録用テーブルに移すしてから?)を空にする。
後は、在庫テーブル UNION 入出庫履歴テーブルで現在庫量を求める。

MVCCのおかげでテーブルロックすることもないから、業務中でも在庫テーブル更新は行える。

で、どんなもんだろうか?
入出庫履歴にどのぐらい溜まれば、在庫量を算出するクエリが実用上問題になる時間が掛かるのかは
試してみないとわからないけど、100x60分x業務時間で5万-10万行/日ぐらいなら、何とかなりそう。
出庫(販売)前に現在庫量を調べてからって形になってたら厳しいか。
156NAME IS NULL:05/01/19 12:22:33 ID:???
>>152
abc(中略)xyz の y を a の次、つまり
aybc(中略)xz の場合など、移動量によって
update が比例して増えますよね。

この問は、例えば Web 画面で

<select name="item_code" size="10">
<option>item1
(略)
<option>item100
</select>

とした場合に、itemN を↑↓ボタンで並べ替えるプログラムなどの問題です。

>>154
リスト構造をすれば確かに update は 2 回ですが、
SQL で並べ替える場合 ( order by ) が難しくありませんか。
157NAME IS NULL:05/01/19 13:10:08 ID:???
>>153
正直、RDBでそのアクセス量は捌けないと思う。
RDBはバッチ処理系だもんで、そもそもそう使い方するもんじゃないし。
(全テーブルをオン・メモリにするとかの反則はなしでね。)

1つのASCIIフラットファイルにフォーマットを決めて全在庫を書き、
phpなりのロジックで在庫確認/増減させて書き戻す。
まあ、1行1商品の在庫数としておけばいいだろう。何行目がどの商品か
だけ厳密に決定しておけば良い。
商品が4桁程度のオーダー(1万商品程度、課題のねじなら1万種類)なら
1秒もかかるまい。
>>155氏の意見ももっともなので、受注の週間に先ず入庫/出庫データを
一定のフォーマットで残すようにしよう。1注文で1ファイル。
これも1行1商品の増減数としておけば良いだろう。これは作っていくだけだから
壊れない。万一在庫ファイルが壊れた場合は、RDBから在庫ファイルを再生成し
入出庫ファイルを順次適用すれば、現在在庫は復元出来る。

で、夜間バッチでRDBへ適用。入庫/出庫ファイルを消去し在庫ファイルと
RDBの在庫一致を確認。

在庫管理それ自身はRDBが向いていると思うので、適材適所ということで。
158NAME IS NULL:05/01/19 13:41:16 ID:???
>正直、RDBでそのアクセス量は捌けないと思う。


全然捌けるわけだが…
159NAME IS NULL:05/01/19 13:44:03 ID:???
アマゾンとかヤフオクとか、普通にそれ以上のアクセスあるだろうな。
当然中の人はRDBだろう。

Postgresと関係なくなってきてるのでこの話はここでやめで。
160NAME IS NULL:05/01/19 13:44:50 ID:4WtFCBLG
>>157
どんな貧弱なRDB使ってるんだ?
161NAME IS NULL:05/01/19 13:47:54 ID:???
昭和の時代の汎用機の話してるんじゃないの?
PCサーバにOracle入れたって、普通に同時1000とかで動かせるしな
162155:05/01/19 14:23:02 ID:???
このスレが該当スレになるのかな?
【より良い】データモデリング【モデルを】
http://pc5.2ch.net/test/read.cgi/db/1057509675/
普段ヲチすらしてないけど、最後の方は在庫推移のモデルって話になっているようだ。

ただ、更新の激しいテーブルは処理時間が増えてしまうというのは、
PostgreSQL特有(MVCCの実装方法による)の問題なんですよね。
UPDATEは旧データの無効化と新データの挿入になっていて、
命題の件だと1分で10倍、1時間で600倍に膨れてしまうから、
インデックスなんて全然効かない。てか、インデックス張らない方が
速いだろう。(更新も抽出も共に)
163NAME IS NULL:05/01/19 14:25:28 ID:???
>>160
PostgreSQLじゃないの?
164NAME IS NULL:05/01/19 14:48:34 ID:v3nirws7
>>156
>abc(中略)xyz の y を a の次、つまり
>aybc(中略)xz の場合など、移動量によって
>update が比例して増えますよね。

移動量がいくつだろうが条件文を書けば2回のupdate分で済むと思うのだが。
もちっと頭使え。
165NAME IS NULL:05/01/19 15:01:57 ID:Ua1Qg+Kc
PostgreSQL 8.0 出ました.

http://www.postgresql.org/
> PostgreSQL 8.0 Out Now

こちらは日本語記事.まだトップには出てませんけど,
センター試験にならって,2ch にリークしてみました.
http://www.postgresql.jp/ug/press-release/2005-01.html
166NAME IS NULL:05/01/19 15:06:14 ID:g1/lbauT
PostgreSQL8.0を話題にしないのは、波田陽区に斬られるのが怖いからですか?
167NAME IS NULL:05/01/19 15:08:23 ID:???
>>164
ごめん。何度読んでも素で分からないです。教えてくれますか。
168NAME IS NULL:05/01/19 15:36:58 ID:???
>>167
移動するアルファベットをX,数字をM
移動先のアルファベットの数字をNとおく

update hoge set no = N where alpha='X';
update hoge set no = no + 1 where N <= no and no < M and alpha != 'X';
169NAME IS NULL:05/01/19 15:41:25 ID:???
>>168
ああ、UPDATE"文"が2つってことか。
170NAME IS NULL:05/01/19 16:31:23 ID:???
> update分
スマン変換ミスだ。
171NAME IS NULL:05/01/19 17:23:53 ID:???
>>167
vacuumする頻度が少なくて済むようにupdate対象を少なくしたいってことか。
こっちが良く理解してなかった。148のように、ってあるからsql文を少なく
したいと勘違いしてた。スマン。

そういう条件だと、データを文字データとして一箇所に入れて、スクリプト側で
文字列操作する方法ぐらいしか思いつかない。selectの手間を考えなければ154の
リスト構造化か・・・。
172167:05/01/19 18:56:33 ID:???
>>171
いろいろ考えてくれてありがとうです。
173NAME IS NULL:05/01/19 19:54:45 ID:???
100 件あるテーブルにおいて、

update hoge set no = 2 where no = 1;
update hoge set no = 3 where no = 2;
(中略)
update hoge set no = 100 where no = 99;
update hoge set no = 101 where no = 100;

より

update hoge set no = no + 1;

の方が速いですか?それとも同じ?
174NAME IS NULL:05/01/19 21:15:39 ID:???
>>173
試せぼけ! って言われるよ

後者の方が早い。

関係ないけど、その例でnoがunique keyだった場合に、
結果的にはOKなはずだけど、update(後者でも)ではエラーになっちゃうんだよなあ。
これって仕方ないことなのかね。
(今手元に他DBがないからこれが当然の動作かどうかはよくわからん。)
だから今は100足してから99引くとかいんちきくさい処理をしている。

誰か俺が間違っていると指摘してくれ。
175NAME IS NULL:05/01/19 22:57:52 ID:???
>>174
制約の遅延が出来るのは、今のところ外部キーのみだから、仕方ないことなのかも。
8.0の正式版では試してないけど、beta2の時点ではダメだった。
176NAME IS NULL:05/01/20 01:07:39 ID:???
>>174
指摘したいのは山々だが・・・
俺も同じようなことでしのいだ覚えがある。
177NAME IS NULL:05/01/20 09:23:39 ID:???
unique key の一括update って
普通に考えたら実装に問題ありって思ってしまうけど
具体的にはどんな項目なの?
178NAME IS NULL:05/01/20 10:11:31 ID:???
>>177
表示順序(ORDER BY)を決めるカラムとか。
新規挿入するデータを中間にもってきたい場合、
その番号以降を+1したいなど。
179NAME IS NULL:05/01/20 16:04:30 ID:???
>>178
リストにしとけば、一斉書き換えはしなくて済むね。もちろんリストだと
表示時の負荷が高まるから、ケースバイケースだけど。
180NAME IS NULL:05/01/20 21:07:26 ID:???
>>179
ごめん。まじでわからん。
リストって何?
181NAME IS NULL:05/01/20 22:03:14 ID:???
>>180

リスト構造。>>154みたいな奴。

つうかここまでの議論を全然読んでないのかよ・・・
182NAME IS NULL:05/01/20 23:03:31 ID:???
>>181
ああ、そういうことか。ども。
183NAME IS NULL:05/01/21 02:01:31 ID:???
>>154みたいなリスト形式の場合ソートってどうやるの?
184NAME IS NULL:05/02/02 12:28:51 ID:???
すみませんが,質問です.
PostgreSQL で,「新規行挿入時の日時」「行更新時の日時」を
自動的にカラムに記録するにはどうしたら良いのでしょうか?

今の自分の考えですが,
・新規行挿入時...カラムのデフォルト値を,現在時刻の関数に
 する(どの関数にしたらよいかは分からない)
・行更新時...UPDATEに関連付けたトリガを作成する.
あたりでよいのかな?と思うのですが,どうでしょうか?

MySQL だと,timestamp 型のカラムは自動的に更新されて
くれるのですが.

以上です.どなたかよろしくお願いいたします.
185NAME IS NULL:05/02/02 13:52:49 ID:???
>>184
トリガで挿入・更新とも対応できるはず
186184:05/02/02 14:51:36 ID:xRHYLdFZ
>>185
ありがとうございます.更新系は,こんなページを見つけました.
http://ash.or.jp/db/pg_use.htm

挿入系は,テーブル定義のデフォルト値に,何か関数か予約語を
指定することで可能にはならないでしょうか?

『プログラマのためのSQL』で,そのやり方が紹介されていたので,
PostgreSQL でそのようにやってみたいのです.
187NAME IS NULL:05/02/02 14:59:50 ID:???
current_timestamp,current_date
188184:05/02/02 15:19:42 ID:???
>>187
ありがとうございます!うまく行きました.
これで MySQL から順調に乗り換えられます.
189NAME IS NULL:05/02/02 22:11:15 ID:???
plperl内で日本語に対して正規表現を使おうとしているのですが。
(制約に平仮名のみを許す属性を作ろうと思ってましてその前準備)
激しく文字化けします。

postgresの方から
$select version();
PostgreSQL 7.4.3 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)

$ show client_encoding;
UNICODE

$ show server_encoding;
UNICODE

端末(bash)のほうから
$ perl -v
This is perl, v5.8.5 built for i686-linux

$ env |grep LANG
LANG=ja_JP.UTF-8

の状態で
create or replace function testfunc4(text) returns text as '
my ($text) = @_;
$text =~tr/s/b/;
return $text;
end;' language 'plperlu';
でつくったtestfunc4という関数に対して、
select testfunc4('あ')
とやってやると
testfunc4
-----------
(激しく文字化け)
というリターンになります。
正規表現の内容($text =~tr/s/b/のぶぶん)は何をいれても変わりません。
入力がアルファベットのみの時は問題ありません。
また、正規表現の行だけを外したら問題なく動作するのですが、
何を疑ったらいいでしょうか?
190NAME IS NULL:05/02/02 22:20:17 ID:???
>>189
>何を疑ったらいいでしょうか?
terminalの文字コードだな。
UNICODEで吐き出されて北データをUTF-8で処理しようとして
バケてるんじゃないのかな。
191NAME IS NULL:05/02/02 22:35:06 ID:???
>>190
正規表現の行を削除した場合正常な値が返って来るのです。
あと、基本的にUNICODE=utf8だったような気がするのですが、、、、、

また、ほかに
create or replace function testfunc5(text) returns text as '
$test = $_[0];
if($test =~/サ/){
return ''success'';
}
else{
return ''not match'';
}
end' language 'plperl';
のばあい、select testfunc5('サイタマサイタマ');
とうてば、successと返って来るはずなのですが、
not matchしか返って来ません。

ほとんど同じ構文の

#!/usr/bin/perl --

$test = $ARGV[0];
if($test =~/サ/){
print 'success';
}
else{
print 'not match';
}
だとうまく行くのですが。
192NAME IS NULL:05/02/02 22:43:25 ID:G6QtGaOI
他に、
#!/usr/bin/perl
foreach my $code ( 1..65535 ) {
my $char = pack "U", $code;
my $ucs2 = sprintf "%04x", $code;
if ( $char =~ /\p{InHiragana}/ ){
print "$ucs2\t$char\n";
}
}
のばあい、正常に平仮名のリストと文字コードが返って来るのですが、

create or replace function testfunc6() returns text as'
my $result;
foreach my $code ( 1..65535 ) {
my $char = pack "U", $code;
my $ucs2 = sprintf "%04x", $code;
if ( $char =~ /\p{InHiragana}/ ){
$result.= "$ucs2\t$char\n";
}
}
return $result;
end;' language 'plperlu';

の場合、何も返って来ません。
ただし、 if ( $char =~ /\p{InHiragana}/ ){と、それに対応する}
をコメントアウトしたら、文字化けコードも大量に含みますが、
値が返って来ます。
193NAME IS NULL:05/02/02 23:02:53 ID:???
>>191
UNICODE≠UTF8
194NAME IS NULL:05/02/03 00:59:55 ID:???
DBはEUC-JP、ロケールはCにしといたほうが無難。
195NAME IS NULL:05/02/03 02:00:24 ID:us67hi8V
ロールケーキが何だって?
196189:05/02/03 04:50:07 ID:???
思考錯誤の末やっと問題解決
どうもperl5.8のユニコードの扱いの問題のようだった。
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
みたいに、UTFフラグを立てた文字列に対して日本語正規表現を書けてやればうまくいくようだ。
DBのエンコーディングは、、、とりあえず、UTF8文字列とマッチさせなきゃならないので、
もうしわけないがUTFのままです。
EUC-JPでも試してみたんだけども、perlの内部処理はUTF8でやってるようで、
で、関数の作成時にどうしようかなって問題があるんで、、、、。

create or replace function testfunc5(text,text) returns text as '
use encoding ''utf8'';
my $test = $_[0];
my $wide_char = Encode::decode("utf8", $test);
if($wide_char =~/\\p{InHiragana}/){
return ''success''';
}
else{
return ''not match'';
}
end' language 'plperlu';

test2=# select testfunc5('阿あ','');
testfunc5
-----------
not match
(1 row)

test2=# select testfunc5('あ','');
testfunc5
-----------
success
(1 row)

ちなみに置換もだいたいこの応用(正規表現部分の書き換えだけ)で行けました。
197189:05/02/03 05:10:27 ID:???
create or replace function testfunc5(text,text) returns text as '
my $test = $_[0];
my $wide_char = Encode::decode("utf8", $test);
if($wide_char =~/^\\p{InHiragana}$/){
return ''success'';
}
else{
return ''not match'';
}
end' language 'plperlu';

間違えた。こちらのすくりぷと。
いろいろ試すためにごちゃごちゃしたのつけてて、整理して貼ってたんで
余計な物まで消してしまっていた、、、、。
198189:05/02/03 05:25:47 ID:???
EUC-JPのDBサーバーに対して試してみた所
\\p{InHiragana}見たいなメタタイプだと問題が起きなかったのですが、

create or replace function testfunc5(text) returns text as '
use utf8;
use encoding ''utf8'';
my $test = $_[0];
my $wide_char = Encode::decode("utf8", $test);
if($wide_char =~tr/ぁ-ん/ァ-ン){
return $wide_char.''success'';
}
else{
return $wide_char.''not match'';
}
end' language 'plperlu';
のようにじっさいにもじをうちこんでみると、ぁ-んを
クライアント側がEUC-JPでおくってみても、UTF8で送ってみても
ERROR: invalid byte sequence for encoding "EUC_JP": 0x812d
となりました。

use euc-jp
use encoding ''euc-jp'';
をつけたり外したりしてもエラー変わらず。
まあ、とりあえずUNICODEサーバーで日本語正規表現使える事確認できたので。
おいらはこれでおわりにします。。。
199189:05/02/03 05:36:00 ID:???
あ、正規表現の/忘れも気づきましたが、これを加えてみても結果変わらずでした。
200NAME IS NULL:05/02/04 18:57:52 ID:VjNijk/8
bis_test=# select round((1343/5501),9);
round
-------------
0.000000000
(1 row)

bis_test=# select round((5/1),9);
round
-------------
5.000000000
(1 row)


小数点以下になる計算をすると0になってしまいます、、、、
201NAME IS NULL:05/02/04 19:22:40 ID:???
>>200
どういう結果を求めているのかよくわからんのだけど

test=> SELECT ROUND(1343::FLOAT/5501::FLOAT);
round
-------
0
(1 row)

test=> SELECT ROUND(6343::FLOAT/5501::FLOAT);
round
-------
1
(1 row)

test=> SELECT ROUND((1343::NUMERIC/5501::NUMERIC), 9);
round
-------------
0.244137430
(1 row)

test=> SELECT ROUND((6343::NUMERIC/5501::NUMERIC), 9);
round
-------------
1.153063079
(1 row)
202NAME IS NULL:05/02/05 23:39:11 ID:???
=# select round((1343.0/5501),9);
    round
-------------
 0.244137430
203NAME IS NULL:05/02/07 16:00:37 ID:???
INDEXについてですが、主によく検索するキー(whereで使うキー)を
INDEXとして貼りまくってるのですが、皆さんはどのような基準で貼られているか
教えていただけますでしょうか。あまり値の変化がないものに貼っても意味がないとか
いろいろ聞くのですが、いまいちピンとこないのです。
204NAME IS NULL:05/02/07 21:01:30 ID:???
検索して速くなるものについて張る。
速くならないものに張ってもDML文が遅くなるだけなので張らない。
205NAME IS NULL:05/02/07 22:18:57 ID:???
>>204
その基準だと、ある程度の規模になると破綻しそうだな
206NAME IS NULL:05/02/07 22:29:59 ID:???
>>205
詳しく
207NAME IS NULL:05/02/07 22:39:49 ID:???
どのカラムにインデックスを貼るかは
テーブルもしくはシステム全体の設計時点で決まるってことじゃないの。

そのまま貼っても速くならないなら貼らなくていい、で済むのならいいけど、
普通速くなるような設計にするわな。
208204:05/02/07 22:50:35 ID:???
>>205

>>203 程度のレベルではそれくらいの説明で十分だろう。

209NAME IS NULL:05/02/07 23:34:26 ID:???
>>208
お前みたいな先輩(上司)がだめな奴(とその結果のだめなコード)を
大量生産してるんだろうなあ。
210NAME IS NULL:05/02/07 23:45:53 ID:O1kAgblR
数秒おきにUPDATEかましたら
xreaにおこられちゃった▼・ェ・▼ワン♪
211NAME IS NULL:05/02/08 01:02:11 ID:/tyDpKiS
DELETEやUPDATEしたとき、元のデータは物理的には削除されませんよね?
そのoidを知っていればデータを見ることは出来ますか?
212203:05/02/08 16:18:07 ID:???
レスして頂いた皆様ありがとうございます。
商品マスタなら商品コードにPrimaryKeyを持たせたり、そういう主な部分は分かるのですが
その他の例えば、検索フォームからキーになるようなものも全部つけたほうがいいのか等、
基準がまだよく見えてないのです。explainを使ってINDEXが使われたかどうかのチェック等をして
INDEXの設計をやっていくのでしょうか?
213NAME IS NULL:05/02/10 11:26:53 ID:???
すみません。質問させてください。
データテーブルTable1とマスタテーブルTable2があったとして
Table1に商品Aと商品Bの商品コードが格納されていて、
マスタテーブルTable2から商品名を取得しようと思うのですが、
どのようなjoin文にすればよいのでしょうか?
select * from table1
inner join table2 on (table1.商品A = table2.商品コード)
inner join table2 on (table1.商品B = table2.商品コード)
だとエラーが出てしまいます・・・・。
214NAME IS NULL:05/02/10 11:52:54 ID:???
すみません。table2にエイリアスを与えることで解決しました。
215NAME IS NULL:05/02/10 13:59:02 ID:Qz7FoCOW
ごく基本的ですみませんが,質問です.

CSE で PostgreSQL に接続すると,システムテーブルらしきものまで
全部表示されてしまいます.

どうしたらユーザの作成したテーブルだけを表示するようにできるでしょうか?
216NAME IS NULL:05/02/10 14:48:45 ID:???
設定の、システムオブジェクトがどうのこうの
217NAME IS NULL:05/02/10 15:30:07 ID:???
>>216
ありがとうございます.
CSE の設定の「PostgreSQL」に,「システムオブジェクトを表示する」という
項目がありました.
そのチェックをはずすことで,うまく行きました.ありがとうございました.
218NAME IS NULL:05/02/10 16:26:32 ID:???
>>217
そんなごくあたりまえの結果報告が出来る質問者も最近見掛けなくなったな。
219NAME IS NULL:05/02/10 20:15:43 ID:???
>>218
ゆとり教育
220NAME IS NULL:05/02/10 21:39:35 ID:???
>>213
select table1.必要なカラム,table2.必要なカラム from table1,table2
where table1.商品A = table2.商品コード or table1.商品B = table2.商品コード
221NAME IS NULL:05/02/11 16:25:48 ID:+y2Elq3k
where句の一個目の条件しかインデックスが利かないってホント?
222NAME IS NULL:05/02/11 17:20:27 ID:???
ウソです。
223NAME IS NULL:05/02/12 12:42:36 ID:???
部内システムだし、今あるオラクルのシステムをPostgreSQLに移行を
検討しているのですが、DWH的な使い方は問題ありませんでしょうか。

OPEN OLAPとかすでに出ていますが、PostgreSQLにオラクルの
ビットマップインデックス等DWH向きの機能が無いように見えるので
気になります。

DWH的な使い方で使用感、アドバイス等お願いします。
224NAME IS NULL:05/02/12 13:15:50 ID:???
OracleもMySQLもPostgresも使ってるけど(Mysqlは4.1からは凍結決定した)

ビットマップインデックスやOracleTextとか
使いこなしてる人だと正直移行しないほうがいいと思う

規模を考えて何度もレスポンスやスループットを計算、テストしてみて
実用になるかどうか判断して投入するのがオープンソースのDBだと思ってくれ

ただだからと飛びつくのは止めれ

でもマシンパワーの向上とPostgresの高機能高速化で新規案件は
Postgresを採用しているケースは多い
225NAME IS NULL:05/02/12 15:02:50 ID:???
>>224
アドバイスありがとうございます。

>規模を考えて何度もレスポンスやスループットを計算、テストしてみて
>実用になるかどうか判断して投入するのがオープンソースのDBだと思ってくれ

それはそうですね。
OLTP系であればテストして判断します。
実際小規模ではMySQLもPostgreSQLも利用しています。

今回お聞きしたのは調べた限りではDWH系の機能がなさそうに見えたんですが、
BI系ツールも出てきたので、実際DWH系で利用されている方の意見を聞きたかった
ためです。

DWH系の機能がないのであれば、調査するまでもなくDWH系での利用は
時期早々ということになるかと思います。
226NAME IS NULL:05/02/12 16:01:03 ID:???
フリーのであればOpenOLAPぐらいか…?
そういえば、実務で使ってる人っている?
227NAME IS NULL:05/02/12 17:19:03 ID:???
フリーのプロダクトの安定性はユーザー数に単純に左右されやすいからなぁ
228NAME IS NULL:05/02/12 17:26:03 ID:???
フリープロダクトの安定性は、そこにつっこまれた金額に左右されるんだよ。
229NAME IS NULL:05/02/12 18:03:08 ID:???
フリープロダクトの安定性は、そこにつっこまれた手弁当に左右されるんだよ。
230NAME IS NULL:05/02/12 21:24:31 ID:???
フリープロダクトの安定性は、そこに入ったMSのツッコミに左右されるんだよ。
231NAME IS NULL:05/02/13 00:36:58 ID:???
フリープロダクトの安定性は、>>227-230 全てに左右されるんだよ。
232NAME IS NULL:05/02/13 01:52:07 ID:???
フリープロダクトの安定性は、カワイイ娘からの応援メールに左右されるんだよ。
233NAME IS NULL:05/02/13 02:30:09 ID:AE3EcMav
PostgreSQL 7.2.x な環境でプライマリキーのインデックスを作り直すために
--
DROP INDEX hoge_pkey;
ALTER TABLE hoge ADD PRIMARY KEY (id);
--
とやっているのですがALTER TABLEの際のインデックス作成中にpsでプロセスを確認すると関係ないテーブルのUPDATEがすべてWAITING状態なんです。
ALTER TABLEって全テーブルをロックする仕様なのでしょうか?

ちなみにアプリケーション内では明示的にLOCK TABLEはやってないです。
234NAME IS NULL:05/02/19 09:36:32 ID:???
1つ質問があります。
SSH経由でpgAdminIIIからリモートのDBサーバ(PostgreSQL 8.x)に
接続することは可能でしょうか?

pgAdminIIIの検証を行っているのですが、
pgAdminIIIがインストールされている端末上にある
ローカルのpostgreSQL8については接続できることを確認しています。

ご存知のかたがいれば、情報よろしくお願いします
235NAME IS NULL:05/02/19 18:24:16 ID:???
昨晩SSHで5432を転送して使ったよ
7だけど。
236NAME IS NULL:05/03/02 22:55:53 ID:IksncMCE
質問です.
PL/pgSQL で,group by で使われる集約関数を書くことはできるのでしょうか?

具体的には,複数レコードの文字列カラムを,カンマ区切りで結合した値に
まとめることのできる関数を作りたいと思っています.
237236:05/03/02 22:59:08 ID:IksncMCE
例をあげます.

1  'aaa'
1  'bbb'
1  'ccc'
2  'ddd'
2  'eee'

これを

1 'aaa, bbb, ccc'
2 'ddd, eee'

という集約ができるような関数を作りたいのです.
どうかよろしくお願いします.
238NAME IS NULL:05/03/03 00:08:08 ID:???
plpgsql 集約関数
でぐぐると幸せになれるよ。
239237:05/03/03 10:56:30 ID:???
>>238
素晴らしい!幸せになれました.ありがとうございます!!
http://216.239.63.104/search?q=cache:Ia4HDMAtjCUJ:cgi.www5b.biglobe.ne.jp/

http://www.postgresql.jp/document/pg732doc/reference/sql-createaggregate.html
AGGREGATE というのがあったのですね.
不慣れなもので,見つけられませんでした.すみません.
240237:05/03/03 10:58:16 ID:???
お礼にはなりませんが,自分の作った関数を晴らせていただきます.
まあ,先のリンク先とほとんど同じなのですが.

-- カンマ区切りで CHAR 同士を連結するストアドファンクション
CREATE OR REPLACE FUNCTION concat_comma(CHAR, CHAR) RETURNS CHAR AS '
BEGIN
IF $1 IS NULL THEN
RETURN $2;
ELSIF $2 IS NULL THEN
RETURN $1;
ELSE
RETURN $1 || '', '' || $2;
END IF;
END;
' LANGUAGE 'plpgsql';


-- カンマ区切りで CHAR の値を連結する集約関数
-- 従来の SUM などと同様に使う.
CREATE AGGREGATE CHAR_COMMA_SUM (basetype = CHAR, sfunc = CONCAT_COMMA, stype = CHAR);
241NAME IS NULL:05/03/03 21:13:06 ID:???
>>239
おめ。ちなみに漏れはこうやってる。

CREATE AGGREGATE array_accum (
sfunc = array_append,
basetype = anyelement,
stype = anyarray,
initcond = '{}'
);

これは http://www.postgresql.jp/document/pg801doc/html/xaggr.html に乗ってるのと全く同じで、
array_to_string()を使ってデリミタを自由に変えられるようにしてる。

SELECT a, array_to_string(array_accum(b), ', ') FROM test GROUP BY a;
242237:05/03/04 12:30:30 ID:???
>>241
なるほど,配列を要素に持つ PostgreSQL ならではですね.手続き型言語によくある
配列の join 関数と同じですね.ありがとうございます.

私は PostgreSQL の配列は,第一正規化に反するので好きではなかったのですが,
この使い方は面白いですね.まあ,カンマ区切りで結合するのも正規化に反するの
ですが.

243NAME IS NULL:05/03/06 22:53:34 ID:???
WindowsのPostgreSQL8.0でデータの自動バックアップ出来ないかな?
244NAME IS NULL:05/03/07 00:20:46 ID:???

245NAME IS NULL:05/03/07 00:24:51 ID:???
自動バックアップのバッチ組んでタスクスケジューラで…
246NAME IS NULL:05/03/07 16:42:57 ID:???
PostgreSQL 7.4.7 です。
テーブルの継承と外部キー制約についての質問です。内容はこれと同一なのですが、返信がもらえていないようです。

http://ml.postgresql.jp/pipermail/pgsql-jp/2004-February/015849.html

要約すると、ある基底テーブルがあって、別テーブルでそのキーを外部キーとして参照しています。
基底テーブルを継承して作った派生テーブルがあって、それに行を挿入します。
外部キー参照しているテーブルに、派生テーブルに挿入した値を挿入すると、外部キー制約違反になってしまいます。
派生テーブルには制約が継承されないのか?

自分も同じことで悩んでいて困っているので、この回答が大変気になります。
247NAME IS NULL:05/03/07 18:09:30 ID:???
タスクスケジューラがあったか。ありがとさん。

サービスプログラム作る必要があるかと思ったけど、そっちの方が楽だね。
後は環境変数PGUSER,PGPASSWORDに・・・(以下略)。
248NAME IS NULL:05/03/07 21:55:02 ID:???
>>246
継承されません。
ユニーク制約も継承されないので、
基底テーブルのカラムにユニーク制約をつけても
派生テーブルから同値を挿入することが可能だったりする。
249246:05/03/07 22:03:01 ID:???
>>248
やはりそうなんですか・・・
そうなると、基底テーブルを使うことによるメリットって薄そうですね。
こういった制約などが継承されるのであれば、いろんなメリットを見出せるんですけどね。
250NAME IS NULL:05/03/07 22:34:56 ID:???
>>249
マニュアルには将来改善される感じに書いてあるが、
継承が有用か十分注意せよとも書いてあるなw
251NAME IS NULL:05/03/12 14:56:30 ID:EU6oYWx7
SELECTの際、レコードの他に、ヒットした行の総数を同時に取得する方法はありますか?
開発環境としては PHP を使っています。

実はとある情報の検索画面を作っているのですが、検索結果は1画面に20件程度表示して、ページ送りが
できるようにしようと思っています。
このために LIMIT と OFFSET を使おうと思っています。
そして、検索結果として、ヒット総数も表示したいのです。
COUNT を求める SELECT とレコードを得る SELECT を別々に発行する方法以外に、なにか便利な方法は
ありませんか?

実はまだ試してはいませんが、自分で考えた方法もありまして、LIMIT を使わずに SELECT を発行して、
Pg_Num_Rows でレコード総数を取得して、Pg_Fetch_Array で取得行番号を指定して表示対象レコードを
切り出す、なんてやり方なのですが、パフォーマンス的にはどうでしょう?
252NAME IS NULL:05/03/12 22:02:36 ID:???
件数とかいろいろな要素があるけど、
まず、ページ送りをするまでの間に新たなレコードが
挿入された場合どうするのか、というところが重要かな。

前者の方法だと、count()を毎回やるのか、とか。
253NAME IS NULL:05/03/13 00:03:15 ID:???
>>252
>ページ送りをするまでの間に新たなレコードが
>挿入された場合どうするのか

トランザクション内で処理すれば問題ないでしょ。
254251:05/03/13 01:47:52 ID:???
>>252
ページ送りしてる間にヒット数が変わったら、表示もそれに追従する必要があります。
ですので、毎回 COUNT() を求めます。

>>253
ウェブアプリなので、一ページ切り出すごとにトランザクションは終了します。
google でページを送るような感じです。

ようするに、SQL だけで解決しようとすると、次のように

SELECT COUNT(*) FROM xxx WHERE xxxx・・・;
SELECT * FROM xxx WHERE xxxx・・・ ORDER BY xxx OFFSET xx LIMIT xx;

みたいに、COUNT取得用とレコード取得用のSQLを別々に発行することになるのかと思います。
ただ今回は、この方法にはちょっと抵抗があります。
というのは、複雑なクエリなので、1ページ切り出すごとに重い検索を 2回もやりたくないからです。
かといって

SELECT * FROM xxx WHERE xxxx・・・ ORDER BY xxx

みたいに、LIMIT しない全件取得の SQL を発行して、アプリ側で pg_fetch_array により対象範囲を
切り出す方法だと、カウントとレコードを同時に取得できるものの、無駄なレコードの転送が発生しないか
どうかが気になるのです。

ということで悩み中なのですが、アドバイスよろしくお願いします。
255NAME IS NULL:05/03/13 12:26:59 ID:???
>>254
>みたいに、LIMIT しない全件取得の SQL を発行して、アプリ側で pg_fetch_array により対象範囲を
>切り出す方法だと、カウントとレコードを同時に取得できるものの、無駄なレコードの転送が発生しないか
>どうかが気になるのです。

無駄なfetchは発生するだろう。で、通常ヒット数は何件くらいなの?
元のqueryの「重さ」にもよるが、それなりの時間がかかるなら全件fetchした方が
速いような気はするが。つうか試せ。
256251=254:05/03/14 12:20:16 ID:A/eX/gkS
検索の内容は、多テーブルの結合や文字列の部分一致検索などを含むものです。
総レコード数は 1万件前後だと思いますが、ヒット件数は最大全部、通常は数百件前後になるのではないかと思います。

子テーブルに階層構造があってテストデータを作るのが一苦労でして、あまり規模の大きなテストデータを用意しづらい
ことから、実際に両方式を試して比較しても、いまいちハッキリしないという状況です。
でも、SQL は 1回だけ発行する方式を採用してみました。
ありがとうございます。
257GrassWonder:05/03/14 13:09:49 ID:PmfSDFy+
postgres で SELECT した結果に対して、1からの通し番号フィールドを
付けることってできるんですかねぇ??
知ってる人居たら、教えてください!
258NAME IS NULL:05/03/14 13:18:09 ID:???
件数カウントと必要部分抽出の共存と言うか、
(重い)queryの2回(以上)発行を回避する方法を
皆さんどうやっているのか俺も知りたいところ。

ちなみに俺は、CREATE TABLE TEMPORARY TABLE AS SELECT...
でテンポラリテーブルを作ってから合計値と必要部分の1ページ分を
抜き出すようにしている。
259NAME IS NULL:05/03/14 13:25:19 ID:???
>>257
テンポラリシーケンスを作って、
SELECT nextval('temp_seq'),* FROM Table;
260NAME IS NULL:05/03/14 16:35:20 ID:???
テンポラリテーブルなんて使ったら、余計重くなるなんて話は無いんですか?
テンポラリテーブルはオンメモリで処理されたりするんでしょうか?
261NAME IS NULL:05/03/14 18:02:12 ID:???
>>260
試してみれ
262258:05/03/14 18:54:52 ID:???
CREATE TEMPORARY TABLE temptable AS SELECT...
だよ。何書いてたんだ俺...

>>260
メモリは有限なんで必ずオンメモリで処理されるとは限らんわな。
俺の場合50万件ぐらいから数100件を抜き出した感じだったんだけど
どのくらい速度差がでたかは忘れたが、遅くなるってことはなかった。

てか、総件数や合計値を知りたいだけじゃなくて、並べ替えとか
グループ分けをするなど、いろいろと表示方法を変えるとき
いったんテンポラリに落とした方がプログラミングしやすかったんだよぉ。

先のレスに書いたけど、効率のいい方法があるなら俺も知りたい。
263NAME IS NULL:05/03/15 04:57:14 ID:LMNlBsry
次のような、2つの数値カラムを持つテーブル TBL に値が入っています(値は適当です)。

ID1 ID2
1  1
1  2
1  3
1  4
2  1
2  3
2  5
2  7

このとき、ID2 にたとえば 1,2,3 の全てがある ID1 を取得する SQL はどのようになるでしょうか?

SELECT ID1 FROM TBL WHERE ID2 IN (1,2,3) GROUP BY ID1 HAVING COUNT(ID1)=3;

みたいにやると取得できるのですが、もっと単純な方法はありますか?
また逆に、1,2,3 の全てを含まない ID1 を取得する SQL はどのようになるでしょうか?
264NAME IS NULL:05/03/15 09:30:22 ID:???
>263
ID2がユニークならそのSQLでOKだがそうでないと1が3回とかでも引っかかっちゃうぞ。
ケータイなんでSQLは書かないけど普通セルフジョインだ罠。
265NAME IS NULL:05/03/15 14:43:18 ID:???
SELECT ID1 FROM TBL t0
WHERE EXISTS (SELECT * FROM TBL t1 WHERE t0.ID1 = t1.ID1 AND t1.ID2 = 1)
AND EXISTS (SELECT * FROM TBL t2 WHERE t0.ID1 = t2.ID1 AND t2.ID2 = 2)
AND EXISTS (SELECT * FROM TBL t3 WHERE t0.ID1 = t3.ID1 AND t3.ID2 = 3)
って単純じゃあねーな。
266263:05/03/15 23:29:14 ID:???
>>264
ID1 と ID2 の組み合わせでユニークです。

>>265
正攻法って感じですね。とりあえずはそういうアプローチが自然だと思います。
ただ、やりたいことの割にSQLが複雑になるのが難点なんですよね。
なにかSQLの便利文法や関数みたいのって無いものですかね。
267NAME IS NULL:05/03/16 00:17:32 ID:???
さっきまでまともに動いていたのに、
引数に平仮名カタカナ日本語が使えなくなった。

create or replace function testfunc1(text) returns text as'
declare
begin
if length($1) = 0 then raise notice ''no'';
end if;
raise notice ''%'', $1;
return $1;
end;' language 'plpgsql';

この関数で、select testfunc1('あ');
とやってやった時に文字化けやら、値がこなかったりとか。
クライアントエンコーディングは基本的に
UNICODEで、端末側はutf-8
set client_encoding to 'EUC-JP'やらで変更してやってもいじょうなし。


# show client_encoding;
client_encoding
-----------------
UNICODE
(1 row)
version
---------------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 8.0.1 on i686-pc-linux-gnu, compiled by GCC i686-pc-linux-gnu-gcc (GCC) 3.3.5 (Gentoo Linux 3.3.5-r1, ssp-3.3.2-3, pie-8.7.7.1)
(1 row)

文字化けと言うことでエンコーディング周りかなと思ったのですが、
何を疑ったらいいでしょう?
268NAME IS NULL:05/03/16 00:18:55 ID:???
訂正、文字コードを変えてやっても、変わり無し、です。
269267:05/03/16 00:23:57 ID:???
emacsからの操作をしてたのですが、一度試しにkonsole
(KDEのターミナル)から操作してみましたら、正常稼働。
で、ひょっとしてemacsのSQLモードが原因かなと思って、
emacs自体を落して、再起動させてみたら、正常稼働。

emacs側の問題でした。何が原因かはちょっとわかりませんが、、、。
すみません。
270NAME IS NULL:05/03/16 01:46:46 ID:???
>>269
正直にレスするのは大事なことだよね。乙。
271NAME IS NULL:05/03/17 12:47:08 ID:???
すみませんが,質問です.

PostgreSQL 7.3.4 で,Timestamp 型のカラムから java.sql.Date 型の
値を得たいのですが,ResultSet#getDate() だと時:分:秒が全てゼロに
切り捨てられてしまいます.

時:分:秒まで取得するためには,以下のようにするしかないのでしょうか?
new Date(ResultSet#getTimestamp("カラム名").getTime());

それとも,JDBC ドライバを変えるなどして,そのまま getDate()で
取れたりするのでしょうか?

現在使っているドライバは org.postgresql.Driver というものですが,
詳しいバージョンなどはわかりません.
272NAME IS NULL:05/03/17 13:41:40 ID:???
getTimeStampで取得すればいいだろ
Dateは日付だけだしTimeは時刻だけ

何もおかしい動きではないと思うが
273271:05/03/17 21:00:01 ID:???
>>272
ありがとうございます.これが PostgreSQL の仕様なのですね.
PostgreSQL の TIMESTAMP 型は,MySQL だとDATETIME 型になりますが,
それの ResultSet#getDate() は時:分:秒を切り捨てませんので,
PostgreSQL も同様だと思っていました.

new Date(ResultSet#getTimestamp("カラム名").getTime());

この書き方は,耐えられないというほどでもありませんが,やや冗長です.
もう少しきれいな書き方はないものか,とは思います.
274NAME IS NULL:05/03/17 21:14:24 ID:???
>>273
3種類ともDateを継承してるからな
実装によっては余計なのもはいるのかもしれないが、入ってる部分を期待するのはどうかと思うぞ

あとそんな冗長な書きかたしなくてええ
275271:05/03/18 11:22:26 ID:???
>>274
ああそうか,受け手の setter の引数を,java.util.Date 型にすれば,
Timestamp 型をそのまま渡せるのですね.
困ったな,今まで気づかずに,どのメソッドも java.sql.Date 型にして
しまってます.
まあ,何とかします.ありがとうございました.
276NAME IS NULL:05/03/19 13:43:54 ID:???
create or replace function testfunc1(arg_text text,arg_rec test1) returns test1 as'
declare
res_r_return record;
begin
raise notice ''%,%'',arg_rec.i1,arg_rec.t1;
select into res_r_return arg_rec.i1,arg_text;
return res_r_return;
end;' language 'plpgsql';

こういう関数と、
create table test1 (i1 int,t1 text);
と言うテーブルを用意しまして、
select b.* from (select testfunc1 ('saitama',a) from (select * from test1) as a) as b;

みたいなことやってみたいんですが、テーブルでキャストするみたいなことできないんでしょうか?
できれば、(select * from test1) as a の部分はまた別のSQLを書くことになるのですが、
このままだと、ERROR: plpgsql functions cannot take type record
と言うエラーになってしまいます。

ですので、test1のテーブルでキャストしたいのです
なお(select * from test1) as a を test1 as a にすればうまく行きますが、
これだと、「こちらで用意した複合型を引数にさせる」と言う目的が果たせないので、、、。
277NAME IS NULL:2005/03/23(水) 11:21:48 ID:1/N/aqtf
こっちでいいと思うのですが
PHPからPostgreSQLに接続したいんですが
ホストをlocalhostにして接続するとつながりません。 ホスト名を指定しなければ(空白で)繋がります。
繋がるときのリソースからホスト名を返しても空白なんですが
PostgreSQLのホスト名ってどこで指定するのでしょうか? postgresql.confの中?
278NAME IS NULL:2005/03/23(水) 12:03:55 ID:???
>>277
tcpip_socket = true
279277:2005/03/25(金) 09:44:18 ID:iOUir/Em
>>278

サンクス
280NAME IS NULL:2005/03/30(水) 10:18:15 ID:uLYJQsQ+
PostgreSQLが使える
レンタルサーバでおすすめってないですかね?

とりあえず今はWebARENA Suiteを使って
そこそこ満足してるのですが
古いサービスのためWeb側の機能がしょぼくて、、、

他にお勧めがありましたら教えてください
281NAME IS NULL:2005/03/31(木) 11:37:15 ID:???
Windows2000で
postgresql-8.0-ja.msi
を実行すると「インストールの準備中...」で終了してしまいます。
英語版では言語選択が出てインストールログが取れたので見てみたら
「Custom Action GetAvailableLocales did not close 1 MSIHANDLEs.」
というエラーを吐いています。。。

同様の症状の方っています?
282NAME IS NULL:2005/03/31(木) 11:43:31 ID:???
>>281
pathにcygwin/binが入ってるとなる
283NAME IS NULL:2005/04/06(水) 22:55:14 ID:aqdN+9wz
今さらですが、Access2000をフロントエンドにして、PostgreSQLを
使うことになったのですが、ODBCドライバは、インターウィズで配布されている
日本語版を使えばいいのか、それとも公式サイトの最新版を使えばいいのか、どっちなんでしょうか?
日本語版の更新履歴はずいぶん古いようだけど・・・?
公式サイトのは、char型(1)にデータを「あ」と入れたらDBへのアクセスがおかしくなってしまった。
そんなこんなでちょっと迷っています。ググっても、古そうな情報しか出てこないみたいだし。
ちなみに、Linux(CentOS3.4)、PostgreSQL7.4.7です。
284NAME IS NULL:2005/04/07(木) 18:00:10 ID:ZEIZCCOj
PostgreSQL用のJDBCドライバって
どのサイトに置いてありますか?

285NAME IS NULL:2005/04/07(木) 18:15:53 ID:???
postgresql jdbcでぐぐれば一番上に出てきませんか?
286NAME IS NULL:2005/04/07(木) 20:18:11 ID:cykybgSh
質問です。

PHP環境でテーブルの中のデータを抜くときに
for ($s == 0; $s <= 100; $s++) {
   if (!pg_fetch_result($result, $s, 0)) break;
   $key = pg_fetch_result($result, $s, 0);
   echo $key;
}
と、ループさせて、データが見つからなかったらbreakするように
しているのですが、これだと
Warning: pg_fetch_result(): Unable to jump to row 2 on PostgreSQL
result index 3 in "if (!pg_fetch_result($result, $s, 0)) break;の行"
というエラーが出てしまいます。
pg_fetch_result()では、存在しないフィールドを指定すると
エラーが出てしまうのでしょうか?
何か解決策があればご教授願えれば幸いです。

どうやら
http://ns1.php.gr.jp/pipermail/php-users/2003-August/017901.html
これと似ている状況らしいのですが、レスがついていないため
いまいち何が原因でエラーが出ているのかわかりません。
287NAME IS NULL:2005/04/08(金) 10:54:22 ID:???
ご教授は出来ませんが、pg_num_rows()で行が存在するかチェックしたら?
288NAME IS NULL:2005/04/08(金) 12:02:18 ID:???
>>286
pg_fetch_result()なんて使った覚えないけど、エラーが出てんなら、そうなんだろうな。
どうしてもpg_fetch_result()を使うのなら、@をつけるとか。ついでに無駄も省いて。
for ($s == 0; $s <= 100; $s++) {
   if ( ! $key=@pg_fetch_result($result, $s, 0)) break;
   echo $key;
}
289286:2005/04/08(金) 16:20:35 ID:???
>>287
そですね、行数を調べるのが一般的なやり方ですね。
ありがとうございます。

>>288
ありがとうございます。
@をつけたらエラーが出なくなりました。
290質問:2005/04/11(月) 18:58:50 ID:???
初心者な質問で恐縮ですが、
ACCESS の データを Postgre にエクスポートする
方法をどなたか教えて下さいm(_ _)m
291NAME IS NULL:2005/04/12(火) 02:20:27 ID:???
文字コード関連の質問です。以下が当方の環境です。

Red Hat Linux release 7.3 (Valhalla)
PostgreSQL 7.3.4
PgAdminIII 1.2.1

文字コードまわりのセットアップは

server_encding = SQL_ASCII
client_encding = SQL_ASCII

となっていました。

アプリも複数の担当で制作しており、テーブルによってEUC_JPとSJISが混在しています。
ただし、文字コード変換は、アプリ側できちんと実装しているので、運用に関して問題は出ていません。
(pg_dumpの結果が文字化けしておりこれが非常に怖いですが、今回の質問とは別問題ということで)

以上の環境で、これまではCSEでデータベース内容を閲覧していましたが、PgAdminIIIに切り替えました。すると、

1.PgAdminIIIよりEUC_JPでインサートされた行が文字化けして見れなくなってしまいました。
2.PgAdminIIIをインストールした直後よりCSEが使えなくなりました。

これら問題について、

1.そもそもcreatedbする際のエンコード設定が間違えているのは承知の上なのですが、運用中なのでおいそれと変更できません。この環境下で、EUC_JPでinsertされたテーブルをPgAdminIIIから見られるのでしょうか?
2.PgAdminIIIとCSEは共存出来ないものなのでしょうか?(CSEをインストールした時に自前で入れたlibpq.dllがPgAdminIIIインストール時に上書きされた気がします。)

ご存知の方、宜しくお願いします。
292291:2005/04/12(火) 14:12:00 ID:???
上の質問をしたものです。

その後、2は解決しました。
やはり、PgAdminIIIがlibpq.dllを上書きしたのが原因だったようなので、CSE用のlibpg.dll(6.5付属日本語版)は\windows\system32\ではなくCSEのインストールディレクトリに入れて、アプリによって使うlibpq.dllが変わるようにしたところ問題なく動作しました。

しかし1は未だに未解決です。2が解決したので問題ないと言えば問題ないのですが、pg_dumpの結果が文字化けしまくりなのが、やはり怖い…
293NAME IS NULL:2005/04/13(水) 10:26:24 ID:r7emTefn
別スレにも書いたのですがレスがなかったのでお願いします。

Oracle8iからPostgreSQL8.0に移行しているのですが、外部結合がよくわかりません。

(A)
SELECT * FROM
A,B,C
WHERE
A.xxx = B.xxx (+) AND
A.xxx = C.xxx

(B)
SELECT * FROM
A LEFT OUTER JOIN B
ON A.xxx = B.xxx,
C
WHERE
A.xxx = C.xxx

(A)と等価なSQLは(B)でよいのでしょうか。
(B)では、
A LEFT OUTER JOIN B ON A.xxx = B.xxx
をひとつのテーブルとして見ているような気がして、
where以下に条件が必要なのか自信がありません。

あと、FROM句で下のようにCを前に出すと、外部結合が
AだけでなくCにもかかるのでしょうか。
C,
A LEFT OUTER JOIN B
ON A.xxx = B.xxx
294NAME IS NULL:2005/04/13(水) 11:08:42 ID:???
>>293
別スレでも見かけたけど、Oracleの記述が理解できないとワカランて。
(B)はAとBを外部結合してCと内部結合している感じか。
順番が逆(AとCを内部結合してBと外部結合)になっても結果は同じだろう。
つーか、どちらを先に結合するかはプランナかオプチマイザが選ぶだろうし。

ちゃんと書くなら
SELECT * FROM A
LEFT OUTER JOIN B ON A.xxx=B.xxx
INNER JOIN C ON A.xxx=C.xxx;

最後のCを前に出すって書き方やったこと無いけど、
WHERE句なりON句なりにA.xxx=C.xxxがないと
(A LEFT JOIN B)行 * C行分の結果が返ってしまうよ。
295NAME IS NULL:2005/04/13(水) 12:02:42 ID:r7emTefn
>>294
抽象的なサンプルでもうしわけないです。

>>294さんの、ちゃんとした書き方の方向で考えてみます。
ありがとうございます。
296294:2005/04/13(水) 14:54:56 ID:???
>>295
「ちゃんとした」ってのは語弊があるかな。
SQL92の書式とそれ以前の書式の混在が気になっただけ。

OUTERとかINNERとかは、大概(少なくとも俺は)省略するから、
SELECT * FROM A
LEFT JOIN B ON A.xxx=B.xxx
JOIN C ON A.xxx=C.xxx;
で済ましている。

まぁ、書き方と言うか、SQL9xの表記を理解した方がいいんじゃね。
297NAME IS NULL:2005/04/13(水) 23:27:06 ID:O1kEf2yg
【Postgresql8.0.1でodbc接続ができない】どなたかご教授お願いします。

エラーメッセージ⇒Could Connect to remote socket(#101)[Microsoft][ODBC...

@ pg_hba.conf の設定
----------------------------------------------------------------
# TYPE DATABASE USER CIDR-ADDRESS METHOD

# "local" is for Unix domain socket connections only
local all all trust
#-------------------------------------------------------------------------------
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host testdb01 all 192.168.1.2/20 trust
----------------------------------------------------------------

A ODBCドライバは、http://www.interwiz.koganei.tokyo.jp/
 から入手したもので、データソースのユーザには
postgres と、そのパスワードを指定しました。

※postgresql-7.3.4 の場合は

 http://park15.wakwak.com/~unixlife/java/tomcat40-linux.html
 で、
postgres.confの以下を変更します。
#tcpip_socket = false
tcpip_socket = true
 とあったのですが、
 postgres.conf のなかで、tcpip_socket を検索しても見つからない

※また、postmaster の起動は、
$ pg_ctl start -o "-i" で起動してもだめでした

どなたか、ご教授お願い致します

FC3 をはじめたばかりのものです。
298NAME IS NULL:2005/04/14(木) 00:02:09 ID:???
>>297
> host testdb01 all 192.168.1.2/20 trust
localhost(127.0.0.1)で接続しているとか?

299NAME IS NULL:2005/04/14(木) 00:26:09 ID:fuAF7aqO
>>298
localhost(127.0.0.1)で接続しているとか?

さっそくのれす、ありがとうございます。
データソースのサーバ名には、DDNSで指定したドメイン名と
IPアドレス(192.168.1.XX)を指定してやってみましたが
どれもだめでした。


300NAME IS NULL:2005/04/14(木) 00:50:37 ID:???
>>299
あー8.0.1なのね。使ったことないけど多分この辺だと思われ

<<postgresql.conf>>
listen_addresses (string)
 サーバがクライアントアプリケーションからの接続を監視するTCP/IPアドレスを指定します。
 この値は、カンマ区切りのホスト名かIPアドレスもしくはその両方のリストという形を取ります。
 *という特別な項目は利用可能な全てのIPインタフェースに対応します。このリストが空の場合、
 サーバはIPインタフェースの監視を全く行いません。この場合は接続にUnixドメインソケットのみが使用されます。
 デフォルト値はlocalhostであり、ローカルな"ループバック"接続のみが可能です。
 このパラメータはサーバ起動時のみ設定可能です。
301NAME IS NULL:2005/04/14(木) 01:34:14 ID:fuAF7aqO
>>300
あー8.0.1なのね。使ったことないけど多分この辺だと思われ

さっそくのれす、ありがとうございます。
postgres.conf の listen_addresses を以下のように変更してつながりました!
#listen_addresses = 'localhost'

listen_addresses = 'localhost,192.168.1.xx'

ありがとうございました。
302NAME IS NULL:2005/04/14(木) 14:49:20 ID:???
303NAME IS NULL:2005/04/14(木) 23:57:46 ID:???
質問です。7.3.4です。
現在データサイズが600MBくらいなんですが、
毎朝
REINDEX table_a
REINDEX table_b
REINDEX table_c
REINDEX table_d
REINDEX table_e
VACUUM ANALYZE
という処理を行っています。
するとREINDEXのあたりで200MBとかサイズが増えたりします。
すぐに600MBにもどったり
翌日にさらに200M足されて1GBとかになったりします。
つねに600MBに戻るように制御できないでしょうか?
VACUUM FULL でも同じでした。

304NAME IS NULL:2005/04/19(火) 19:24:43 ID:???
質問です。
7.2.2 (on Linux) で EUC-JP な DB から pg_dump したファイルを、
8.0.2 (on Win2000) で同じく EUC-JP な DB に psql -f したいのですが、うまくいきません。
漢字で '青葉' (C0 C4 CD D5) なる文字のところに差し掛かると 、
「0xfd6a は invalid な文字だ」と怒られます。以下続々。
何がどうなったら 0xfd6a になるのか見当がつかないので途方に暮れてます。
第3水準の字 (0x8f※※) が混入しちゃってて、事態をより錯綜させているのですが、
もうとりあえず UTF-8 にでも変換するかな、と考えてます。
ただ、それでうまくいったとしても上記の問題の原因・解決法は知りたいので、
お暇な方いらっしゃったら是非ご教示お願いします。
305NAME IS NULL:2005/04/20(水) 14:36:09 ID:???
>303
・変更が頻繁に起こるフィールドのインデックスを、最小値に保つことは出来ない
 と思う。(でテーブルの件数を少なくするか、逆に上限を1Gにする)
・対象フィールドを更新しないようにする(少なくする)。table構造を見直す

REINDEXで結果的にDiscは減るが、作業時Discが若干増える。
ので念のためVACUUM FULLを先の方がベターかな
306NAME IS NULL:2005/05/03(火) 02:56:08 ID:smoskI+Q
>>304
遅レスなうえ、的外れかもしれないけど。
クライアント側のコードが問題なのでは?
戻そうとしているデータはEUCだろうけど、クライアントがWindowsならば違うから。
リストアするときはSET CLIENT_ENCODINGでEUCに変更してはどうでしょう。
もしくはLinuxのpsqlで接続してリストア。

見当違いだったらすみません。
307NAME IS NULL:2005/05/06(金) 01:01:25 ID:???
遅レスってたった2レスじゃん、とか思ったが半月たってたのね・・・
308NAME IS NULL:2005/05/12(木) 11:51:08 ID:5/YL5pSd
どなたか、PostgreSQL8用のODBC ドライバのありかってご存知ないですか?
309NAME IS NULL:2005/05/12(木) 12:03:42 ID:???
7.05.0001 のままじゃ使えないの?
310309:2005/05/12(木) 12:06:27 ID:???
ちょっと探したら
http://gborg.postgresql.org/project/psqlodbc/genpage.php?downloads

ここにあったよ、最新は 8.00.0101 みたいだな
311NAME IS NULL:2005/05/12(木) 16:58:23 ID:???
>>309
いや、ちょっとODBC経由で問題があってV8用ならどうだろうと・・・
どっちでも変わらないという結果でした。

>>310
ありがd。助かったっす。
312NAME IS NULL:2005/05/12(木) 19:14:54 ID:???
313NAME IS NULL:2005/05/14(土) 15:12:17 ID:???
8.0.3で --encoding=EUC_JP って付けてDB作成しても
Accessで入れた日本語がLinux側でpsqlを使って中身見ると化けてしまいます。
逆にLinux側でpsqlを使ってインサートした日本語はAccessで見ると化けます。

configureで --encoding=EUC_JP を指定してインストール後、
initdb --encoding=EUC_JP --no-locale で初期化しました。
ODBCは
ttp://www.geocities.jp/inocchichichi/psqlodbc/indexj.html
のODBC3.0を使ってます。
どなたか、解決方法をご教授していただけませんでしょうか。
314NAME IS NULL:2005/05/14(土) 19:27:25 ID:I+81aSyr
ウンチ
315NAME IS NULL:2005/05/14(土) 22:39:03 ID:34naW8Or
Postgres8のJDBCフォルダに3つ(2、2ee、3)がはいってるけど
WinでPathに設定するのはどれ?それともフォルダのパスをPathに設定すれば使える?
初心者すぎる質問でごめんなさい。
316NAME IS NULL:2005/05/14(土) 23:30:14 ID:???
答えは

















3.
317NAME IS NULL:2005/05/15(日) 12:15:03 ID:???
>>313
psql -l でDBはちゃんとEUC_JPになってるか?

なってるなら・・・
ODBC変えろ
それでだめならODBCの設定のデータソース-設定2-接続時設定に
set client_encoding to sjis
とかいれてみ
318317:2005/05/15(日) 12:36:32 ID:???
>>313
ODBC替えるなら>>310からMSIでもダウンロードしてみるといいかも
319NAME IS NULL:2005/05/26(木) 12:14:30 ID:???
すみませんが質問です.

RULE を使って,NOT NULL 制約と同じ機能のものを実装することはできるでしょ
うか?

1つのテーブルに2つの VIEW を作って,一方の VIEW に挿入するときと,もう
一方の VIEW に挿入するときとで,NOT NULL となるカラムを変えたいのです.
320319:2005/05/27(金) 17:01:42 ID:???
どうもできないようですね.よく分からないのですが,ルールは NOT NULL 制
約のようにエラーを発生させることはできないのでしょうか?
http://www.postgresql.jp/document/pg734doc/programmer/rules-triggers.html

別の質問です.PostgreSQL で挿入,更新したいテーブルが2つある場合,セッ
トされる値の範囲によって,更新の対象となるテーブルを切り替える,といっ
たことはできるのでしょうか?

例えば,特定のカラムにセットされる値が 0 ならば Table0を,1 ならば
Table1 を対象に更新する,といったことです.

最初は pl/pgsql の関数を書けば何でもできると思っていたのですが,INSERT
文は与える引数が一通りに定まらないので,これを関数で代用するのは無理で
した.(考えられる引数の組み合わせ全てについて関数をオーバーロードした
りすれば可能でしょうが,場合の数が多すぎて,現実的ではありません)

次に,INSERT INTO (テーブル名)のテーブル名を,CASE 文で切り替えられ
ないかと試してみましたが,この個所にはテーブル名そのものを書かないと
Syntax Error になりました.

以上です.どなたかよろしくお願いいたします.
321NAME IS NULL:2005/05/27(金) 17:23:35 ID:???
↓との区別はどうなってるのかな
ML関係だけってわけでもなさそうだし

PostgresSQLについて語ろう
http://pc8.2ch.net/test/read.cgi/db/1056992724/
322319:2005/05/27(金) 20:23:34 ID:???
>>320 は CREATE RULE の WHERE 条件節を利用することで実現できることがわ
かりました.>>319 も同じような方法で実現できそうです.こちらはまだ試し
ていませんが.RULE はものすごく強力ですね.PostgreSQL を使うなら必須と
言えそうです.

>>320 のサンプルコードを書いてみましたが,長くなるのでここには貼りま
せん.もしどなたかからリクエストがあれば,貼らせていただきます)

---------
>>321 私もよく知りませんが,過去ログを見ると,こちらのスレはもともと
PHP 板の発祥で,向こうは DB 板で始まって,両者が統合されていないという
ことのようです.まあ向こうはスレッドタイトルが間違っているのですが.
× PostgresSQL ○ PostgreSQL
323319:2005/05/27(金) 20:56:33 ID:???
蛇足です.このスレに参加されている方に,Lisp をご存知の方はおられます
か?

PostgreSQL の RULE は,Lisp のマクロにあたるものだと,いまさらながら気
づきました.もともと Postgres は Lisp で書かれていたそうですから,作成
者は当然,Lispマクロの凄まじいまでの強力さを十二分に理解しており,
Postgres にもその力を少しでも持たせたかったのでしょう.

ということで,PostgreSQL のプログラミングでは,他のDBと違い,マクロが
書けるわけです.考えただけでもワクワクする話ではありませんか.

以上,蛇足でした.おかしなことを書いてすみません.失礼します.
324NAME IS NULL:2005/05/27(金) 23:03:21 ID:???
muLISP
325304:2005/06/06(月) 10:44:55 ID:???
>>306
レスありがとうございます。
さらに遅々としたレスで申し訳ありません。
何もしなければ、psql コマンドは SJISファイルが渡されてきてるもんだと期待しているわけですね。
環境変数なおして上手く通りました。単純かつ当たり前のことでしたね。
迂闊でした。。
326age:2005/07/01(金) 19:37:29 ID:???
カラム a に hello を入っていて、
カラム b に hell と入っているとします。

select * from t1 where a like '%hell%';

と同じ意味で

select * from t1 where a like '%'.b.'%';

みたいなことがしたのですが、

select * from t1 where a like '%b%';

と解釈されます。うまい方法はないでしょうか?
327NAME IS NULL:2005/07/01(金) 19:39:58 ID:pFeBRZhx
age
328NAME IS NULL:2005/07/01(金) 20:04:49 ID:???
>>326
select * from t1where a like '%' || b || '%';
329NAME IS NULL:2005/07/01(金) 20:40:41 ID:???
ありがと!
330NAME IS NULL:2005/07/04(月) 11:10:03 ID:???
t2.b に hello が入っていて、
t1.a に a が入ってます。
t1.a を下記のように case で hell にして
like 検索したいのですが、
ERROR: column "t1a" does not exist
と言われます。order by t1a は正しくできます。

select
case when
t1.a = 'a' then 'hell'
end as t1a,
*
from
t1,t2
where
t2.b like '%'||t1a||'%';

週末悩んだのですが、

t2.b like '%'||t1a||'%';



t2.b like '%hell%';

みたいにする方法ありますか?
331NAME IS NULL:2005/07/04(月) 11:50:21 ID:???
>>330
t2.b LIKE '%' || CASE WHEN t1.a='a' THEN 'hell' END ||'%';
かな? 試してないけど。
332NAME IS NULL:2005/07/04(月) 11:57:03 ID:???
補足。
WHERE句内では、ターゲットリストに渡る前に判断される為、
ターゲットリストに書かれた別名(出力名)は使えない。

#と、俺は解釈している。
333NAME IS NULL:2005/07/04(月) 17:15:39 ID:???
>>331-332
なるほど!
|| の間に case を書くのか。全く思いつかなかったよ。
ありがと!

334NAME IS NULL:2005/07/05(火) 00:15:15 ID:???
create table hoge(
no1 serial,
no2 int,
date text
);

とある場合、

insert into hoge(date) values('aaa');

とすると「no1」カラムに自動的に数値が入るけど、

一つのinsert文で、「no2」カラムにシリアルで指定した「no」と
同じ値を入れることは可能でしょうか?

普通に考えると、

insert into hoge(date) values('aaa');
select max(no1) from hoge;
update hoge set no2=[max] where no=[max]

となるかと思いますが、一つのinsert文で記述することは可能でしょうか?
335NAME IS NULL:2005/07/05(火) 00:56:18 ID:???
>>334
> 一つのinsert文で、「no2」カラムにシリアルで指定した「no」と
> 同じ値を入れることは可能でしょうか?

「no」はno1の間違いか? 結局 no1=no2にしたいのか?

> 普通に考えると、
> insert into hoge(date) values('aaa');
> select max(no1) from hoge;
> update hoge set no2=[max] where no=[max]
別セッションで同じSQLが同時に実行されるとずれる可能性があるな。

質問がハッキリ理解できないが、たぶん、
INSERT INTO hoge(no2,date) VALUES (currval('hoge_no1_seq'),'aaa');
こんなところか。

TABLEにデフォルト設定してもいいけどな。
336334:2005/07/05(火) 01:43:29 ID:???
>>335
「no」はno1の間違いでした。すみません。
ありがとうございます、助かりました。
337NAME IS NULL:2005/07/08(金) 18:07:10 ID:???
すみませんが、質問です。
「今週が誕生日」の人を取得する方法はどうしたら良いでしょうか?
PostgreSQLのバージョンは7.34 です。

最初は extract(week from...)で良いかと思ったのですが、PostgreSQL の
week は1月4日から始まるので、1月1日の週は1になったり53になったりで定ま
りません。

ということで、月と日を愚直に比較するしかないと思うのですが、そもそも
PostgreSQL で、今週の最初の日と最後の日を取得する方法がわかりません。
今日の曜日は EXTRACT(dow from...)で数字で返るのですが、この数値から今
週の開始日、終了日を取得する方法がわからないのです。

さらに、それが取得できても、まだ問題は残ります。週の開始日、終了日の
doy を比較しようと思うのですが、うるう年だとこれが1日狂います。それを
どう修正したらよいのかも分からないのです。

以上です。どなたかアドバイスをお願いします。
338NAME IS NULL:2005/07/08(金) 18:15:38 ID:???
>>337
SELECT * FROM Table WHERE date_trunc('week',date_column) = date_trunc('week',now());
339337:2005/07/08(金) 18:44:18 ID:???
ありがとうございます。バージョンはいくつをお使いですか?

SELECT date_trunc('week', NOW());

上のコードは、8.0.1では動きますが、7.3.4では以下のエラーが出ます。
ERROR: TIMESTAMP units 'week' not supported
340337:2005/07/08(金) 18:55:58 ID:???
PostgreSQL のバージョンを上げることはできないのですが、仮に上げたとし
ても、いただいた書き方では目的を達成できないようです。

SELECT date_trunc('week', timestamp'1970-07-08') = date_trunc('week', NOW());
=> false

あと、以下のコードを実行していただければ、week の切捨ての問題点がご理
解いただけると思います。
SELECT date_trunc('week', timestamp'2005-01-01');
SELECT date_trunc('week', timestamp'2004-01-01');
SELECT date_trunc('week', timestamp'2003-01-01');
SELECT date_trunc('week', timestamp'2002-01-01');
SELECT date_trunc('week', timestamp'2001-01-01');
SELECT date_trunc('week', timestamp'2000-01-01');
341NAME IS NULL:2005/07/08(金) 19:15:07 ID:???
つーかそこまで挙動が分かってるのなら問題なく組めそうなもんだが
342337:2005/07/08(金) 19:39:38 ID:???
私も簡単に組めると思っていたんですが…。
結局、条件文は以下のようにしました。

WHERE
date_trunc('day', birth_day) + date_trunc('year', age(birth_day))
BETWEEN ? AND ?

1行目で、生年月日から今年の誕生日の日付を取得し、2行目で今週の開始日と
終了日とで比較をしています。
2行目をPostgreSQLの関数だけで取りたかったのですが、無理のようなので
Javaで求めてセットすることにしました。

どなたか、2行目をPostgreSQL 7.3.4 で取得する方法をご存知の方、どうかお
教えください。
343NAME IS NULL:2005/07/08(金) 20:03:16 ID:???
そもそも曜日が分かればその週がはっきり分かると思うんだが
単純に日付の範囲でいいと思われ
344337:2005/07/09(土) 00:00:46 ID:???
すみません、ちょっと出ておりました。
>>343
その日付を取る方法がわからないのです。

曜日は取れます。
EXTRACT(dow FROM now()) => 5

日付をさかのぼることもできます。
DATE_TRUNC('day', now()) + INTERVAL '5 DAYS')
=> 2005-07-03 00:00:00+09

この二つを組み合わせるにはどうしたら良いでしょう?
SELECT DATE_TRUNC('day', now()) - INTERVAL EXTRACT(dow FROM now()) || ' DAYS'
=> ERROR: parser: parse error at or near "EXTRACT" at character 44
345NAME IS NULL:2005/07/09(土) 00:44:46 ID:???
to_charをつかって文字列整形すればいいよ

でもそこまでして見にくいSQL使うくらいなら
プログラムからやったほうがいいだろうね
346337:2005/07/09(土) 01:56:31 ID:???
to_char()とは思いつきませんでした。確かにそれも一つの手ですね。ありが
とうございます。

ちなみに、>>342の1行目の後半には、バグがあるようです。このままでは、
date_trunc()は切捨てですから、今日より後の日付に誕生日が来る人は、今年
ではなく一年前の誕生日になってしまう。+ の右側の式に、切捨てではなく四
捨五入の関数が使えたらいいのに。

とりあえず、誕生日の範囲は1週間以内ですから、date_trunc()に与える式に、
+ INTERVAL '7 DAYS' をくっつけて解決することにします。ああ、アドホック
なコードだ…。

では、いろいろありがとうございました。
347NAME IS NULL:2005/07/09(土) 02:17:11 ID:???
Java使ってるならJavaで普通に範囲を指定したほうがはえぇ
348NAME IS NULL:2005/07/11(月) 02:28:10 ID:???
すぐバグとかいうやつは解決できないことがいろいろあるだろうな
本質を理解すれば、解決手段はすぐ出てくるのに
349NAME IS NULL:2005/07/23(土) 11:15:26 ID:jrGs4b1P
postgreSQLをシェルから起動したいんですけど
コマンド教えて下さい
350NAME IS NULL:2005/07/23(土) 11:20:20 ID:???
su - pgsql
351NAME IS NULL:2005/07/23(土) 11:21:24 ID:jrGs4b1P
>>350
具具ったらちょうど見付かりました
ありがとうございました
352NAME IS NULL:2005/07/23(土) 11:24:00 ID:???
最もむかつく質問の仕方のお手本だな。
353NAME IS NULL:2005/07/23(土) 18:32:59 ID:???
6分で見つかるものをわざわざここで聞いてんのか
354NAME IS NULL:2005/07/24(日) 14:11:00 ID:???
linuxにPostgreSQLを入れようかと思ってます。
何か事前にやっておく設定とかありますか?

もしかしなくても、すごいアホな質問かもしれませんが・・・
355NAME IS NULL:2005/07/24(日) 15:20:42 ID:???
SharedMemoryの確認と、postgresユーザーを作ってインストールするのを忘れるな
(インストール後にchownでもいいが)
356NAME IS NULL:2005/07/24(日) 15:22:00 ID:???
あと、initdb のオプションは、 --encoding=EUC_JP --no-locale
で。
357NAME IS NULL:2005/07/24(日) 15:40:42 ID:???
最近はUTF-8な環境が多いど。
漏れはeuc-jpなdebianだがpgsqlのデフォは
8.0系に入れ替えたときにutf-8にした。
psql起動オプションでclient_encodingをeuc-jpに出来ないのが辛い。

>>354
後からなんとでもなるけど、環境変数とかも先に
セットしておいた方が、後々楽ってのもある。
358NAME IS NULL:2005/07/24(日) 17:28:26 ID:???
>>357
環境変数PGCLIENTENCODINGは?
359357:2005/07/24(日) 18:46:56 ID:???
>>358
さんくす。それはしらなかった、それで出来たよ。
360NAME IS NULL:2005/07/25(月) 07:22:05 ID:V5RJpM2v
初心者の質問ですが、テーブルを作った(できている)後に
主キーをつけることってできますか?できたらSQL文教えて下さい。
361NAME IS NULL:2005/07/25(月) 07:28:55 ID:???
>>360
ALTER TABLE テーブル名 ADD CONSTRAINT インデックス名 PRIMARY KEY(カラム名);
362NAME IS NULL:2005/07/25(月) 08:12:56 ID:???
>>361
速レスありがとうございます!
かなり助かりました。
363NAME IS NULL:2005/07/25(月) 15:51:24 ID:???
インデックスを作ってVIEW経由で問い合わせるとインデックスが適用されないのは仕様なんでしょうか?
VIEWを作るときのSELECT文をEXPLAIN ANALYZEすると適用されてるんですが。
364NAME IS NULL:2005/07/25(月) 16:32:45 ID:???
>>363
適用されるYO。
365NAME IS NULL:2005/07/27(水) 20:57:41 ID:???
>>363
VIEWの中で使われているのも含めて、クエリ内で使われるテーブルの数が
6テーブル以上になってないか?で、VIEWの中では5テーブル以下しか
使われてないとか?
366NAME IS NULL:2005/08/04(木) 14:54:02 ID:/5+WAyrv
fedora coreでpostgreSQLを動かしています。
fedoraの文字コード設定はロケールをEUC-JPに変更しています。
そこで、postgreSQLにログインして、SQL文をうち、日本語のquery文を
書くと文字化けしたり、コマンドがおかしなことになる(ずれたりしておかしくなり、
CTRL-Cを押して、解除するしかなくなります。)
どうすればいいか教えて下さい。

よろしくお願いします。
367NAME IS NULL:2005/08/05(金) 14:17:38 ID:???
日本語パッチ当てたreadlineを入れてPostgreSQLのリコンパイルでどうか
368NAME IS NULL:2005/08/07(日) 22:39:20 ID:???
>367
やっぱその時はpg_dump すべき?
369NAME IS NULL:2005/08/08(月) 17:33:55 ID:???
readlineの入れ替えだけならDBはそのままで大丈夫ですよ。
もしかしたら、 soファイルの差し替えだけですむかもしれないし
psql -n でreadline切って試してみるのもいいかもしれません。

私は、Solarisが多いのですが、よくreadline入れ忘れて
後からインストールして作り直したりしてました。
今はオプション入れないとreadline無しだとconfigureが止まりますね。
370NAME IS NULL:2005/08/10(水) 13:59:34 ID:???
RH9 に入れてる PostgreSQL を SSL 対応にしようと思って
configure にて --with-ssl ってオプション追加して リコンパイル
したんですが、 pg_config --configure でみると、以前の configure の
内容のまま変わっていません。

失敗してるという事でしょうか?
371NAME IS NULL:2005/08/10(水) 14:44:34 ID:???
>>370
以前makeした場所でそのままやり直したん?
make distclean
していないのジャマイカ。
372NAME IS NULL:2005/08/11(木) 11:15:51 ID:???
つーか、config.log をじっくりみてごらん
373NAME IS NULL:2005/08/12(金) 00:20:52 ID:8KrZv0NM
postgresql7.4.1についてなんですけど、、、

foo=#create table table_a ( id int, val int );
foo=#insert into table_a values ( 1, 1 );
foo=#insert into table_a values ( 1, 2 );
foo=#insert into table_a values ( 2, 1 );
foo=#insert into table_a values ( 3, 1 );

bar=#select * from dblink('dbname=foo','select id,sum(val) from table_a group by id') as t1( id int, val int );

ERROR: query-specified return row and actual function return row do not match

ってことで、sumを使うとdblinkの結果を正しく取得できないのだけど、
これってsumの結果をちゃんとキャストできてないバグですか?
374370:2005/08/12(金) 09:44:21 ID:???
>>371 & 372

make distclean を実行して再度 configure したら出来ました。
ありがとうございました!
375NAME IS NULL:2005/08/15(月) 17:08:39 ID:???
ポストグレスキューエルは幸せになれますか?
376NAME IS NULL:2005/08/16(火) 09:01:14 ID:X4s8bmdR
プログラムで1万件のレコードn件目から1000件のレコードを取得する場合、
offset&limitを使ったSQLと、カーソルを使った場合では殆ど結果に差がないんですが、
プログラムの置いてあるサーバとDBサーバが別になると
カーソルの方が極端に遅くなります。これって理由は何なんでしょうか?
377NAME IS NULL:2005/08/16(火) 18:45:09 ID:OqDkzqJ9
ポスグレでヒントって与えられないんですかね?
強制的にインデックスを使用させたいんです。
378NAME IS NULL:2005/08/16(火) 19:24:21 ID:???
オプティマイザヒントはないが、シーケンシャルスキャンを抑制することは可能。

SET enable_seqscan TO false;とかやればよし。

http://www.postgresql.jp/document/pg803doc/html/runtime-config.html
379NAME IS NULL:2005/08/16(火) 21:45:59 ID:???
>>376
サーバーカーソルかクライアントカーソルか・・・いずれにしろトラフィック
じゃないの。クエリも送らず全部サーバーDBにやらせ、結果だけ受け取れば。
380NAME IS NULL:2005/08/16(火) 23:44:29 ID:v3DRyeQA
すいません質問なのですが、
windowsにcygwin + postgreSQLで運用をされている方、おられますでしょうか?

381NAME IS NULL:2005/08/17(水) 00:09:02 ID:???
本番システムをそれで運用してる人はいないんじゃないか?

開発システムもほとんどWin32ネイティブに移行していると思われ。
382380:2005/08/17(水) 01:21:17 ID:???
>>381
大変参考になります。
ありがとうございます
383NAME IS NULL:2005/08/18(木) 15:45:15 ID:???
ML見てると、それで運用してる人
まだまだいそうだけどね。
すでにデメリットしか見えないけどな
384NAME IS NULL:2005/08/22(月) 13:21:29 ID:???
複数テーブルを結合して\copyでテキストファイルに書き出す方法はありますか?
385NAME IS NULL:2005/08/22(月) 22:35:34 ID:???
begin;
create temp table WORK as (select 〜 from 〜 );
copy WORK to WORK_FILE;
rollback;

じゃダメかい
386NAME IS NULL:2005/08/23(火) 17:27:48 ID:???
ログに実行した全てのswlコマンドを記録するようには出来ませんか?
387NAME IS NULL:2005/08/23(火) 18:22:15 ID:???
swlじゃないsqlです・・
388NAME IS NULL:2005/08/23(火) 21:37:38 ID:???
できるよ
389NAME IS NULL:2005/08/29(月) 14:51:08 ID:???
環境によっては膨大な量になるけどね
postgresql.conf の log_statement を true に。
syslog回りは自分の環境に合わせて
390NAME IS NULL:2005/08/29(月) 19:02:25 ID:???
/usrのディスクの容量が足りなくなって来たんですが、
/usr/local/pgsql/dataを、空きがいっぱいある/home以下に移動して
シンボリックリンクを張っての運用って問題ないでしょうか?
391NAME IS NULL:2005/09/01(木) 08:21:46 ID:???
何も問題ない。
392NAME IS NULL:2005/09/01(木) 14:46:11 ID:???
シンボリックじゃなくても設定を少し変えれば他のディレクトリでも問題ないんだけどね
393NAME IS NULL:2005/09/02(金) 05:26:33 ID:tvZu4i8z
Mac OS X v.10.3.5にPostgreSQLをインストールする予定ですが、一番安定
しているバージョンは何でしょうか?
それと手始めに何をしたらよいですか?(Linux・unix初心者なのです…)
394NAME IS NULL:2005/09/03(土) 03:03:31 ID:???
>>393
安定してるバージョンって言うか
8系と7系のどちらで行くかによるんですけど
将来的な事を考えると PostgreSQL8.0.3
互換や、他のソフト等で相性とかえて考えたくないなら PostgreSQL7.4.8でいいと思う
395NAME IS NULL:2005/09/03(土) 06:58:58 ID:???
>>393
FinkとかDarwinportsを使うのが楽だにょ
396NAME IS NULL:2005/09/03(土) 12:26:53 ID:???
データベースの容量で困っています。

本番環境で
# du -b -s -k /usr/local/pgsql/data/

すると約5Gあるのですが、
このデータをdumpして、テスト環境にリストアすると、1Gくらいしかありません。

$ vacuumdb -f -a
もやってみたのですが、容量は減りません。

このままではディスクが溢れてしまいます。
どなたか原因に心あたりのあるかたはいませんでしょうか。
バージョンは7.2.7です。
397NAME IS NULL:2005/09/03(土) 13:58:51 ID:???
>>396
reindex してみたら?
398393:2005/09/07(水) 03:41:53 ID:Ew4HgFdN
394,395さんありがとうございます。
PostgreSQL7.4.8でやってみようと思います。ちなみにPostgreSQL専用のアカウント
の作成方法がわかりません(><) いちおー、CUIでやりたいと思うのですが…
399NAME IS NULL:2005/09/07(水) 14:13:22 ID:???
>>394
> 8系と7系のどちらで行くかによるんですけど

PostgreSQLの開発体制から言えば、8系と7系って分け方は不適切だろ。
あえて言うなら、…7.3系,7.4系,8.0系,8.1系…て感じになる。

PostgreSQLでの7.4系→8.0系の違いはLinuxの2.4系→2.6系のような差ではなく、
単にWindows対応などの目玉機能が追加されたんで7.5系でなく8.0系と呼ぼう、
ってだけの話だ。
400NAME IS NULL:2005/09/07(水) 22:02:54 ID:h4DOps4+
>>398
ここ、
http://www.entropy.ch/software/macosx/postgresql/
参考にしてみれば。
401NAME IS NULL:2005/09/17(土) 11:56:34 ID:???
windows版 8.0.0で、日本語の単語(名詞動詞形容詞副詞etc)をつっこんでるんですが、
varchar(20)のカラムにインデックスをcreateしようとすると6時間とか掛かるんですが、
これって正常な動作なんでしょうか?

Win2000 豚2500+ 512MEMORY 、work_memはやけくそで524228にしてまつ@postgres.conf
(ただ、create実行中のタスクマネジャでは使用メモリが2400KBで仮想メモリが17000KBくらいでつ)
402NAME IS NULL:2005/09/17(土) 11:57:28 ID:???
>>401
×使用メモリが2400KBで仮想メモリが17000KB
○使用メモリが24000KBで仮想メモリが17000KB
403401:2005/09/17(土) 11:59:27 ID:???
行書くの忘れたorz

行は38万行くらいです
404NAME IS NULL:2005/09/17(土) 21:45:45 ID:???
CREATE INDEX が使うのは maintenance_work_mem。
405NAME IS NULL:2005/09/18(日) 09:52:13 ID:???
↑ありがとうございます。
それも524228にしてみたんですが、変わらないみたいです。
あとcheckpoint_segmentsを増やすとパフォーマンスがあがるとマニュアルにあったので、
それを3から9に増やしてみたりもしてみました。。。

http://www.postgresql.jp/document/pg800doc/html/performance-tips.html

integerのカラムだと10秒-20秒くらいでインデックスが終わるのですが、
テキストカラムだと数時間単位で掛かってしまいます。。。
406NAME IS NULL:2005/09/18(日) 10:05:03 ID:???
もしかしてpostgresql.confをpostmasterがちゃんと読んでないんでしょうか?
dataディレクトリにあるpostgresql.confを編集しているんですが。。。(pgAdminIIIで編集)
407NAME IS NULL:2005/09/18(日) 10:10:50 ID:???
>>406 再起動なり、設定ファイルのリロードなりは当然必要。
あと、WARNING系のログが出ていないかとか、スワップが起きてないかとか、
確認すべきことは山ほどある。
バカの一つ覚えのように許可メモリ量だけ増やしても逆効果。
408NAME IS NULL:2005/09/18(日) 20:57:15 ID:???
もちろん再起動はしています。
異常な動作ということで、いろいろ調べてみます。どうも。
409NAME IS NULL:2005/09/19(月) 14:02:53 ID:???
>>396-397
解決しました。

REINDEXしてもダメで悩んでいましたが、
max_fsm_pagesを大きく設定し直してvacuum fullすることで領域が開放されました。

ありがとうございました。
410NAME IS NULL:2005/09/20(火) 12:42:10 ID:???
すみませんが、質問です。
PostgreSQL 7.3.4 を RedHat上で利用しているのですが、VACUUM FULL を実行
するのに気をつけなければならないことは何でしょうか?
VACUUM FULL の実行中に他のユーザからのDBアクセスがあると、最悪DBがクラッ
シュするという話を聞いたような記憶があるのですが、事実でしょうか?
411NAME IS NULL:2005/09/20(火) 22:44:02 ID:???
PostgreSQL7.3.4で、例えば

create table example (
 a int,
 c int
);

というテーブルがあって、これの a と c の間に b という列を追加したい場合、
mysql だったら

alter table example add b int after a;

でいけますが、Postgers では after という構文は使えないようです。

どうすればええんでしょうか?
412NAME IS NULL:2005/09/21(水) 12:23:16 ID:???
>>410
クラッシュするなんてことは無い。当方は、十数人のユーザが接続していると
きに何度もVACUUM FULLを実行しているが、障害が起こったことは無い。

VACUUM FULL を行うと、場合によっては長時間、テーブルロックがかかるから、
アクセスが集中しているときには問題になる。気をつけなければならない点は
それだけ。

VACUUM についてはいろいろ間違った情報が流布しているようなので、公式の
マニュアルとメーリングリスト以外は、あんまり信じない方が良い。

>>411
方法は無い。テーブルのデータを保存して(一時テーブルに収めるのが楽)、
テーブル定義を DROP → CREATE し直し、データを書き戻すしかない。これは
最新の 8.03でも同じ。

※そもそもDB理論では、こういうカラム定義の順番を気にするような使い方は
いけない、ということになっているが、現実的にはそうも行かないね。
413NAME IS NULL:2005/09/21(水) 12:49:11 ID:???
>>412
どうもあんがとう。
感謝、感謝。
414NAME IS NULL:2005/09/21(水) 15:00:02 ID:VfNnd0+f
415NAME IS NULL:2005/10/08(土) 07:24:08 ID:???
jpugって複数のメールアドレスとかフリーの(Gmail)アドレスを登録してもOK?
理事の審査がいるって書いてあるので少し身構えてる俺ガイル
416NAME IS NULL:2005/10/09(日) 04:07:53 ID:???
>>415
jpugのMLはjpug会員の交流用MLだよ。
postgresqlの質問などはpgsql-jpへ。

わかってたらスマソ。jpugのMLではフリーメールは
見かけないなぁ。
417NAME IS NULL:2005/10/12(水) 19:17:54 ID:???
SQL の質問です。

x|y
-+-
1|a
1|b
1|c
2|a
3|a
3|b

という時、y に c を含まない x を抽出したいんです。
つまり

x
-
2
3

としたいんです。y != 'c' では複数行なのでダメで…。
418NAME IS NULL:2005/10/12(水) 19:29:16 ID:???
>>417
あまり自身はないが。。。これでいいのかな?
select distinct x from test
where x not in (select x from test where y = 'c');
419418:2005/10/12(水) 19:36:11 ID:???
きゃあ。s/自身/自信/g
過疎スレで何やってんだか。。。orz
420NAME IS NULL:2005/10/12(水) 19:43:45 ID:???
きゃあ。早速ありがとう。OK でした!
421NAME IS NULL:2005/10/14(金) 11:44:58 ID:???
>>417 効率化してみた。
SELECT  DISTINCT x
FROM    Table_Name  T
WHERE NOT EXISTS
(   SELECT *
    FROM    Table_Name
    WHERE   x = T.x
    AND     y = 'c' )

参考:1.サブクエリーを引数に取る場合、IN述語よりもEXISTS述語を使う
http://www.geocities.jp/mickindex/database/db_optimize.html#LocalLink1

まあ、ぜんぜんPostgreSQL固有の話ではないわけだが。
422417:2005/10/14(金) 17:11:42 ID:???
>>421
URL までありがとう。勉強する。
423NAME IS NULL:2005/10/15(土) 01:21:41 ID:???
>>421
417じゃないけどそのURLは勉強になった。サンクス。
424NAME IS NULL:2005/10/15(土) 01:24:00 ID:???
PostgreSQLには通じない内容もある。
勉強がてらに検証するのもいいがな。
425NAME IS NULL:2005/10/15(土) 01:29:13 ID:???
確かに。参考にしつつもexplainじゅーよーだな。
6 の count(pkey) は MySQL だと遅いらしいし。
426NAME IS NULL:2005/10/15(土) 01:50:52 ID:???
>>421
> 参考:1.サブクエリーを引数に取る場合、IN述語よりもEXISTS述語を使う
> http://www.geocities.jp/mickindex/database/db_optimize.html#LocalLink1

PostgreSQL7.4のリリースノートより引用。
---
IN/NOT IN 副問い合わせが非常に効率的になりました。

以前のリリースでは、IN/NOT IN 副問い合わせは、シーケンシャルスキャンに
よって副問い合わせと一致する上位の問い合わせと結合されていました。 7.4
のコードでは、通常の結合で使用される洗練された技術と同じものを使用し、
そのため、非常に高速になりました。これで INは通常、等価なEXISTS と同程
度の速度、場合によってはより高速になりました。これにより、これまでのリ
リースにおいて行なっていた慣習的常識はくつがえりました。
---

パフォーマンスチューニングにおける一番の鉄則はコレ。
「教科書に書いてあることを鵜呑みするな。
 必ず自分で手を動かして性能を検証せよ。」

ソフトウェアは常に進化しているから、以前はcommon senseだったことが
今じゃnonsenseになってる、なんてのはよくあることだ。
427421:2005/10/15(土) 02:19:28 ID:???
>>426
素晴らしい!大変参考になった。ありがとう。
しかし、私が今のプロジェクトで使っている PostgreSQL は 7.3 なのだ。
喜んだらいいのか悲しんだらいいのか。
428NAME IS NULL:2005/10/15(土) 15:40:59 ID:???
>>322
>>320のサンプルコードをぜひ!!
お願いします。
429322:2005/10/15(土) 18:46:05 ID:???
運良く、手元に例のサンプルコードがありました。貼らせていただきます。

-- -------------------------
CREATE TABLE Table1
(column1 int2, column2 varchar(20));

CREATE TABLE Table2
(column1 int2, column2 varchar(20));

/* Table1 と Table2 をまとめて表示するView を作成 */
CREATE VIEW View1 AS
SELECT *
FROM Table1
UNION ALL
SELECT *
FROM Table2;

/* column1 の新規入力値が負なら、Table1に挿入 */
CREATE RULE RULE1 AS
ON INSERT TO View1
WHERE NEW.column1 < 0
DO INSTEAD
INSERT INTO Table1
(column1, column2) VALUES (NEW.column1, NEW.column2);
430322:2005/10/15(土) 18:46:53 ID:???
/* column1 の新規入力値がゼロ以上なら、Table2に挿入 */
CREATE RULE RULE2 AS
ON INSERT TO View1
WHERE NEW.column1 >= 0
DO INSTEAD
INSERT INTO Table2
(column1, column2) VALUES (NEW.column1, NEW.column2);

/* それ以外は無視 */
CREATE RULE RULE3 AS
ON INSERT TO View1
DO INSTEAD NOTHING;

/* Table1 に挿入されたら成功 */
INSERT INTO View1
VALUES(-1, 'ふがふが');

/* Table2 に挿入されたら成功 */
INSERT INTO View1
VALUES(1, 'ほげほげ');
431322:2005/10/15(土) 18:52:09 ID:???
>>428
以上です。
半年近く経ってからお求めになる方がおられるとは、大変うれしいです。
432428:2005/10/17(月) 08:49:28 ID:???
>>431
大変参考になりました。
自分が今抱えている問題を解決する糸口がつかめました。
本当にありがとうございました。
433NAME IS NULL:2005/10/18(火) 21:49:26 ID:???
[pgsql-jp: 36186]
宮内の物言いムカつくんだけど。
434NAME IS NULL:2005/10/18(火) 22:13:12 ID:???
>>433

みんなで相手にするからつけ上がるのに。
「お前にはどうやっても無理だ」とちゃんと言ってあげようよ。

435NAME IS NULL:2005/10/19(水) 01:05:06 ID:???
それに比べると、16191は丁寧だよな。そこまで卑屈にならんでもいいのに
436NAME IS NULL:2005/10/19(水) 16:59:52 ID:???
[36206]
Fってホントどうしようもないな。
437NAME IS NULL:2005/10/20(木) 02:01:45 ID:???
>>436
PowerGress Plus使えばいいのにね
438NAME IS NULL:2005/10/20(木) 08:47:30 ID:???
[pgsql-jp: 36215]
--no-localeしていない時の典型的な症状なんだが…
最近、MLのレベル落ちてる?
439NAME IS NULL:2005/10/20(木) 12:07:25 ID:???
もうこれはアレやね
440NAME IS NULL:2005/10/20(木) 18:23:42 ID:???
宮内、まだやってるのか。
441NAME IS NULL:2005/10/20(木) 18:33:19 ID:???
宮内、都合の悪い忠告は全部無視しやがるな。

これだけ時間使ってたら他のことできるだろうに、馬鹿な奴。
442NAME IS NULL:2005/10/20(木) 18:39:26 ID:???
宮内、ぐちゃぐちゃ言われた後のレスは明らかに口調が違うんだが。
443NAME IS NULL:2005/10/20(木) 23:54:47 ID:???
重複を削除した SELECT 結果を別の列でソートしようとして
select distinct on (id) 〜 order by xx とすると
SELECT DISTINCT ON expressions must match initial ORDER BY expressions
というエラーになります。
select * from (select distinct on (id) 〜) as v order by xx
で欲しい結果が出るのですが、もっといい正攻法のようなやり方はありますか?
444NAME IS NULL:2005/10/21(金) 02:44:18 ID:???
>>443
それでいいんじゃね。

DISTINCT ON は重複削除の時にソートを必要とするので、
そのソートされたときの頭だしをおまけ的にやっているわけで、
別の列でソートするなら結局再ソートが必要なんで、結局
貴方が書いたSQL(サブクエリ内で重複削除後に外のクエリでソート)になる。
445NAME IS NULL:2005/10/26(水) 21:04:44 ID:???
停電で電源が落ちた後再起動し
psql dbnameを実行すると下記のエラー出てこまっています。
psql: connectDBStart() -- connect() failed: No such file or directory
Is the postmaster running locally
and accepting connections on Unix socket '/tmp/.s.PGSQL.5432'?

7.1.3です
446NAME IS NULL:2005/10/26(水) 21:10:03 ID:???
Is the postmaster running ?
Is the postmaster running ?
Is the postmaster running ?
447445:2005/10/26(水) 21:15:07 ID:???
/usr/bin/postmaster -S
を実行してみたところ
/usr/bin/postmaster does not know where to find the database system data. You must specify the directory that contains
the database system either by specifying the -D invocation option or by setting the PGDATA environment variable.

でした、、確認方法まちがってますか???
448445:2005/10/26(水) 21:32:23 ID:???
すみません、自己解決しました
449445:2005/10/26(水) 21:39:27 ID:???
まだしてないんです・・・
450NAME IS NULL:2005/10/26(水) 21:44:30 ID:???
> specifying the -D invocation option or by setting the PGDATA environment variable.
PostgreSQLのエラーメッセージはとても親切だなぁ。
451445:2005/10/26(水) 21:47:08 ID:???
すみません、自己解決しました
452445:2005/10/26(水) 22:38:51 ID:???
すいません、どうなおしていいか、わからないです・・・
453NAME IS NULL:2005/10/26(水) 22:49:28 ID:???
>>445

簡単なエラーメッセージも読めないようではあんたには無理だ。サポートを買え。
454NAME IS NULL:2005/11/01(火) 12:31:05 ID:Ni/Y0pQt
ポスグレで固定長ファイルをテーブルに読み込む方法ってありますか?
455NAME IS NULL:2005/11/01(火) 14:01:01 ID:???
まるちうざ
456NAME IS NULL:2005/11/01(火) 14:57:22 ID:???
>>454
ひたすら手入力しとけや
457NAME IS NULL:2005/11/03(木) 12:22:55 ID:???
>>454
つ PL/Perl
458NAME IS NULL:2005/11/09(水) 18:15:33 ID:???
[pgsql-jp: 36351]
社内でpostgresql、Slonyの知識がある部署に協力していただき
まだ解析中です。

本当、実績のないツールはイレギュラーが出ると辛いです。

----
だそうで。。
459NAME IS NULL:2005/11/09(水) 18:38:18 ID:???
Slony-I は日本語の資料が少ないのは確かだなあ。
試行錯誤でだいぶわかってきたが、解説サイト作って
協力すべきかなぁ
460NAME IS NULL:2005/11/09(水) 23:06:21 ID:???
> 社内でpostgresql、Slonyの知識がある部署に協力していただき

社内に”いただき”というのは間違ってるな。
461NAME IS NULL:2005/11/09(水) 23:21:43 ID:???
>459
おお、素晴らしいですね。
462NAME IS NULL:2005/11/09(水) 23:51:50 ID:???
>>458
じぶんのところで実績がない、って言いたいんだろうけどな
463NAME IS NULL:2005/11/12(土) 14:11:05 ID:???
[pgsql-jp: 36318] configureのエラー
[pgsql-jp: 36372] PostgreSQLのスタート

とことん、エラーメッセージを読まない奴だな…
464NAME IS NULL:2005/11/12(土) 22:22:26 ID:???
英語が出ると、
「あーあーみえないきこえなーい」
なやつなんだろうw
465NAME IS NULL:2005/11/14(月) 15:58:27 ID:???
[pgsql-jp: 36388] Re: PostgreSQLのスタート
もはや存在が迷惑
466NAME IS NULL:2005/11/14(月) 17:10:36 ID:???
だいたいnakayosi.jpってなんやねん
467NAME IS NULL:2005/11/14(月) 18:16:08 ID:???
俺は、やつのメールおよびそれへの返信をスパムとして処理するようにした。
なので、すっきり。
468NAME IS NULL:2005/11/15(火) 22:09:11 ID:???
[pgsql-jp: 36394] Re: PostgreSQLのスタート

まだまだ続くよnakayosi.jp
マシン名himawariはチト受けた
469NAME IS NULL:2005/11/16(水) 12:13:30 ID:???
>>466
ドメイン名(nakayosi.jp)がカッコよくて覚えやすい。

という無料のメールサービスみたいですよ。
470NAME IS NULL:2005/11/16(水) 12:22:03 ID:???
>>469
俺にとっては括弧良くない
471NAME IS NULL:2005/11/16(水) 13:01:30 ID:???
man su
472NAME IS NULL:2005/11/16(水) 13:45:57 ID:???
あー、やっぱりコンパイル段階での問題なのかな。
473NAME IS NULL:2005/11/16(水) 14:45:53 ID:???
まずgoogle教えてやればよかったのにw
474NAME IS NULL:2005/11/17(木) 06:28:51 ID:029n4mvn
もう彼の存在そのものがネタ扱いですか
475NAME IS NULL:2005/11/17(木) 09:55:52 ID:???
宮尾とか宮内とかわかりにくい。
476NAME IS NULL:2005/11/17(木) 20:31:21 ID:WPWQyDgh
質問です.
テーブルにARRAY型のフィールドがあって、そこにinsertを行うJavaのプログラムを書いたのですが,
org.postgresql.util.PSQLException: Unsupported Types value: 2,003
at org.postgresql.jdbc2.AbstractJdbc2Statement.setObject(AbstractJdbc2Statement.java:1630)
at org.postgresql.jdbc3.AbstractJdbc3Statement.setObject(AbstractJdbc3Statement.java:1436)
at org.postgresql.jdbc2.AbstractJdbc2Statement.setObject(AbstractJdbc2Statement.java:1636)
にて落ちてしまいます.
PreparedStatement.setArray(int,Array)を利用しようと思いましたが,Arrayがインタフェースで
直接利用できないため
PreparedStatement.setObject(int,Object,int);
を利用しました.3番目の引数に(Types.ARRAY)を渡し,2番目の引数にはint[]を
渡しています.
解決策として何かわかる方いらっしゃれば教えてください.
Postgresql8.10 JDBC
WindowsXP
です
477NAME IS NULL:2005/11/18(金) 19:20:31 ID:???
石井タンのこれ↓

http://itpro.nikkeibp.co.jp/article/COLUMN/20051117/224817/?P=2

早速やってみたんだけど、インデックスはそれぞれの子テーブルであらためて張らないと、
子テーブル内でINDEXが無い状態になるってことで合ってる?

とすると、結構運用めんどくさいなぁ。
478NAME IS NULL:2005/11/27(日) 18:17:39 ID:???
>>477
テーブルパーティショニングは結構CPU使うね。
やっぱAthlon 1.3GHzはきついか。
479NAME IS NULL:2005/11/29(火) 22:31:10 ID:???
>477
合ってるよ。確かに面倒だね。
これから改善されていくんじゃないかな。
480NAME IS NULL:2005/11/30(水) 13:49:57 ID:jT0vELWM
postgres8.1 win32 のインストールができず困っております。

インストールエラー
インストールされたファイルの権限設定に失敗しました
'cacls' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

権限設定とはどういう意味なのでしょうか?環境はXPなのですがうまくインストールできないのですが
Linuxに比べてWin上での留意点などありますでしょうか?
481NAME IS NULL:2005/11/30(水) 14:06:05 ID:jT0vELWM
インストーラを使って、無理でした
482NAME IS NULL:2005/11/30(水) 14:09:03 ID:???
postgresを起動するOSのユーザーを作ってないのでは
483NAME IS NULL:2005/11/30(水) 15:46:59 ID:???
インストールはadministrators グループであること
postgres ユーザーを administrators に入れないで作成すること

インストールの前にこれやっとけばいい。
インストール中にユーザー作ったりもするが前もって
やっといたほうがめんどくさくなくていい
484NAME IS NULL:2005/11/30(水) 16:50:11 ID:???
インストール中にユーザー作るほうがらくだと思う・・・
ただユーザー管理が頭にないhomeエディションでこれはきついんだよね
485NAME IS NULL:2005/12/01(木) 15:15:35 ID:???
>>482-484
レス有難うございます。cygwin上でcygIPCを入れてやってみたいと思います
486NAME IS NULL:2005/12/01(木) 15:52:32 ID:???
cygwinいらないでしょ、まあやってもいいけど
487NAME IS NULL:2005/12/01(木) 15:56:15 ID:???
cygwin使ったほうがトラブル多いようだが
488NAME IS NULL:2005/12/01(木) 16:12:38 ID:???
ネイティブ版を使えばいいのにねぇ。日本語インストーラもあるし。
489NAME IS NULL:2005/12/01(木) 18:45:17 ID:???
cygwinまじいらね
490NAME IS NULL:2005/12/01(木) 18:53:40 ID:???
アカウントアカウントってわずらわしいし、サービスに登録されたがろうとするから、
おいらはcygwinのままでいいや。
491NAME IS NULL:2005/12/02(金) 02:35:27 ID:???
べつにわずらわしくないよ
postgresってユーザー作ります、よろしいですか?ときかれるだけだし
492NAME IS NULL:2005/12/02(金) 11:34:36 ID:???
upgradeじゃなくて、新規のPCに一からインストールしてみた。
何の問題もなかった、、、引っかかる人はどこでひっかかるのか。
postgresユーザーに権限与えすぎるとまずかったり、サービスを
実行するユーザーになれないとかみたいだが、、、
ファイヤウォールとかがわるさしてんのかねえ
493NAME IS NULL:2005/12/02(金) 12:11:16 ID:???
おまえら、助けてください。
VineLinux3上の PostgreSQL7.4.8で、
・Perl-CGIプログラムからDBIでレコード登録・更新をしている
・登録されたデータをODBC経由でWindowsXP上のMS-ACCESSで編集している
・Perl側で登録(INSERT)だけで処理したレコードはACCESSで編集できる
・Perl側で更新(UPDATE)までしたレコードはACCESS側で編集しようとすると「データの競合」エラーが出る。

Perl側の更新部分は下記。
my $dbh = DBI->connect(dbname, dbuser,dbpasswd, { PrintError => 0, RaiseError => 1, AutoCommit => 0, } );
$dbh->do( "UPDATE foo SET flagr=1 WHERE code='123456';") );
$dbh->commit;
$dbh->disconnect;

どうなおせば良いかヒントください。エロイ人。
494NAME IS NULL:2005/12/02(金) 14:37:54 ID:???
>>492
同じwindows上のFTP鯖が悪さしてたみたいでした(><)
今の所PostgresSQLだけ入れてちゃんと動いてます

95でFTPD!?
ttp://hp.vector.co.jp/authors/VA002682/tftpd_frame.htm

WindowsNT

WindowsNTは、Windows95にはついていないファイル保護機能が付いています。
NTは、近代的なオペレーティングシステムが持っているべき機能はほとんど持っている高性能オペレーティングシステムです。
このプログラムは、NTでも動くようですが、そんなときでも、このプログラムはNTの持っているファイル保護機能を全く使いません。
ファイル保護は、堤防と同じで、一個所でも穴があれば、そこから崩れていってしまいます。
つまり、このプログラムが動いているだけで、せっかくのNTサーバーが、95並みのファイル保護機能に成り下がってしまうわけです。

NTでこのプログラムを使う人も、この事をよーーく考えてからご使用下さい。

また、私はNTを持っていないので、NTでの動作確認は、全く行なっていません。また、行なうことも出来ません。
495NAME IS NULL:2005/12/02(金) 14:42:16 ID:???
NT!
496493:2005/12/02(金) 19:34:00 ID:???
(ノ_・。)
497NAME IS NULL:2005/12/02(金) 22:41:17 ID:???
>>485
cygipcって何年前の話だか……
498NAME IS NULL:2005/12/02(金) 23:24:14 ID:???
粘着カキコキター(・∀・)
499NAME IS NULL:2005/12/02(金) 23:30:45 ID:???
ファイヤウォールとかがわるさしてんのかねえ
500493:2005/12/02(金) 23:48:12 ID:???
d楠。
Accessから更新できるレコードと更新できないレコードのダンプを比較して解決しました。
Perlからの更新内容はフラグ立てとタイムスタンプの記録だったんだけど、
UPDATEクエリだとわかりゃ良いと思って質問にはフラグ立ての部分しか書いてなかったのです。(;´Д`)
実際のクエリは
UPDATE foo SET flag = 1, update_timestamp = current_timestamp WHERE code='foo';
みたいになってて、これを
UPDATE foo SET flag = 1, update_timestamp = date_trunc('second',current_timestamp) WHERE code='foo';
に修正したらなおりました。
「PostgreSQLのタイムスタンプ型」と「Accessの日付/時刻型」の精度の差が原因だったみたいです。
501NAME IS NULL:2005/12/03(土) 00:17:13 ID:???
>>497
エンドユーザーなりに
せめてその場の空気くらいは読めるようになろうぜ
502NAME IS NULL:2005/12/05(月) 00:53:53 ID:???
current_timestamp::timestamp(0)
503NAME IS NULL:2005/12/05(月) 14:42:24 ID:???
過去のアーカバイブから
504NAME IS NULL:2005/12/27(火) 22:56:11 ID:???
最近DB(PostgreSQL 7.4.6)の使い方の勉強を始めました。
以下のようなテーブルがあり、t1_sizeの合計を表示するユーザ関数を
作成したいと思います。その時、LANGUAGE 'SQL' を指定すると期待した
数値を返してくれるのですが、'PLPGSQL' を指定すると、

ERROR: column "res" does not exist
CONTEXT: PL/pgSQL function "t1sum2" line 6 at return

と返ってきます。これは RECORD の使い方を間違っているのでしょうか。
(PostgreSQL 8.1.1の場合は数値は返してくれますが、型が違うとwarnを吐きました)

-- t1
--
Column | Type
---------+---------+
t1_num | integer
t1_name | text
t1_date | date
t1_size | bigint

-- t1sum(INT)
--
CREATE FUNCTION t1sum(INT) RETURNS NUMERIC AS
'SELECT sum(t1_size) FROM t1 WHERE t1_num = $1'
LANGUAGE 'SQL';

-- t1sum2(INT)
--
CREATE FUNCTION t1sum2(INT) RETURNS NUMERIC AS '
DECLARE
num ALIAS FOR $1;
res RECORD;
BEGIN
SELECT INTO res sum(t1_size) FROM t1 WHERE t1_num = num;
RETURN res;
END;
' LANGUAGE 'PLPGSQL';

長文になり申し訳ないのですが、よろしくお願いします。
505NAME IS NULL:2005/12/28(水) 01:37:22 ID:???
| CREATE FUNCTION t1sum2(INT) RETURNS NUMERIC AS '
| DECLARE
| res numeric;
| BEGIN
| SELECT INTO res sum(t1_size) FROM t1 WHERE t1_num = $1;
| RETURN res;
| END;
| ' LANGUAGE 'PLPGSQL';

じゃダメかい

つーか、sumしたいだけなら関数書く必要性を感じない
それに where で条件つけてsumしてるのは理解できが
その条件がキーっぽいと言うかコードでは意味がない気がするが
506NAME IS NULL:2005/12/28(水) 02:57:54 ID:???
>>505
有り難うございます。これで動きました。

> つーか、sumしたいだけなら関数書く必要性を感じない
これは sum に対して、もう少し計算を加えたいとのと、私は
あまりタイピングが早くないので。かっこわるいのですが。
507NAME IS NULL:2006/02/16(木) 15:56:39 ID:???
カラムに設定したuniqueの制約を削除する方法を教えてくださいませ。
カラムを消して、カラムを追加しなおしてもいいのかと思いますが削除の方法が分かりません。
508NAME IS NULL:2006/02/16(木) 16:36:08 ID:???
>>507
DROP INDEX でどうか
509508:2006/02/16(木) 16:44:01 ID:???
CREATE TABLE 時に unique指定したやつはDROPだめだね

ALTER TABLE table DROP CONSTRAINT key名
でいけないかな
510NAME IS NULL:2006/02/16(木) 17:13:22 ID:???
>>509
ありがとうございます
adminuser というテーブルのhyoujiカラムの制約を解除したいのですが。
下記のようにしても駄目でした・・
ALTER TABLE adminuser DROP CONSTRAINT hyouji;

ちなみに
hyouji varchar(2) not null
で作ったカラムなので not nullも付いております。

ちなみにバージョンは 7.4.7-6sarge1 であります。
511507,510:2006/02/16(木) 17:24:47 ID:???
すいませんkey名という意味が理解出来ていませんでした。

\d adminuser
してkey名を表示して

ALTER TABLE adminuser DROP CONSTRAINT adminuser_hyouji_key;
で出来ました!

ありがとうございます
>509さんは神です、いわゆるゴッドです
512NAME IS NULL:2006/03/01(水) 23:12:42 ID:???
アホなこと聞くけど、ご勘弁を。


psql を起動させたときに表示されるバージョン名が、
インストールされている postgres のバージョン名にあたるの?

もしそうじゃない場合、
インストールされている postgresのバージョン名を調べるには、どうしたらいいの?
513NAME IS NULL:2006/03/02(木) 00:06:32 ID:???
psql --version
514NAME IS NULL:2006/03/02(木) 00:08:50 ID:???
それはpsqlのバージョンになるね
SELECT version();
とか
dataの下のPG_VERSION
とか
postmaster --version
515514:2006/03/02(木) 00:12:20 ID:???
っと、先客がいた。
ローカルのpsqlで別ホストのDBにつないだ場合は、SELECT version()しかないかな
516NAME IS NULL:2006/03/02(木) 09:24:04 ID:???
SELECT VERSION();

なんてのがありましたか。どうもありがとうございます。とっても助かりました。
517NAME IS NULL:2006/03/03(金) 13:37:05 ID:???
dateを設定したカラムにinsert使用としたら下記のようなエラーが出てんですが

これはタイムスタンプの構文がおかしい
ERROR: invalid input syntax for type timestamp: "Sun, 5 Feb 2006 17: 8:21 -0060"
これはタイムゾーンが正しいレンジに収まっていない
ERROR: time zone displacement out of range: "Wed, 4 Jan 2006 3:53:25 +0480"

でいいんでしょうか
postgreのクエリーエラーの一覧があるサイトや書籍がありましたらご紹介ください。
518NAME IS NULL:2006/03/14(火) 18:18:23 ID:???
エラーメッセージに関してまとまったことを書いたとこがみつからないねえ
ソース探したら、英語以外は po ファイルにまとまってんだね。
中国語や韓国語もあるけど日本語無いんだね。

まあエラーメッセージが文字コード違いの日本語で出ると
面倒だからなあ。Oracleで????ばっかりのメッセージをよく見るしな
519NAME IS NULL:2006/03/19(日) 18:55:12 ID:gv0TLlVc
[pgsql-jp: 36898] のような $body$ って一般的?
普通は '' でくくると思うんだけど、初めて見たよ。
520NAME IS NULL:2006/03/21(火) 01:04:57 ID:kfspap6q
日本語をキーにしてテーブルを検索してもレコードが引っかからないんですけど何ででしょうか?
PostgreSQL 8.0.1 を Windows で動かしています。データベースは UTF-8 で作りました。

foo=# CREATE TABLE A(T VARCHAR(256));
CREATE TABLE
foo=# INSERT INTO A VALUES('ABCDEFG');
INSERT 56373 1
foo=# INSERT INTO A VALUES('あいうえお');
INSERT 56374 1
foo=# SELECT * FROM A;
t
------------
ABCDEFG
あいうえお
(2 行)
foo=# SELECT * FROM A WHERE T='ABCDEFG';
t
---------
ABCDEFG
(1 行)
foo=# SELECT * FROM A WHERE T='あいうえお';
t
---
(0 行)
foo=# select version();
version
------------------------------------------------------------------------------------------
PostgreSQL 8.0.1 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)
521NAME IS NULL:2006/03/21(火) 10:59:24 ID:kfspap6q
>>520 ですが 7.4 (Linux) だと日本語でもちゃんと検索に引っかかりました。
8.0 (Win) の設定が何かおかしいのでしょうか??? 両方ともデータベースは
UNICODE で作ってあります。また両方とも psql と JDBC 経由とでこういう
動きです。

foo=# select version();
version
--------------------------------------------------------------------------------------------------------------------------
PostgreSQL 7.4.11 on i386-redhat-linux-gnu, compiled by GCC i386-redhat-linux-gcc (GCC) 3.4.4 20050721 (Red Hat 3.4.4-2) (1 row)
522NAME IS NULL:2006/03/21(火) 17:24:44 ID:???
Windowsの8.0でUnicodeをにすると、インストールの時、なんかメッセージでなかったか?
523NAME IS NULL:2006/03/21(火) 17:52:38 ID:???
インストール時はちょっと覚えてないですけど CREATE DATABASE で UNICODE 指定
する時は特に何も出ませんでした。インストール時のメッセージってどこかに残ってます?

foo=# CREATE DATABASE X ENCODING='UNICODE';
CREATE DATABASE
foo=# SELECT VERSION();
version
------------------------------------------------------------------------------------------
PostgreSQL 8.0.1 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)
(1 行)

デフォルトの EUC_JP でデータベース作るとちゃんと日本語も引っかかるのになぁ。
524NAME IS NULL:2006/03/21(火) 17:57:07 ID:???
Winの8.0ではUnicodeは使うな
525NAME IS NULL:2006/03/21(火) 17:58:46 ID:???
526NAME IS NULL:2006/03/21(火) 18:01:33 ID:???
了解しますた (゚∀゚)ノ
527NAME IS NULL:2006/03/21(火) 18:03:40 ID:???
DBのエンコードにunicode+winで8.0ずっと使ってるけど問題は出てないな

セットアップの話ならそっちはunicodeは使っちゃ駄目だったけど
そっちの話のことか
528NAME IS NULL:2006/03/22(水) 09:46:41 ID:???
8.0のインストーラ腐ってたよな。
unicodeにしたら失敗、インストール先変えたら失敗、○○したら失敗、だらけだったよ。
結局allデフォルトで入れるしかなかった。
529NAME IS NULL:2006/03/22(水) 10:47:37 ID:???
インストール先は問題無かった。
530NAME IS NULL:2006/03/22(水) 14:55:38 ID:???
データベースを EUC_JP で作り直してしばらくはうまい事動いてたんだが
いつの間にかまた日本語で検索できなくなってた。インストールした時って
文字セット選べたんだっけか? 一年位前に入れてほったらかしだったから
すっかり忘れてる。ちょっと入れなおしてみるか…
531NAME IS NULL:2006/03/22(水) 15:01:14 ID:???
インストール時にinitdbするから選べたはず。
532NAME IS NULL:2006/03/22(水) 15:55:28 ID:???
とりあえず 8.1.3 (Win) 持ってきて入れてみました。インストール時の文字セットは
デフォルトで選択されてる EUC_JP で。CREATE DATABASE も無指定で。
今のところ順調に動いています。そういえば initdb する時に文字セット選べましたね。
Linux に入れるときもやってたわ。
533NAME IS NULL:2006/03/23(木) 01:57:55 ID:???
質問なのですが、dumpファイルから特定のテーブル部分だけを抽出することって可能でしょうか?
ご存知の方いましたら教えてください。
リストアすると、特定のテーブルでエラーが起こってしまいますので、そこの部分を調べたいと思います。
よろしくお願いいたします
534NAME IS NULL:2006/03/23(木) 10:01:41 ID:???
スクリプトでうまく切り出すしかないんじゃないかああ
むちゃくちゃでかいと面倒だよね。
元のDBがあるなら、schemaだけダンプさせて、
どこからどこまでって文字列設定する参考になるけどね。
まあ勘でやってもうまくいく
535NAME IS NULL:2006/03/23(木) 15:15:22 ID:MoU5m8xf
PostgreSQL に JDBC で接続してます。BYTEA 型のカラムに InputStream 指定で
LOB を突っ込んでるんですが、ストリームのデータ量が多い (数十MBくらい) と
OutOfMemoryError が発生します。ひょっとして PostgreSQL の JDBC ドライバって
バイナリデータを全部メモリに展開してから SQL 発行してんの?
536NAME IS NULL:2006/03/24(金) 00:07:57 ID:???
いまいちinitdbとCreateDBのエンコード指定の違いがよくわからん

537NAME IS NULL:2006/03/24(金) 07:16:18 ID:???
initdbはtemplateのエンコードを指定するんじゃないか
createdbの省略時のエンコードでもあるが
538NAME IS NULL:2006/03/24(金) 23:28:36 ID:???
createdbってデフォUNICODEあたりになってなかったっけ?
539NAME IS NULL:2006/03/25(土) 04:51:56 ID:???
>>519
8.0 以降で PL/pgSQL 書くなら使うよ
'' の中で ' 書くときエスケープしなくて済むからね
まあ、$body$ じゃなくて $$ でも $foo$ でもいいんだけど
540NAME IS NULL:2006/03/26(日) 05:22:38 ID:pka3dqSR
>> 533
pg_dump でカスタム形式 ( -Fc ) を指定してれば
できるんだけどね
541NAME IS NULL:2006/04/04(火) 10:40:35 ID:???
postgresユーザのパスワードってどうやってつけるの?
alter user で何回やってもできないんだけど。。
542NAME IS NULL:2006/04/04(火) 11:13:27 ID:???
>>541
ALTER USER が失敗するの?だったら権限。

ALTER USER で設定してるのにパスワード聞いてこない?だったらpg_hba.conf
543NAME IS NULL:2006/04/04(火) 12:13:21 ID:???
>>542
サンクス、pg_hba.confでtrustになってました。
544NAME IS NULL:2006/04/15(土) 17:47:29 ID:???
こんにちは
FreeBSD 5.4, PostgreSQL 7.4

データベースの設置場所を個別に変更(リンクで)しようと、
/usr/local/pgsql/data/base を確認してみたのですが、
17451といった数字のディレクトリしか存在せず、
template1や、テストで作成したデータベース名が見あたりません

データベース名で保存されるには、設定等が必要なのでしょうか
545NAME IS NULL:2006/04/15(土) 18:07:00 ID:???
何でPostgreSQLのスレって分かれてるの?
546NAME IS NULL:2006/04/17(月) 20:35:26 ID:???
>>544
pg_database の内容を見てみよう。

>>545
そういえば何でだっけ。
ここは元はMLヲチがメインだったかも。
547544:2006/04/20(木) 01:21:34 ID:???
>>546
どうもありがとう

datlastsysoidをみればいいんですよね?
ttp://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.4-ja/catalog-pg-database.html
確認してみたんだけど、どのデータベースの同じ番号です

とりあえず、次からは質問用のスレで聞きます
548NAME IS NULL:2006/04/20(木) 18:32:27 ID:gTr1CKh8
質問させて下さい。
プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。
感覚的には文字列比較のvarchar(n)より、数値比較のnumeric(n)のほうが
速くていいのではないかと思うのですが。
うちの昔のシステムはなぜかvarchar(n)で0詰めなんですが、何か意味があるんでしょうか。
549NAME IS NULL:2006/04/21(金) 14:45:30 ID:???
>>548は解決したので無視してください
550NAME IS NULL:2006/04/21(金) 14:52:06 ID:???
既に無視されてるかとw
551NAME IS NULL:2006/04/21(金) 16:09:34 ID:???
このスレは雰囲気悪いな。
552NAME IS NULL:2006/04/21(金) 16:23:22 ID:???
釣り師>>548のせいで急に雰囲気が悪くなった
553NAME IS NULL:2006/04/21(金) 16:42:01 ID:???
どう見ても>>550>>552のせいなんだが。
554NAME IS NULL:2006/04/21(金) 16:44:41 ID:???
どうせ>>550=>>552なんだろうが、こんな糞野郎にPostgreSQLは使ってほしくないな。
555NAME IS NULL:2006/04/21(金) 16:46:58 ID:???
どうみても548=551=553=554です。どうもありがとうございましたw
556NAME IS NULL:2006/04/21(金) 16:51:35 ID:???
どうみても550=552=555です。何か必死ですねw
557NAME IS NULL:2006/04/21(金) 16:53:46 ID:???
>>550のせいで急に雰囲気が悪くなった
558NAME IS NULL:2006/04/21(金) 17:00:36 ID:???
どうみても548=549=551=553=554=556=557です。
レスを一度にまとめられず必ず二回続けてレスする癖から見ても同一人物に間違いありませんw
559NAME IS NULL:2006/04/21(金) 18:05:11 ID:???
>>545
ここは基地外隔離スレw
560550:2006/04/21(金) 20:22:33 ID:???
いや、まじで、漏れ>>550しか書いてないんだけどw
事実、無視されてたわけでwww

>>548の質問内容があまりに・・・(ry

まぁ雰囲気悪く感じたなら、正直スマンかったよ。
561NAME IS NULL:2006/04/21(金) 20:52:03 ID:???
>>560
何が「まじで」だwww
はっきりいって、どれが同一人物かなんてどうでもいいんだよ。
>>550は空気の読めない基地外だから氏ね。
562NAME IS NULL:2006/04/21(金) 20:55:56 ID:???
追加
>>548の質問内容があまりに・・・(ry
こんなことを書くくらいだから、
>>560はよっぽどすばらしい質問ができるんだろうなwww
期待は出来ないけどw
563NAME IS NULL:2006/04/21(金) 20:57:00 ID:???
晒された >>548 が必死に食い下がる
564NAME IS NULL:2006/04/21(金) 21:00:41 ID:HfZIsICF
>>563
こういうことにはちゃんとレスがつくんだな。基地外スレにはお似合いだ。
565NAME IS NULL:2006/04/21(金) 21:09:39 ID:???
質問者転じて荒らしか… 救いようのねェバカだな (w
566NAME IS NULL:2006/04/21(金) 21:18:49 ID:???
質問があります。

プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。
プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。
プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。
プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。
プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。
567NAME IS NULL:2006/04/21(金) 21:21:19 ID:???
ハエがたかるのを嘆くより、自分が糞だということに早く気付こう。
568NAME IS NULL:2006/04/21(金) 21:33:09 ID:???
このスレの住人が糞なだけですよ。
569NAME IS NULL:2006/04/21(金) 21:47:49 ID:???
570NAME IS NULL:2006/04/21(金) 21:50:33 ID:???
>>565
よくある事ですよ。馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。
571NAME IS NULL:2006/04/21(金) 22:00:21 ID:???
>>570
そのレス、面白いからもう一方のスレに貼っといたw
572NAME IS NULL:2006/04/21(金) 22:06:30 ID:???
馬鹿なうえに師匠も友達も居ないから2chで質問に対するレスをするわけで。
573NAME IS NULL:2006/04/21(金) 22:07:38 ID:???
>>571
面白いかも知れんけど、それいったら、
>>572に言い返せないから、やめとけ。
574NAME IS NULL:2006/04/21(金) 22:08:29 ID:???
>>550が余計な一言を書いたお陰で荒れまくりwww
575NAME IS NULL:2006/04/21(金) 22:42:40 ID:???
>>574
君が荒らしてるんだよ。。。
576NAME IS NULL:2006/04/21(金) 22:49:20 ID:???
>>575
君も荒らしているんだよ。。。


・・・以下繰り返しw
577NAME IS NULL:2006/04/21(金) 22:50:48 ID:???
しかし>>570は効いたようだ。
荒らしが双方ともぴたっと止んだ。
やっぱり心当たりがあるのかねw
578NAME IS NULL:2006/04/25(火) 21:52:27 ID:???
彼はこのスレから逃げ出しての質問スレで暴れてるようだ。
579NAME IS NULL:2006/04/25(火) 22:33:21 ID:???
コピペで暴れているのはお前じゃんw
580NAME IS NULL:2006/04/25(火) 22:48:57 ID:???
             ___
.            |(・∀・)|
.            | ̄ ̄ ̄ 
         △
        △l |
   __△|_.田 |△_____
      |__|__門_|__|_____|_____
581NAME IS NULL:2006/04/27(木) 12:08:22 ID:???
8.x から正規表現で置換する regexp_replace() が用意されましたが、
7.x で同じことをする場合、何か方法はありませんか?
582NAME IS NULL:2006/04/28(金) 15:50:04 ID:???
PostgreSQLを使って、下記のような処理を作ろうと考えています。
現在「特定テーブルのCSV出力」に何を使うかで悩んでいます。
ストアドプロシージャか、PHPを使うかの二択から選んでくれと言われたのですが、
クライアントアプリがこれらをキックすることを考えるとどちらが簡単でしょうか。

----------
クライアント:Windows(.NETで開発)
サーバ:RedHat Linux + PostgreSQL

やりたいこと。
1.通信はhttpのみ。
2.クライアントはサーバにアクセスして、
 「特定テーブルのCSV出力」を命令する。<--------------(・ω・)
3.クライアントは処理の終了を待つ。
4.クライアントは出力されたCSVファイルをダウンロードする。
583NAME IS NULL:2006/04/28(金) 16:13:08 ID:???
>>582
クライアントがストアドプロシージャを直接キックするん?
584NAME IS NULL:2006/04/28(金) 17:22:25 ID:???
>>583
「そのようにせよ」と指示を受けました。
自分としてはADO.NETを介しても問題ないとは思うのですが...。
585NAME IS NULL:2006/05/05(金) 16:48:00 ID:???
>>582
もしストアードプロシージャを使うとして、クライアントから来たHTTP通信を受けるのは
誰なんだ? postmasterにそんな機能はないぞ。
586NAME IS NULL:2006/05/08(月) 13:27:34 ID:???
>>582
CSV出力するphpを作り、クライアントからそいつにアクセスする。
phpじゃなくてもいいけど。
587NAME IS NULL:2006/05/11(木) 22:31:00 ID:???
8.0から入った遅延VACUUMの設定に悩んでるんですが誰か設定晒してくれ
ちなみに今の設定はこんな感じ

vacuum_cost_delay = 10 # 0-1000 milliseconds
vacuum_cost_page_hit = 1 # 0-10000 credits
vacuum_cost_page_miss = 10 # 0-10000 credits
vacuum_cost_page_dirty = 20 # 0-10000 credits
vacuum_cost_limit = 200 # 0-10000 credits
588NAME IS NULL:2006/05/12(金) 09:32:55 ID:???
いつも PostGreSQL って書いてるけど何か言いたいことある?
589NAME IS NULL:2006/05/12(金) 21:15:45 ID:???
グレないでください。
590NAME IS NULL:2006/05/25(木) 21:19:56 ID:rseeNcuL
PostgreSQL 8.1.4にageたらエラーでまくりなんだけど。地雷踏んじゃったかなorz
591NAME IS NULL:2006/05/25(木) 23:26:32 ID:???
>>590
かなり込み入ったシステムでばーうpしたけど、無問題。
どんなエラーか知らんけど、おまいの作ったモノの方がおかしいんでないか?
592590:2006/05/26(金) 00:06:36 ID:???
>>591
一応原因がわかった

エラーは文字変換ができないことが原因で
ERROR: character 0xacf1 of encoding "EUC_JP" has no equivalent in "UTF8"
ってのが頻発してたんだけど8.1.3まではwarningですんでたのが8.1.4では問答無用でERRORになってるためでした。

つまり俺のコードとDBが腐ってたと。orz
今からデータの掃除に逝ってきます
593NAME IS NULL:2006/05/26(金) 18:50:57 ID:4SSfJU7w
すいません、3日前程にサーバがクラッシュしちゃって、データ復旧に出したのですが
ポスグレのデータを取り出す方法とかありますか?
データのみ復旧されて帰ってきたのですが、どうにかならないですか?

試した事
8.14をインストールしてデータをコピーしてみた。
↓バージョンが違います。
cygwinで7.4.1を入れてデータをコピーして起動してみた。

立ち上がりすらしません。

このデータというのは postgres/date の中のものです。
どうかよろしくお願いします。
594NAME IS NULL:2006/05/26(金) 19:05:37 ID:4SSfJU7w
595NAME IS NULL:2006/05/27(土) 00:18:13 ID:???
>>593
窓から身を投げて一から人生をやり直すというのはどうでしょうか?
596593:2006/05/27(土) 16:20:47 ID:/QEoXRkU
>>595
それ、採用です
597NAME IS NULL:2006/05/31(水) 13:00:22 ID:???
少し前から、ODBCドライバ(psqlodbc)のページが閉鎖されているのかつながりませんが、
移転先とかその辺の事情がわかる方はいますか?
↓ここなんですが。
ttp://cre-ent.skcapi.co.jp/%7Enobu/ODBC/
598NAME IS NULL:2006/05/31(水) 23:17:50 ID:???
>>597
> 少し前から、ODBCドライバ(psqlodbc)のページが閉鎖されているのかつながりませんが、
> 移転先とかその辺の事情がわかる方はいますか?

書いた人が転職したから。ページの移転先は聞いてない。
599NAME IS NULL:2006/06/01(木) 01:58:57 ID:???
>>597
本家のODBCドライバを使わないのは何故?
http://www.postgresql.org/ftp/odbc/versions/
600NAME IS NULL:2006/06/01(木) 20:23:56 ID:???
まだODBCを使っ(ry
601NAME IS NULL:2006/06/03(土) 00:30:59 ID:???
みんな例のセキュリティホール対策ってもう終わった?

余り話題に上ってないって事は、DBエンコーディングにShiftJIS使うとか、クライアントとバックエンドのエンコーディングが違っているとかってあんまいなかったって事なのかね。
602NAME IS NULL:2006/06/03(土) 00:35:40 ID:???
>>601
対応しましたが?
報告必要ですか?
603NAME IS NULL:2006/06/03(土) 09:45:58 ID:???
対応してませんが、何か?
604NAME IS NULL:2006/06/06(火) 14:44:18 ID:h5kZihCT
すみません.こちらの方が質問するには適切と思いますので,
再度投稿します.

以下の点について悩んでいますので,ご教示お願いします.

ダンプファイルよりリストアを行おうと思いまして、
以下のコマンドを実行したところ、
psql testdb < dump.testdb
何度やってみても cannot allocate memory for output buffer
のメッセージが出て途中で止まってしまいます。
原因がお分かりの方がいらっしゃればご教授願いたく思います。

OS:CentOS 
バージョン:PostgreSQL 8.1.3

以上です。よろしくお願いいたします。
605NAME IS NULL:2006/06/06(火) 15:22:11 ID:???
窃盗OSを使ってるような奴は、質問するときもマルチ。
606NAME IS NULL:2006/06/06(火) 15:34:49 ID:???
よそのスレから移動したんだからいいんじゃね?
607NAME IS NULL:2006/06/06(火) 16:07:29 ID:???
というか、pgsql-jp: 37115への返信はしないのか?
608604:2006/06/06(火) 16:18:04 ID:???
>>607
的外れなレスに返信する必要があるとは思えませんでしたので。
609NAME IS NULL:2006/06/06(火) 16:42:10 ID:???
さすが盗人クオリティw
610NAME IS NULL:2006/06/06(火) 16:43:36 ID:???
>>601
オレまだ7.2系使ってるんだけど、どうしたらいいの・・・?
今年中くらいにリプレイスの予定だったんだけどなぁ。
はぁ。。。
611NAME IS NULL:2006/06/06(火) 16:46:51 ID:???
SJIS使わなきゃいいだけ。
プレースホルダー使えばいいだけ。
612NAME IS NULL:2006/06/06(火) 16:53:56 ID:???
SJISを使いたがるPG自体がセキュリティホールみたいなもんだよなぁ
613NAME IS NULL:2006/06/06(火) 17:03:16 ID:???
Received: from [129.60.58.34] by web2412.mail.tnz.yahoo.co.jp via HTTP;
Mon, 29 May 2006 19:48:34 JST
Subject: [pgsql-jp: 37114]リストアが上手く出来ません

129.60.58.34= copper.rdh.ecl.ntt.co.jp
http://www.google.com/search?num=50&hl=ja&lr=lang_ja&sa=G&q=%22rdh.ecl.ntt.co.jp%22

ニヤニヤ
614NAME IS NULL:2006/06/06(火) 17:13:05 ID:???
>>612
その根拠は?
615NAME IS NULL:2006/06/06(火) 17:25:23 ID:???
SJIS使ってる奴は
「わからないから」とか「出来ないから」とか「知らないから」
なんて理由で使いつづけている池沼がほとんど。
そのあげくに指摘されると>>614みたいに逆切れ。
糞尿みたいな連中だよ。
616610:2006/06/06(火) 17:29:53 ID:???
携帯向けなのでSJISなんです。
プレースホルダーって言ってもプログラムレベルの話なので
運用側にはどうすることもできませんし、修正の予算もありません。
困った。。。
617NAME IS NULL:2006/06/06(火) 17:33:14 ID:???
携帯向けとか(絵文字含)、SJISで取り扱うべきものたーくさんあるのだけど。
SJISでも問題なく運用できることを「知らない」、する方法が「わからない」のは
>>615だと思うのだけど。

逆切れしてる池沼は、どちら?w
618NAME IS NULL:2006/06/06(火) 17:35:06 ID:???
>>616
気にすることない。放っとけ。
どうせその腐れPGどもは自分達のアプリに穴があっても絶対に修正しないだろう。
おまえが気に病んでもしょうがない。
いたずらされたらカカクコムメソッドがあるさ。
619NAME IS NULL:2006/06/06(火) 17:44:00 ID:???
運営側の自衛策としてこっそりアプリを監査して穴の所在を掴んでおくといい。
穴は必ず見付かる。どいつもこいつも馬鹿ばかりだからな。
問題が起きたら「調べたら穴が空いてました」という事にして知らん顔すればいい。

穴を見つけても黙ってろよ。間違っても穴を修正させようとするな。
奴らはあーだこーだと理由をつけて修正を渋るうえ、
運営側になんとかしてくれと泣き付いてきて面倒が増えるだけ。
それどころか問題があった事を以前から知っていたという事がわかったら
こちらのほうが責任とらされかねない。
620NAME IS NULL:2006/06/06(火) 17:45:28 ID:???
>>165
うちの場合は、客からの支持
合理的な理由が存在するとは思えんが仕方ない
621忠犬 KEN:2006/06/22(木) 16:30:18 ID:???
そういった内容を、いちいちメーリングリスト宛てにメールしないで
欲しいのですが?
622ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/01(土) 01:32:44 ID:8EUWdSXu
質問です

ーーーーーーーーーーーーーーーーーーーーーーーーー
コネクションAオープン
  トランザクション開始
    表Aの書き換え
  トランザクション終了
コネクションAクローズ
      
コネクションBオープン
 SELECT XX FROM 表A (ロックなし FOR UPDATEなし)
コネクションBクローズ

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

これでさっき書き換えたものを正しく取得できるでしょうか?
おいらはできないと思うのですが

623NAME IS NULL:2006/07/01(土) 02:02:03 ID:???
ココ電逝ったああああああああああああああああああ
624NAME IS NULL:2006/07/01(土) 02:03:07 ID:cSX6hSFp
ココ電逝ったああああああああああああああああああ FROM 市況1より愛をこめて
625NAME IS NULL:2006/07/01(土) 02:03:21 ID:???
おいおいなんでココ電がこんなとこに
626NAME IS NULL:2006/07/01(土) 02:03:39 ID:GrSHDerV
ココ電いったぁ?
市況版より
627NAME IS NULL:2006/07/01(土) 02:03:46 ID:???
ココ電逝ったあああああああああああああああああああああああああああああああ
628NAME IS NULL:2006/07/01(土) 02:04:00 ID:???
すいませんお騒がせしました
>>623-627
さぁ森へ還ろう
629NAME IS NULL:2006/07/01(土) 02:04:03 ID:Qe/njGR0
ココ電逝ったああああああああああああああああああああああああああああああああああ阿
630NAME IS NULL:2006/07/01(土) 02:04:11 ID:RlbL4Q/Q
ココ電だたら、舌かんで死ぬ
631NAME IS NULL:2006/07/01(土) 02:04:38 ID:Q9DHHByP
ココ電球さんですか?

ココ電逝ったぁぁぁぁぁぁぁぁぁぁ!ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁっ
632NAME IS NULL:2006/07/01(土) 02:04:39 ID:+PB+de8g
>>622
マジレスすると
633なつ☆ていおう ◆RWBX3nIyKs :2006/07/01(土) 02:04:42 ID:9HiShuQP
ココ電逝ったああああああああああああああああああああああああああああああああああ
634NAME IS NULL:2006/07/01(土) 02:04:59 ID:???
ココ電逝ったああああああああああああああああああああああ!
635NAME IS NULL:2006/07/01(土) 02:05:08 ID:???
ココ電逝ったぁぁぁぁああああああああああああああああああああああああああああああああああああああああああああああああああああああああ


636NAME IS NULL:2006/07/01(土) 02:05:29 ID:GrSHDerV
おいおい。
起こっているぞ

278 ココ電球(∩T∀T)  ◆tIS/.aX84. New! 2006/07/01(土) 02:04:51 ID:7nlUZFjU
てめえら 書き込むなつうのに
637NAME IS NULL:2006/07/01(土) 02:05:57 ID:???
ココ電逝ったああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ阿
638NAME IS NULL:2006/07/01(土) 02:06:03 ID:???
ココ電逝ったぁぁぁぁああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
639NAME IS NULL:2006/07/01(土) 02:08:08 ID:???
誰か>>622の質問分かる人答えてやって下さい
ココ電は株で大損した不幸な女子高生です
640NAME IS NULL:2006/07/01(土) 02:09:08 ID:Q9DHHByP
53歳の女子高生ですがw
641NAME IS NULL:2006/07/01(土) 02:12:42 ID:RLoIh/h1
ココ電は看板に名前がのってる有名な市況1板のマスコット的な存在です。
ココちゃんをよろすく。。。
642NAME IS NULL:2006/07/01(土) 02:15:16 ID:???
ココ電逝ったあああああああああああああ!!!!!!
643NAME IS NULL:2006/07/01(土) 02:16:16 ID:???
ココ電が持ってた株です
http://quote.yahoo.co.jp/q?s=%A5%D5%A5%A9%A1%BC%A5%B5%A5%A4%A5%C9&d=t&k=c3&h=on&z=m
こんなことになっちゃいました
644ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/01(土) 02:16:29 ID:8EUWdSXu
書き換えは当然commitを含みます。
MVCCを考慮してみてください。
645NAME IS NULL:2006/07/01(土) 02:17:22 ID:Q9DHHByP
ココ電球は当然入金を含みます。
再就職を考慮してみてください。
646NAME IS NULL:2006/07/01(土) 02:20:08 ID:???
ココ電逝ったああああ!
647NAME IS NULL:2006/07/01(土) 02:20:09 ID:cSX6hSFp
株で大損物故板ココ電さんがフリーのデータベースを物色中とな
救ってやれよ
648NAME IS NULL:2006/07/01(土) 02:24:57 ID:Q9DHHByP
しかし、ココ電球は相変わらず人気あるな。
どなたかココちゃんに教えてやってください。おながいします。
649NAME IS NULL:2006/07/01(土) 02:26:33 ID:1BXR4Dua
>>622
DBだけで普通に考えると更新後の結果が取得できて当然
650ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/01(土) 02:37:20 ID:8EUWdSXu

じゃあこれは?
ーーーーーーーーーーーーーーーーーーーーーーーーー
クライアント1

  コネクションAオープン
    トランザクション開始
      表Aの書き換え
    トランザクション終了
  コネクションAクローズ

クライアントB コネクションAでcommitしたのを電話連絡を受けて以下を開始

  コネクションBオープン
   SELECT XX FROM 表A (ロックなし FOR UPDATEなし)
  コネクションBクローズ

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
651NAME IS NULL:2006/07/01(土) 02:58:54 ID:???
>>650
同じサーバなら取れるけど
違うサーバならメタデータなんなりでサーバ更新かけないと反映されない
652NAME IS NULL:2006/07/01(土) 03:06:39 ID:9lelxAwe
>>650
素人ですが、
2つ目のクライアントは「クライアントB」じゃなくて、「クライアント2」なんじゃないの?
流れからすれば。
そんな感じで、クライアント名とかコネクション名とか記号を間違うような、
タイポの問題で止まってたりしてない?
653ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/01(土) 03:12:20 ID:8EUWdSXu

ーーーーーーーーーーーーーーーーーーーーーーーーー
クライアント1

  コネクションAオープン
    トランザクション開始
      表Aの書き換え
    トランザクション終了
  コネクションAクローズ

クライアント2 コネクションAでcommitしたのを電話連絡を受けて以下を開始

  コネクションBオープン
   SELECT XX FROM 表A (ロックなし FOR UPDATEなし)
  コネクションBクローズ

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

修正しました 
654NAME IS NULL:2006/07/01(土) 03:18:33 ID:???
ここ、データベースの基本的な話でなく、PostgreSQL についての話題を扱うとこだよね?
commit したら更新したものが取得できるのは当たり前の話じゃないか。
コネクションがどうとか、全然関係ないんですけど。
655NAME IS NULL:2006/07/01(土) 06:49:10 ID:l/0TGnCJ
ここの住人のレベルがうんざりするくらいアレだからw
656NAME IS NULL:2006/07/01(土) 10:48:47 ID:Q9DHHByP
俺なんてココ電球がいるから書いてるがDBの意味もわからんかったw
ハイラベルwww
657NAME IS NULL:2006/07/01(土) 14:29:37 ID:???
>>653
OracleであればDBMS_FLASHBACクエリーでできる。権限が必要だが。
658NAME IS NULL:2006/07/01(土) 14:39:37 ID:???
訂正
×DBMS_FLASHBAC
○フラッシュバック

他にもsysdba権限や、import database権限があり、直前のバックアップをもっていれば可能であろう。
そもそもsysdbaを監視設定していないシステムであれば、根本的な問題はシステムではない。
659ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/02(日) 00:48:55 ID:xNO4Anq7
一つわかったぞ
PGClusterを使ってる場合
コネクションAのcommitを見てほかのコネクションでSELECTしても
コネクションAでの更新が反映されているとは限らないつうことだ
660NAME IS NULL:2006/07/02(日) 01:14:49 ID:???
>>659
おいおい… もう絶句や…
661ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/02(日) 01:39:13 ID:xNO4Anq7
おまい日本語話せないの?
それとも論理的に説明すんの苦手なん?
662NAME IS NULL:2006/07/02(日) 01:40:49 ID:???
>>661
自分で何言ってるか分かってるの? 失笑ものだよ。
663657,658:2006/07/02(日) 02:06:33 ID:???
PGClusterというのはSERIALIZABLEな一貫性、分離性が保証されている動作モードが
存在するのではないか。ファントム読み取りが発生しうる状況はクラスターじゃなくても
ありうるからそこから調べたらどうだろうか?
664ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/02(日) 02:34:00 ID:xNO4Anq7
お答えありがとうございます。
このテーブルを書き換えるのはコネクションAだけなので
ファントムリードはないと理解していましたが合ってますでしょうか?
よろしくお願いします
665ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/02(日) 02:40:45 ID:xNO4Anq7
検索条件は idの一致のみの単純な検索です
666NAME IS NULL:2006/07/02(日) 15:56:24 ID:???
PGCluster環境を使用していると仮定して、読み取り一貫性が
保証されているならそうでしょう。今回の件は単純にPGClusterの
レプリケーションが上手く機能していないのではないかと思われますが
いかがでしょうか?


667ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/02(日) 18:01:59 ID:IkqVEBqE
お返事ありがとうございます。
PGクラスターのデフォルト設定では他のクラスタへのレプリケーションを確認しないで
直接受けたクラスタDBが成功したタイミングでクライアントに返事を返すらしいのです。
もう少し調査してみます。

668ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/03(月) 21:50:55 ID:q+kqhE6y
usogresつかってますた・・・・
覚悟を決めます
669ココ電球(∩T∀T)  ◆Olz.C.gJ3k :2006/07/04(火) 21:13:47 ID:nOXv9efA
ココ電逝ったああああああああああああああああああああああああああああああああああ
670& ◆u7PlsZ7.G6 :2006/07/05(水) 16:42:04 ID:e24Z99Oj
!!!!!!っあああああああああああああああああああぁぁぁぁぁぁぁたっ逝電ココ
671NAME IS NULL:2006/07/06(木) 03:06:17 ID:TPN99xcc
>>668
usogresですか・・・クラスターやレプリケーションの目的というより、
大幅に速度を犠牲にして(1/2以下)バックアップをリアルタイムで
とる機能といっていますが、正常なDBの区別さえあいまいになる
ソフトウェアですね・・・2002.8.28以降、更新もされていないようで。
usogres.ccそのものはsocketの複製をしてwriteしているだけです
から、サーバを2つ立てて運用する意味が、まったくわかりません。

もちろんご存知だと思いますが、現在のPostgreSQLではWALも改良
されてリカバリーにほとんど問題はありませんし、ロック中のホットバックアップ
も以前よりかなり良くなっているはずなのですが・・・費用面等での7.4以前
の古いバージョンをPostgreSQL8.0以降にバージョンアップできない理由でも
あるのでしょうか?このような問題は、運用に踏み切れない部長なり次長なり
の責任者が不安定な既存システムを抱えるすべての人間を不安にしている
だけでなく、問題が何度も起こってからやっと重い腰をあげるケースが多いよう
に思われます。もちろん責任は一人のSEやPGレベルにはありませんから、そう
悲観なさることもないでしょう。ただ本当にそういった責任者は事実を知らない
のでしょうか・・・知っていて何ら手を打てないのであれば復旧にかかる工数と
導入にかかる工数の天秤にかけるより、より堅牢なシステム構成にしたほうが
望ましいと私は思います。PostgreSQLとは関係ありませんが同じ業界に携わる
ものとして御健闘お祈り致しております。
672ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/06(木) 22:27:18 ID:f5exc1gI
どもです。
ぜってー二重化して双方使ってると思う。
乱数叩き込んでチェックしたいけど、叩き込んだ途端にハングしそうでこわい・・・

673NAME IS NULL:2006/07/08(土) 23:28:51 ID:???
ココ電逝ったあああああああああああああああああああああ
674NAME IS NULL:2006/07/09(日) 01:14:45 ID:jxHzBWxU
今posgresqlの勉強しているんだけど
1個のテーブルにデータ量で100万件あるとして
その中から5件を選び出したりするぐらいだったら
oracleもpostgresqlも速度的にはかわらないものなのでしょうか?
675NAME IS NULL:2006/07/09(日) 01:35:44 ID:???
変わる場合もあるし、変わらない場合もある。

PostgreSQLを勉強というよりも、もう少し根本的なところから勉強したほうがよろしい。
676NAME IS NULL:2006/07/09(日) 01:41:08 ID:jxHzBWxU
>>675
始めたばかりでとんちんかんな質問してしまいもうしわけないです
最近oracleも個人の使用だと安いと聞きましたので

全く同じデータを
同じセレクト文で検索したときはどちらの方が何%速いかっていう
ということなどは出ているのでしょうか?
もしそんなに変化ないようでしたらoracleって個人では意味のない商品ですね
677NAME IS NULL:2006/07/09(日) 02:01:21 ID:???
簡潔に。
同じ(ような)条件でのベンチマーク結果は、探せば見つかるはず。
ただし、繰り返し言われているとおり、それが「意味」を持つかどうかは・・・(ry

RDBMSは、速度だけで語られるべきでもない。
Oracle利用〜個人でも意味がある場合もあれば、無い場合もある。

とりあえず、PostgreSQLなりで色々やってみては?
もう少し、自分なりに調べて勉強してみたほうがよろしい。
678NAME IS NULL:2006/07/09(日) 06:52:51 ID:???
>>677
Oracle はそういったベンチの公開を禁止しているんじゃなかったっけ?
679NAME IS NULL:2006/07/15(土) 02:41:52 ID:???
ポストグレスではMySQLについてるAES関数のような暗号化関数は無いのでしょうか?
680NAME IS NULL:2006/07/18(火) 15:56:58 ID:7etx55f4
初歩的な質問ですみません

項目名「hogetime」の値は↓

2005-08-21 01:20:00+09
2005-08-27 12:30:00+09
2005-09-01 10:05:00+09
2005-09-02 08:51:00+09
2005-09-03 04:51:00+09

のようになっています。

これを日付のみの期間を指定してselectで抽出したいのですが、
どのようなSQL文を打てばよいでしょうか?
例えば2005年8月25日〜2005年9月2日のデータを取り出したい場合、
「hogetime」から↓が抽出されるようにしたいのです。

2005-08-27 12:30:00+09
2005-09-01 10:05:00+09
2005-09-02 08:51:00+09
681NAME IS NULL:2006/07/18(火) 16:02:14 ID:???
>>680
「SQL BETWEEN」なりで検索するといいよ。
682NAME IS NULL:2006/07/18(火) 16:46:27 ID:7etx55f4
>>681
お答えありがとうございます。

分からないのはBETWEENでは無く、日付なんです。
SELECT pubtime FROM article WHERE ?? BETWEEN 2005-08-27 AND 2005-08-28 ;
??の部分と日付の指定の仕方がよく分かりません。
もしお分かりでしたら、教えてください。
ヒントや解説のぺージでもけっこうです。
683NAME IS NULL:2006/07/18(火) 16:54:57 ID:???
>>682
ん? 何が分からないのか分からない…
> SELECT pubtime FROM article WHERE ?? BETWEEN 2005-08-27 AND 2005-08-28 ;

SELECT pubtime FROM article WHERE hogetime BETWEEN '2005-08-27' AND '2005-08-28'
で良いんでね? ただ、hogetime は timestamp みたいだから、28 日のデータは 00:00 のものしか含まれないけど。
684NAME IS NULL:2006/07/18(火) 17:04:48 ID:7etx55f4
>>683
ありがとうございます。
「'」単純にが抜けてましたorz...

お手数おかけしました。
685NAME IS NULL:2006/07/18(火) 20:29:06 ID:???
8.1.4 を使っています。30 万件ほどのデータがあったので、

# create index index_student_entry_date_yomi_name on student(entry_date, yomi, name);

してインデックスを作りました。

# explain select * from student order by entry_date asc, yomi, name limit 10;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------
Limit (cost=0.00..34.79 rows=10 width=334)
-> Index Scan using index_student_entry_date_yomi_name on student (cost=0.00..879441.59 rows=252775 width=334)
(2 rows)

はいい感じです。ところが、order by にある entrydate asc を entry_date desc にすると

# explain select * from student order by entry_date desc,yomi,name limit 10;
QUERY PLAN
------------------------------------------------------------------------------
Limit (cost=201798.14..201798.16 rows=10 width=334)
-> Sort (cost=201798.14..202430.08 rows=252775 width=334)
Sort Key: entry_date, yomi, name
-> Seq Scan on student (cost=0.00..15134.75 rows=252775 width=334)
(4 rows)

になりインデックスを使ってくれません ( 数秒が十数秒です )。
インデックスを使うようにするにはどうすればいいでしょうか?
686NAME IS NULL:2006/07/18(火) 21:18:49 ID:???
687NAME IS NULL:2006/07/18(火) 21:22:14 ID:???
↑の5ページ目な
688NAME IS NULL:2006/07/18(火) 21:42:17 ID:???
>>686-687
ありがとうございます。
689NAME IS NULL:2006/07/22(土) 10:29:47 ID:8HTjVA0W
すんません、質問があります。
ポスグレのDBサーバーにJSPでデータを入れたいのですが
SDKとJDBCドライバはwebサーバー側に入れればいいのでしょうか。
それともpostgresのDBサーバー側に入れて設定するのでしょうか。
ネットでJDBCのインストール手順を見ても、自宅サーバーの構築手順
ばかりで、webサーバーとDBサーバーが一緒に一台のPCに入っている場合
の手順ばかりでどちらのサーバー側でインストール&設定すればよいのか
よく分かりません。どなたか教えていただけませんでしょうか。
690NAME IS NULL:2006/07/22(土) 15:12:12 ID:???
自分で実験してみろ。
691NAME IS NULL:2006/07/23(日) 09:44:06 ID:???
SDKやJDBCドライバは何が使うんだよ
少し考えれば分かるだろ
692NAME IS NULL:2006/07/23(日) 12:19:51 ID:???
DBサーバ側は5432で口あけて待ってるだけでいい
693NAME IS NULL:2006/07/27(木) 04:35:38 ID:M7LKVme/
はじめまして。
最近postgresの勉強を始めたんですが、試しに一つテーブルをつくってみようと
したら「ERROR: parser: parse error at or near "{"」というエラーがでてきます。
今つかってるpostgresのバージョンは7.2.3です。
なんで古いバージョンを使っているのかというと、本に書いてあるのがそのバージョンなんです

694NAME IS NULL:2006/07/27(木) 04:55:26 ID:???
>>693
その SQL を書かないと誰も分からん。
しかし、なんで { なんて文字が出てくるんだ?
695NAME IS NULL:2006/07/27(木) 05:08:03 ID:M7LKVme/
めちゃくちゃ短いんですけど
create table passwd{
id varchar(8) not null,
passwd varchar(8) not null,
primary key(id)
};

な具合ですorz
696NAME IS NULL:2006/07/27(木) 05:22:53 ID:???
>>695
少なくとも {} → () だ。
697NAME IS NULL:2006/07/27(木) 05:28:29 ID:M7LKVme/
すみません。。。。。
今度からちゃんと眼鏡かけて本よみます
698NAME IS NULL:2006/07/27(木) 10:27:35 ID:???
まぁCとかperlとかやってると{}で囲みたくなる気持ちはわからんでもない。
699NAME IS NULL:2006/07/30(日) 06:55:05 ID:???
トリガについて質問です

・注文(日付, 注文数合計)
・注文詳細(日付, 商品番号, 注文数)

みたいなテーブルがあって、注文詳細テーブルに変更があったときに
トリガで注文テーブルの注文数合計を更新したいのですが、
注文詳細テーブルは一括して数行更新されることが多いので
まとまった更新の最後に1回だけトリガで計算したいのです。

こういった処理を実現するにはどうすればいいでしょうか?
700NAME IS NULL:2006/08/01(火) 13:44:54 ID:8LI5yT2A
order byで並び替えて、順番が10の倍数だけを抽出した結果を求めたいのですが、SQL一文で出来るでしょうか?
701NAME IS NULL:2006/08/02(水) 06:41:22 ID:???
>>700
テンポラリシーケンスでも作ったらいいんじゃない。
702NAME IS NULL:2006/08/02(水) 08:44:49 ID:???
>>701
そんなものがあるのか。
っていうか、このスレに書いてあったorz
703NAME IS NULL:2006/08/02(水) 10:06:15 ID:???
postgres 7.3.4
Red Hat Linux release 7.3 (Valhalla)

特定のレコードにアクセスしようとすると次のエラーがでます。

ERROR: missing chunk number 0 for toast value 8902358

"REINDEX TABLE"で該当のテーブルのインデックスの修復を試みましたが
状況は変わりませんでした。

何か復元する方法は無いでしょうか?
704NAME IS NULL:2006/08/10(木) 11:31:54 ID:c9RdWyBD
自慢げに大したサイトでもないのに・・・
http://itpro.nikkeibp.co.jp/article/NEWS/20060208/228805/
と自慢してやってたが

こんなに無用に金のかかるシステムにしちゃって・・・
一緒に講演してたおっさんに騙されたか?

 ・
 ・
 ・

http://dldojin.blog28.fc2.com/blog-date-20060715.html
速攻で破産してるな。

705NAME IS NULL:2006/08/10(木) 21:04:32 ID:???
なんでポストグレスキューエルはMySQLより人気無いの?
706NAME IS NULL:2006/08/11(金) 10:42:13 ID:???
安定してないから。
実績がないから。
MySQLで充分だから。
グレスケはBSD厨と間違われそうで嫌だから。
グレスケは一時Red Hatが後押ししてたから。
707NAME IS NULL:2006/08/11(金) 14:58:46 ID:???
読みにくいから。
708NAME IS NULL:2006/08/13(日) 02:15:23 ID:MsUUCrjU
PL/PGSQLの質問です。
仕事でPL/PGSQLで他人が作った関数をスピードアップしなければなりません。

CREATE FUNCTION fun () RETURNS SETOF record ..
DECLARE
ret record;
BEGIN
FOR ret INTO
SELECT * FROM (SELECT * FROM t_a LEFT JOIN t_b ON .....) AS z LEFT JOIN t_c ON ....
LOOP
...
RETURN NEXT ret;
END LOOP;
RETURN;
END;
....

で、検索SQL "SELECT * FROM (SELECT * FROM t_a LEFT JOIN t_b ON .....) AS z LEFT JOIN t_c ON ...."
は3つのテーブルt_a t_b t_cをLEFT JOINしている複雑なんですが、
500行くらいかえすときはなんとか200msecくらいで処理します。

問題は関数を実行したときに6000msecから10000msecかかることです。10秒くらいかかります。
なかのSELECTが複雑だと500行くらいの処理でも
PL/PGSQLのFORループってものすごく遅いのでしょうか。


カーソルに書き直してみましたがものすごく遅いのでやめました。

あと、もう運用しているのでテーブル設計はやりなおせません。
709NAME IS NULL:2006/08/13(日) 02:27:32 ID:???
そもそもなんで関数になってんのか意味不明
とりあえずexplainの結果をだせ
710NAME IS NULL:2006/08/13(日) 02:45:33 ID:MsUUCrjU
他人が関数にしたんです。私じゃありません。

なかのSELECTだけでEXPLAINすると
Nested Loop Left Join (cost=0.01..4167.91 rows=471 width=41)
-> Nested Loop Left Join (cost=0.00..1393.46 rows=471 width=37)
-> Index Scan using t_a_idx2 on t_a (cost=0.00..52.51 rows=230 width=33)
Index Cond: ((date >= '2006-08-10'::date) AND (date <= '2006-08-12'::date))
-> Index Scan using t_b_idx on t_b (cost=0.00..5.81 rows=1 width=23)
Index Cond: (("outer".cid = t_b.cid) AND (("outer".code)::text = (t_b.code)::text) AND (("outer".cid)::text = (t_b.cid)::text) AND ("outer".date = t_b.date))
-> Index Scan using t_c_idx3 on t_c (cost=0.01..5.87 rows=1 width=23)
Index Cond: (("outer".cid = t_c.cid) AND (("outer".code)::text = (t_c.code)::text) AND (("outer".cid)::text = t_c.id AND (c.pid = 0) AND ("outer".date = t_c.date))

で実行すると190msecくらい。結果は502行。


EXPLAIN SELECT * FROM fun() を実行すると
Function Scan on fun (cost=0.00..12.50 rows=1000 width=96)


9630msecかかる

こんなかんじです。
711NAME IS NULL:2006/08/13(日) 02:52:16 ID:???
>>710
他人が関数にしたのは分かった。
で、関数にしないといけない処理をやっている訳ではないから
関数にしなけりゃいいじゃんって話でしょ?
712NAME IS NULL:2006/08/13(日) 03:05:18 ID:MsUUCrjU
この関数はいろんなところで呼ばれていて、
その先々でまたまた複雑なSELECT文がかかれている、めんどうなシステムです。
このシステムをスピードアップしろといわれて関数がボトルネックとまではつきとめて
なんとか関数の中身を7000msecくらいから200msecくらいまではやめたまではよかったけれども関数を実行したらぜんぜん早くなってなかったのでこまっているところです。

713NAME IS NULL:2006/08/13(日) 03:08:42 ID:OMR6/0y3
>>711

解決策はないですか?
またはPL/PGSQLのことはわかんないんですか?
714NAME IS NULL:2006/08/13(日) 03:29:29 ID:???
>>713
712 と ID が違うが、お前は誰だ?
PL/pgSQL のことは分かっているが、風呂くらい入らせろ。
ボランティアで即答を要求するのか?
そもそも、情報少なすぎ。
実際に SELECT * FROM fun() なんて SQL になってるのか?
何にせよ、気分悪いな。
715NAME IS NULL:2006/08/13(日) 03:53:49 ID:???
釣りにマジレスするなよ。質問者を装った荒らしだろ。
716NAME IS NULL:2006/08/13(日) 10:12:52 ID:Iw16Wg/m
>>714

結局わかんないんですか?
都合悪くなるとボランティアですか?
postgre厨房はレベル低いんですね


それにしても長い風呂ですね
717NAME IS NULL:2006/08/15(火) 11:38:37 ID:???
>>716
3日くらい風呂に入らせろよ
718NAME IS NULL:2006/08/19(土) 14:18:52 ID:tjESA4/I
>>714

そんなに長くはいっててだいじょうぶか、
はやく風呂からでろよw
719NAME IS NULL:2006/08/20(日) 20:44:32 ID:???
減らず口叩くと一週間に延びるぞ
720NAME IS NULL:2006/08/20(日) 22:10:19 ID:+/ksKYrM
バックアップについて教えてください。
pg_dumpを実行すると

schema with OID 5118787 does not exist

こんなエラーが出てバックアップできなくなってしまいました。
パラメータ変えても同じエラーがでます。
vacuumdbしてもかわりません。

バックアップできないだけで、その他は正常に動いているようなのですけど。
同じ症状でDB崩壊の予兆なんていう不気味な書き込みもありましたが、
直し方ご存知の方おりましたら教えてください。
721NAME IS NULL:2006/08/21(月) 11:16:12 ID:???
>>720
schema だけと、データだけをダンプするとどうなる?
--schema-only と --data-only ね。
722720:2006/08/21(月) 12:17:29 ID:iNhabLLZ
>>721
レスありがとうございます。
早速やってみましたところ、

pg_dump --schema-only
schema with OID 5118787 does not exist

pg_dump --data-only
schema with OID 5118787 does not exist

となりました。

自分の操作でエラーの原因に思い当たるのが、
既存のスキーマ名AをBに変えたらアクセスできなくなったので
Aに戻してからおかしくなった気がします。
スキーマ名の名前変更はPgAdminIIIからやりました。
723720:2006/08/21(月) 12:30:56 ID:iNhabLLZ
Postgresqlのバージョンは7.4です。
724720:2006/08/21(月) 12:49:04 ID:iNhabLLZ
720
連続の書き込みごめんなさい。
レンサバの管理者に連絡したら、3日前のバックアップが
あるということなので、被害が広がらないうちにこれで
復旧することにしました。
本当は今の状態から復旧できるのがありがたいのですが、
>>721番さん、助けてくれてありがとうございました。
725NAME IS NULL:2006/08/21(月) 14:09:22 ID:???
あらら、けっこう切羽詰ってたんですね。
726NAME IS NULL:2006/09/05(火) 19:04:20 ID:???
>>722
それ、スキーマの大文字、小文字を区別してることに気が付かなかったとかじゃ…。
727NAME IS NULL:2006/09/11(月) 04:32:56 ID:???
皆様 おはようございます
最近、会社に行く前にPostgreSQL(8.1.2)の勉強を始めたのですがつまずいてしまったところが出てきましたので
もしよろしければ教えていただけないでしょうか

店を経営しているつもりで
x日間で一番売り上げがいい日を検索したりできるようなSQL文を作成したいと思っております

uriageテーブルの中の要素に
日付を入れる day
売り上げを入れる money
この中に毎日の日付と売り上げを入れて行けば


私が考えたのは
1)26日間のデータを取り出し違うテーブルに格納
 select * into uriage_temp from uriage ORDER BY day LIMIT 26;
2)uriage_tempテーブルから一番売り上げのいい日を検索
select day,MAX(uriage) from uriage_temp;

なのですがテーブルを1個余分に作らなくてはいけないのと今日から何日間としか指定できないため
不恰好な手順になってしまっています

これを1回のselect文で表現できたりしますでしょうか?
また例えば 現在ではなく2005/9/26から26日前の2005/9/1の間の売り上げが一番よかった日を探すことなども可能でしょうか?

使えそうな関数など教えていただけないでしょうか
よろしくお願いいたします
728NAME IS NULL:2006/09/11(月) 05:00:20 ID:???
>>727
# SELECT '2006-09-11'::DATE + '-1 days'::INTERVAL AS from_date;
      from_date
---------------------
 2006-09-10 00:00:00
(1 row)

あとは副問い合わせと組み合わせてどうぞ。
729NAME IS NULL:2006/09/11(月) 05:05:05 ID:???
>>728
ありがとうございます
とても参考になります

早速いろいろ実験してみます
730NAME IS NULL:2006/09/11(月) 16:34:15 ID:???
731NAME IS NULL:2006/09/12(火) 19:43:59 ID:HfcoGY8n
PostgreSQL 7.3.4で、文字列型と日付型の範囲指定を混在してselectをかけると激遅になります。
文字列型、日付型の両方のカラムにもインデックスは作成しています。
原因か対処方法をご存知の方がいらっしゃいましたらご教授願います。

SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 >= '2005-01-01'
=> これは速い(300万件のテーブルから数件を取り出すのに3秒程度)

SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 BETWEEN '2005-01-01' AND '2006-01-01'
=> これは激遅(300万件のテーブルから数件を取り出すのに、数分待っても応答無し)

SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 >= '2005-01-01' AND date1 <= '2006-01-01'
=> これも激遅(300万件のテーブルから数件を取り出すのに、数分待っても応答無し)
732NAME IS NULL:2006/09/12(火) 23:39:08 ID:???
>>731 ANALYZE はしたか? EXPLAIN も晒せ。
733731:2006/09/13(水) 13:34:07 ID:???
>>732
ANALYZEで高速になりました。という事は、ANALYZE前は
SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 >= '2005-01-01'

SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 BETWEEN '2005-01-01' AND '2006-01-01'
で違うインデックスが使われていたという事なんですね。
今はEXPLAINしても両者とも全く同じです。
スレ汚しすいませんでした。
734NAME IS NULL:2006/09/13(水) 13:56:38 ID:???
ANALYZE前にEXPLAINすれば違いがわかったのにw
735NAME IS NULL:2006/09/13(水) 13:57:27 ID:???
おそらく
>違うインデックスが使われていた
んじゃなくて、seq scan だったんだろう
736NAME IS NULL:2006/11/16(木) 17:28:57 ID:???
DB内の全てのテーブルにまとめて同じ権限を与えたりする方法って無いですか?
GRANT ALL ON * TO user;
の様なことが出来れば良いんですけど・・・
737NAME IS NULL:2006/11/24(金) 17:49:29 ID:HZFCZlio
エンコーディング問題で躓いた・・。

EUCで作成したDBに
例えば
↓↓↓↓↓↓↓↓ここから↓↓↓↓↓↓↓↓↓
右のURL参照ね http://ja.wikipedia.org/wiki/2%E3%81%A1%E3%82%83%E3%82%93%E3%81%AD%E3%82%8B
↑↑↑↑↑↑↑↑ここまで↑↑↑↑↑↑↑↑↑

のようなEUC以外のクエリーの乗っかったデータを入れようとすると

invalid byte sequence for encoding "EUC_JP"

と、言われてしまいます。
なんとかしてそのまま格納できませんかね??

ちなみにデータを入れるカラムはVCHAR(600)です。
738NAME IS NULL:2006/11/24(金) 18:00:19 ID:???
>>737
日本語でおk

投げているクエリの文字コードが
EUC以外の”ある文字コード”で統一されているのなら、

set client_encoding to 'ある文字コード'

を事前に投げる。これでだめか?
取得時も同じことすれば、元に戻る。

そういうことを言ってるんじゃないなら、スルーよろ。
739NAME IS NULL:2006/11/24(金) 23:22:38 ID:???
質問です。PHP5を使ってデータをpostgresql8.1に入力したいと思っています。
データは以下のようなものでこれを(serial,integer)のデータ型を
持ったテーブルに挿入したいと思っています。

value
------ 
123
245
485
(以下続く *データの長さはバラバラ)

この操作は同時に行われることも想定しています。

この時に一つのデータの塊を連番で入力したいのですが、
同時に入力作業が行われても回避できるような方法はありますか?

(例えばAさんが4つのデータ、Bさんが6つのデータを同時に入力しよう
とした時にserialの列がAさんのデータは1,2,3,4 Bさんのデータが5,6,7,8,9,10と
なるようしたいのです。何も考えずにやるとAさんのデータは1,4,5,8 Bさんの
データは2,3,6,7,9,10とかになりますよね?)
740NAME IS NULL:2006/11/25(土) 03:12:46 ID:???
>>739
>例えばAさんが4つのデータ、Bさんが6つのデータを同時に入力しよう

PHP5ってことだから、Webサイト(HTTP)で一度のリクエストでそれぞれ4つ/6つってことだろうか?
それなら、テーブルロックなりファイルロックなりで排他的に処理すれば済む。

しかし、serialで連番を維持しようとするのはどうかなと。トランザクションをROLLBACK
させた場合でもシーケンスは元に戻らないし、削除すると当然空き番になる。
741NAME IS NULL:2006/11/25(土) 15:29:27 ID:???
>>740
返事が遅くなりましたが、書かれた事を調べました。

なるほど、PHPで適当なファイルを作成して
ファイルロックを使えば良いというわけですね。
ちょっとスレ違いですがこんな感じでよろしいですかね?

$filep = 〜/lock.txt;
$fp = @fopen( $filep, "r+" );
@flock($fp,LOCK_EX);
=======================
sql関連の処理
=======================
flock($fp,LOCK_UN);
fclose( $fp );

・・・で後はlock.txtが存在するかどうかといった条件を
作ればよいというわけですね。

連番の維持に関しては入力後に変更や削除するようなデータではないですし、
番号も処理毎にまとまっていれば問題ないので大丈夫だと思います。
色々とありがとうございます。勉強になりました。
742NAME IS NULL:2006/11/25(土) 16:34:17 ID:eQzXrEm9
>>738

EUC以外の”ある文字コード”で統一されて「いない」
カラムなのです・・・
(たとえば掲示板の書き込みのように URLぺたっと
 張られるようなイメージ)

なので、入れるときも、出すときもEUCで放りこみたいんですが・・
無理なんですかねぇ・・・

PostgreSQL側でのチェックとか外せないのかな・・・?
743NAME IS NULL:2006/11/25(土) 19:06:20 ID:???
posgresのことまったく知らんが、
Binary型みたいのに放りこめばいいんじゃねぇ?
744NAME IS NULL:2006/11/27(月) 23:42:45 ID:s994NHnA
PostgreSQL 8.2 RC
745NAME IS NULL:2006/11/28(火) 12:28:38 ID:???
>>742
それはテキスト型とは言えないだろう。
入れたものをそのまま取り出したいなら、BYTEA型にしとけ。
746NAME IS NULL:2006/11/28(火) 16:31:26 ID:???
>>742
INSERTするときプログラムで文字コード判定して
EUCにエンコードしてから
いれりゃいいんじゃね?
747NAME IS NULL:2006/11/29(水) 18:35:38 ID:???
1000万件のレコードからselectをかけるか検討しているの
ですが、結構運用的に無理があったりしますかね。
748NAME IS NULL:2006/11/29(水) 20:55:27 ID:???
>>747
インデックスを適切に(ry
749NAME IS NULL:2006/11/29(水) 23:27:04 ID:???
ダメったときのこと考えたらoracleにしておいた方が
サポ逃げできるけどなぁ・・・

運用してるとこもあるだろうが、専門タスクチームとか
あるんじゃねぇかなぁ・・・

ちなみに俺が今やってるのはレン鯖なこともあり高々15万件だが
PHPのレスポンスは2秒強掛かってる
750NAME IS NULL:2006/11/29(水) 23:27:48 ID:???
おっとポスグレ74でな。
751NAME IS NULL:2006/11/30(木) 03:05:15 ID:???
どういうテーブルだと15万件で2秒もかかるんだ……?
フルスキャンにしては速いし。
うちは初代Mac miniと8.1.3で300万件に50ms。
752NAME IS NULL:2006/11/30(木) 09:37:30 ID:???
>>751
まてまてポスグレのselectではなく、
phpからのレスポンスだぜ。

あと糞サーバーはPenIII
753NAME IS NULL:2006/11/30(木) 11:58:55 ID:???
そりゃOracleにしたって変わらん
サポ逃げ無理でしょ
754NAME IS NULL:2006/12/03(日) 18:13:24 ID:htuJP6z1
postgresqlって、DB全体を一時的に参照のみにすることって可能?
755NAME IS NULL:2006/12/04(月) 23:02:25 ID:z1fFmR6L
PostgreSQL 8.2.0
756NAME IS NULL:2006/12/05(火) 13:07:14 ID:???
>>754
とりあえず create temp tabme したら
757NAME IS NULL:2006/12/05(火) 13:49:41 ID:???
>>755
RC1でなくて?
758NAME IS NULL:2006/12/05(火) 14:11:09 ID:???
>>757
FTPサーバにはあるみたいだね。とりあえず、configure;makeまでやった。
759NAME IS NULL:2006/12/05(火) 16:22:08 ID:???
ふうむ、、ベータ1のデータディレクトリそのままだと移行できなかった
まあダンプして無いけどテストで作ったやつだけだし、このまま続けてみるか。
760NAME IS NULL:2006/12/11(月) 05:12:15 ID:???
xmlのファイルをlarge objectを用いてデータベース(postgresql)に格納したいんですけど
いいやり方などないでしょうか?
761NAME IS NULL:2006/12/11(月) 13:23:10 ID:???
DBを使ったサイトを作ろうと思っていろいろ勉強してるのですが、
最近、DBの設計の本を読んでいてふと思ったことがあります。

私の会社(ウェブ系)のDBは文字コードにEUCを使っていて、最終的なページの出力をShiftJISでやっています。
出力のアプリケーションはPHPで作ってあるのですが、
PHPの内部エンコーディングがEUCで、出力がShiftJISだと、
テンプレートの文字コードはEUCで
宣言がShiftJISにするという、非常に分かりづらい仕様になっております

で、自分のサイトはそんな面倒なことにならないよう、モバイル以外は文字コードをUTF-8に統一しちゃおう思っていたのですが
UTF-8にすると、日本語のレコードを大量に登録すると、EUCなどを使った時と比べて、容量が1.5倍
(数字は微妙に違うかな?あんまり自身ありません)になりますよね?
ということは、メモリにキャッシュできる量も、減ると…

どうなんでしょう?
なるべく変換しないですむようにしたいのですが
みなさん、文字コードはどうしていますか?
UTF-8でも実際は気にするほど容量は増えないのでしょうか?

現実問題として、携帯も含めShiftJISが主流なので、全部ShiftJISに統一しちゃうのはどうなのでしょうか?
なんか、理由は良く分かりませんが「ShiftJISはやめれ」みたいな意見を見たことがあるのですが…

アドバイスお願い致します。
長文失礼しました
762NAME IS NULL:2006/12/11(月) 13:27:45 ID:???
>>761

性愛の快楽に胎内を晒したノワールは、その余韻に身体を預け、リオスの上に馬乗りになったままじっとしていたが。
リオスの性欲は、まだ衰えない。今や性欲に正直になったリオスは、火照った顔で大きく息をするだけのノワールごと、身を回転させた。
「あ…」
ノワールが、やっと、そう声を絞り出した時には、立場は逆になっていた。今度上になっているのは、リオスだ。
リオスはノワールに覆いかぶさるようにして、ノワールの性愛に潤んだ瞳を見入っている。
「ノワールさん、いや、ノワール…今度は僕が、君を気持ちよくさせてあげたい…」
「リオスさ…」
ノワールが何か言おうとしたが、その唾液でてらてら光る桜色の唇をリオスは奪い、言葉をも奪ってしまう。
積極的に舌を入れてくるリオス、その舌の動きはぎこちなかったが、ノワールは彼を必死に持ち上げるように、助けるように、舌を絡めてあげる。
「ん…にゅ…んむ…」
じゅるじゅると唾液の絡み合う、淫靡な水音を漏らす二人。そうしながらリオスはノワールの胸を服の上からまさぐりながら、腰を動かし始めた。
「ん…! んん…!」
胸と陰部の性感を当てられるノワールは、舌でふさがれた口から、桃色の喘ぎをもらす。その可愛らしい声にリオスは更に欲情し、貪るように唇を触れ合わせる。
長い長いディープキスを終えた二人は、静かに糸引く唇を引き離した。
はぁはぁと豊かな胸を思い切り揺らしながら呼吸するノワール、その瞳がまだまだ潤んでいるのをみると、リオスはたまらなくなった。
ノワールの服のボタンを外し、彼女の上半身を露にしてゆく。やがて黒いブラジャーが現れると、その谷間に顔を埋め、滑らかな皮膚に口付けした。
「ぁん…」
感じて声をあげるノワール。その一方でリオスの腰の動きが、次第に激しくなってゆく。
優しく噛み付くように乳房の皮膚を味わうリオス。ノワールの中でも性に盛るサキュバスの本能に次第に炎がともっていった。
「ぁん…リオスぅ…もっと、もっと、頂戴、もっと、もっとぉ…」
すっかり雌の喘ぎを上げるノワール。それを耳にしたリオスは彼女の願いをかなえようと、状態を起こし、彼女の形のよい豊かな双丘を優しく掴んだ。
そしてもみもみと弄り回しながら、腰を大きく動かしてゆく。
「いい、いい、いいの、リオスさぁん…」
リオスの動きはぎこちなかったが、ノワールは自分の腰も揺り動かして、彼を助ける。
再び淫靡なじゅぷじゅぷという水音が接合面から響いてゆく。その一方でリオスは勃起したノワールのピンクの乳房を弄り、つねあげた。
「ぁ…そこ、だめぇ…」
すっかり上気した艶やかで可愛らしい顔が、心にもない拒否の声をあげる。リオスは何をしてほしいか悟り…口を乳房に近づけ、優しく噛んだ。
「ひゃんっ!」
望む行為を手に入れたノワールは唾液が行く筋も糸を引く口を大きく開いて、叫んだ。
リオスは腰を更に強く動かしながら、貪るように乳房を含み、噛み、舌でちろちろと嘗め回す。その動作はだんだん激しさを増してゆき…
「いやぁあああああんっ!」
ノワールが、達した。膣がさらにぎゅぅっと痙攣するように男根をしめつけ、生暖かい愛液をぶちかける。
びくびくびく、とノワールの腰は大きく動き、リオスの男根を刺激する。
リオスはこの快楽を余さず味わおうと、素早く乳房から口を離すと、完全にノワールに馬乗りになり、大きく男根の抜き差しを始めた。

まで読んだ
763NAME IS NULL:2006/12/11(月) 13:44:13 ID:???
>>762
種馬ディープインパクトが羨ましい
まで読んだ
764NAME IS NULL:2006/12/11(月) 18:30:57 ID:???
>>761
UTF-8が使えるならいかなる犠牲を払ってでも使うべし。
シフトJISは悪魔のコード系。
765NAME IS NULL:2006/12/11(月) 18:44:25 ID:???
>>761
容量なんて気にしない。半年もすれば改善される。
766NAME IS NULL:2006/12/11(月) 18:46:48 ID:???
UTF で Mac と Win と UNIX の違いを吸収してくれるライブラリがほしい
767NAME IS NULL:2006/12/11(月) 21:42:15 ID:???
UTF-8の使用に支障があるOSは排除
768NAME IS NULL:2006/12/11(月) 21:59:38 ID:???
EUCでいいじゃん。
769NAME IS NULL:2006/12/11(月) 22:31:06 ID:???
EUCに固執する奴は修正主義者のブルジョア反革命分子
770ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/12/11(月) 23:07:59 ID:3tBKtZRs
UTFは不具合あるから使っちゃだめよ。
ユニコード問題でぐぐれ
771ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/12/11(月) 23:10:06 ID:3tBKtZRs
>>766
コネクションで変換してクライアントもサーバーも内部は勝手なコーディングで組むのが普通。
なんでごっちゃになるのか判らん
772NAME IS NULL:2006/12/11(月) 23:56:19 ID:???
UTFを嫌う奴はたいていキチガイ
コテハンもたいていキチガイ
773NAME IS NULL:2006/12/12(火) 10:55:18 ID:???
>>761 の質問はDB関係無いとしか思えん
Webprogの板でもいけば
774NAME IS NULL:2006/12/14(木) 07:10:03 ID:???
PHP+Postgresqlを用いてページのユーザー認証をするとき、
kojin_dateというデータベース内のmeiboというテーブルに格納されているIDに当てはまるユーザーのみ、ログインを許可したいのですが



<?php

if (!isset($_SERVER["PHP_AUTH_USER"])) {

header('WWW-Authenticate: Basic realm="My Page"');
header('HTTP/1.0 401 Unauthorized');
require("error.html");
exit;
} else {

$id = $_SERVER["PHP_AUTH_USER"];
$passwd = sha1($_SERVER["PHP_AUTH_PW"]);

$db = pg_connect("dbname=kojin_date") or die("<P>データベースに接続できませんでした。</P>");

$sql = "SELECT * FROM meibo WHERE id=$id;";
$result = pg_query($db, $sql);

$num = pg_num_rows($result);

if ( $num < 1 ) {
// データベース上に該当するIDがない
echo <<<_END_OF_DATA_


           〜中略〜


だとエラーが出てしまいました…自分としては、『$sql = "SELECT * FROM meibo WHERE id=$id;";』の部分が
正しくないのかなと考えているのですが…
長文ですみませんが、アドバイスお願い致します。

775NAME IS NULL:2006/12/14(木) 07:59:39 ID:???
>>774
どんなエラーが出たのかぐらい書いたら?
776NAME IS NULL:2006/12/14(木) 08:03:14 ID:???
あぁ、シングルクォーテーションが抜けてるのか、
$sql = "SELECT * FROM meibo WHERE id='$id';";
まぁ、SQLインジェクションされ放題なのは黙っておく。
777NAME IS NULL:2006/12/14(木) 08:24:49 ID:???
>>776
ありがとうございます!そこを直しただけで上手くいきました!
778NAME IS NULL:2006/12/14(木) 09:50:54 ID:???
期待した動作をしないと思ったら、まずプログラムが作ったSQLを見えるようにして
それをpsql等で直打ちしてみるといいよ
779NAME IS NULL:2006/12/14(木) 19:45:52 ID:???
774の作っているサイトでユーザ名を求められたら、とりあえずヲレは
「'; DELETE from meibo A='A」というユーザ名でログインを試みてみよう。
780NAME IS NULL:2006/12/14(木) 22:20:43 ID:xF0YDAWZ
以前、1000万件のレコードを持つテーブルの運用の件で質問させて
いただいたものです。

正確には900万件となり、下記のようなシンプルなテーブルを構築
いたしました。

  no  | flag
--------------
 12345 |  1
 67890 |  0
 11111 |  1

     :

create index table_idx on table(no);

でインデックスをはり、selectで実行速度を測ってみたのですが、where
指定で1件のnoを抽出するまでにおよそ1分を要してしまいました。

これはもうチューニング等を行ってパフォーマンスを高めるしか方法は
ないのでしょうか。

テーブルを10分割くらいにし、分散化されるのであればそうしてみようか
とも考慮しておりますが、何か一番効率的な方法があればどうかご教示ください。

すみませんが宜しくお願いいたします。
781NAME IS NULL:2006/12/14(木) 22:28:28 ID:???
>>780
インデックスを張った後に ANALYZE した?
782NAME IS NULL:2006/12/14(木) 23:01:44 ID:???
>>780
PostgreSQLのバージョンとテーブル定義のデータ型は?
783NAME IS NULL:2006/12/14(木) 23:06:54 ID:???
EUC-JP で使っていても、UTF-8 でデータが来るから困るよなぁ。
あと、今度の Vista とか。諸兄はどう対応する?
784774:2006/12/14(木) 23:31:09 ID:???
>>778
アドバイス重ね重ねありがとうございます。

>>779
ションナw
785NAME IS NULL:2006/12/14(木) 23:38:10 ID:???
>>781
vacuumdbは1日に1回行ってましたが、私はてっきりこの中に
analyzeオプションが含まれているものだと思ってました。。
これからオプション付きで実行し、追って結果をご連絡させて
いただきます。

また、今後は vacuumdb --analyze db としてcronに設定する
ことにいたします。ご教示有難うございます。

>>782
バージョンは7.4.10で、データ型は、noが桁数可変のためtext、
flagがchar(1)です。
早急なご返答感謝いたします。
786NAME IS NULL:2006/12/15(金) 01:29:00 ID:???
>>785
where no = 12345 とかやってない?
where no = '12345' とか where no = '12345'::text
とすると速くなったり
787NAME IS NULL:2006/12/15(金) 10:45:24 ID:???
どうしてもなおんなかったら EXPLAIN してみ
788780:2006/12/15(金) 17:21:43 ID:???
皆様のおかげで速度の改善ができました。

原因は、私がvacuumdbのデフォルトをvacuumdb --fullと同義であると
勘違いしていたため、analyzeされていなかったという馬鹿さ加減でござ
いますが、一つ勉強になり、本当に感謝しております。

最後に経過報告といたしまして、EXPLAINの結果を以下に記載させて
いただきます。
この場をお借りし御礼申し上げます。


db1=> EXPLAIN select count(*) from no where no='12345678';
QUERY PLAN
---------------------------------------------------------------
Aggregate (cost=0.01..0.01 rows=1 width=0)
-> Seq Scan on no (cost=0.00..0.00 rows=1 width=0)
Filter: ("no" = '12345678'::text)
(3 rows)

          ↓ ↓ ↓

db1=> EXPLAIN select count(*) from no where no='12345678';
QUERY PLAN
-------------------------------------------------------------------------
Aggregate (cost=6.02..6.02 rows=1 width=0)
-> Index Scan using no_idx1 on no (cost=0.00..6.01 rows=2 width=0)
Index Cond: ("no" = '12345678'::text)
(3 rows)
789NAME IS NULL:2006/12/16(土) 12:37:32 ID:???
んで、SELECTの時間はどれくらいになりました?
790780:2006/12/16(土) 13:35:25 ID:???
>>789
1分以上かかってたのが、1秒かからなくなりました。

indexの偉大さを実感できました。。
791NAME IS NULL:2006/12/17(日) 09:49:42 ID:???
おまいらの中でautovacuumを「最適に」使いこなせている奴はいますか?
あのパラメータ設定が正直謎すぎる。
792NAME IS NULL:2006/12/18(月) 13:36:48 ID:???
ログにクライアントのIPアドレスを残す事ってできるんでしょうか?
一応postgresql.confのlog_line_prefix = '%r'にしてIPアドレスを出力させるようにしたんですけれど
SSHからのpsqlコマンドによるセッション、
WebアプリからのTCP/IPによるセッションともにlocalhostもしくは127.0.0.1表示になってしまって
IPアドレスを出力させる意味があまりない・・・
実際のユーザのIPアドレスを残したいんですが、Postgresqlの機能では無理なんですかね。
Webアプリ側からユーザのIPアドレスをDBに渡すとかしないとダメ?
793NAME IS NULL:2006/12/18(月) 13:50:40 ID:???
>>792
そう思います
794NAME IS NULL:2006/12/19(火) 02:05:14 ID:???
WebアプリからのアドレスはWebアプリが動いてるWebサーバのアドレスだしな
795NAME IS NULL:2006/12/19(火) 02:08:00 ID:???
sshでもpsqlを実行したサーバのアドレスだしな
796NAME IS NULL:2006/12/21(木) 18:13:29 ID:6ZyxnkZ3
すいません。どうしても解決しないので、もし誰かご存知でしたら教えてください。
今、postgres8.2.0とpgpool2 1.0.1の環境で、普通の処理はまったく問題ないのですが、フィールドtextに対して、かなり長い値を設定し、insertやupdateを発行するとうまく更新されないのです。
こんな現象がおきているのは私だけなんでしょうか?
797NAME IS NULL:2006/12/21(木) 18:14:40 ID:6ZyxnkZ3
796です。
ちなみに、pgpoolを経由しないと、問題なく登録、更新はできました。
798NAME IS NULL:2006/12/21(木) 18:19:17 ID:???
長さが問題なのか、特定の文字列が問題なのかは調べた?
799NAME IS NULL:2006/12/21(木) 20:21:02 ID:6ZyxnkZ3
796です。
調べましたが、どんな文字でもダメでした。。。
すごく長くすると、エラーさえも起きずに固まります。

unexpected EOF on client connection
とエラーがでているので、pgpoolでつかんだままなのかも知れないのですが、なにか解決方法はあるのでしょうか?
800NAME IS NULL:2006/12/21(木) 21:38:01 ID:???
varcharとかだと問題ねーの?
あとはpgpoolのログってとれない?
801NAME IS NULL:2006/12/25(月) 16:26:08 ID:???
これ何?
[pgsql-jp: 37852] Re: LIKE句による前方一致検索のエラー(invalid memory alloc request size)
802NAME IS NULL:2006/12/25(月) 16:37:49 ID:???
知らんけど、日本で使うのにロケールをC以外にしてるやつがいるのか
803NAME IS NULL:2006/12/25(月) 19:36:46 ID:???
>>802
勝手な思い込みで設定する輩が
たまにいるみたいよwww
804NAME IS NULL:2006/12/25(月) 21:09:41 ID:???
「グレスケはロケールをCにしないと動かない欠陥DBM」とチラシの裏に書いておこう
805NAME IS NULL:2006/12/25(月) 22:03:16 ID:???
>>804
日本限定でな
806NAME IS NULL:2006/12/31(日) 02:09:07 ID:???
ここで聞くのがいいのか解らないけど。

PHPでPostgresを使うときは、
PHPのインストールオプションで、--with-pgsql=/usr/local/pgsql とか
と付けるけど、

Postgresが別のサーバに有る場合は、
/usr/local/pgsqlが無いから--with-pgsql=/usr/local/pgsqlオプションが
付けられない、その場合は、どうやってPHPからPostgresに繋げる
オプションをつけたらいいの?


Aサーバ:Postgresが入っている。
Bサーバ:PHPが入っている。

BサーバからPHPでAサーバのPostgresにつなぎたい;−;
PHPのオプションはどんなのつければいいの?
807NAME IS NULL:2006/12/31(日) 04:19:57 ID:???
>>806
/usr/local/pgsql/lib とか include/ のディレクトリにあるファイルを必要とするから
動かすどころかインストールする必要はないけど、Bサーバでビルドする必要はある。
バイナリパッケージでpostgresql-libなんてのだけ入れる手もある。
そんときは指定ディレクトリ先が変わるけど、ひょっとしたら--with-pgsql だけで
見つけてくれるかもしれない。(やったこと無い)

よくワカランかったら、インストールまでして今まで通りのオプションをつければいいんじゃね。
808NAME IS NULL:2006/12/31(日) 10:34:06 ID:7k+gGJn4
大晦日に恐縮ですが、質問です。

PostgreSQLで日本語問題を解決しようと
このスレの>>42-47を参考にして
initdb --encoding=EUC_JP --no-locale
としましたが、実際にpg_settingsを覗いてみると
クライアント/サーバのエンコーディングはSQL_ASCII、
lc_*はja_JP.eucJPのままとなっています。

initdb実行は正常に行えたと思います。
lc_messages〜lc_timeはpostgresql.confをいじれば良いかと思いますが、
その他のパラメータに関してはどのように設定したら良いのかわかりません。

また、この件(PostgreSQLの日本語問題)について
詳しく記載されているサイトなどありましたら教えて頂けないでしょうか?
よろしくお願いします。
809808:2006/12/31(日) 10:36:05 ID:7k+gGJn4
補足です。
PostgreSQLのバージョンは7.4.13で
CentOSでrpmのものをインストールしました。
810ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/12/31(日) 12:02:16 ID:+YaIr0XC
エンコーディング直せないからDB作り直したけど
811NAME IS NULL:2006/12/31(日) 13:13:11 ID:???
initdbする前にDBあったんじゃない?
消してつくり直してみては
812NAME IS NULL:2006/12/31(日) 18:13:50 ID:???
>>807
ありした〜

Postgresをインストールする方法で
接続することができました。
813 ̄ ̄ ̄ ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄:2007/01/02(火) 03:13:34 ID:???
   
        ,. -ー冖'⌒'ー-、
       ,ノ         \
       / ,r‐へへく⌒'¬、  ヽ
       {ノ へ.._、 ,,/~`  〉  }    ,r=-、   
      /プ ̄`y'¨Y´ ̄ヽ―}j=く    /,ミ=/
    ノ /レ'>-〈_ュ`ー‐'  リ,イ}    〃 /
   / _勺 イ;;∵r;==、、∴'∵; シ    〃 /
  ,/ └' ノ \   こ¨`    ノ{ー--、〃__/
  人__/ー┬ 个-、__,,.. ‐'´ 〃`ァーァー\
. /   |/ |::::::|、       〃 /:::::/    ヽ
/   |   |::::::|\、_________/'   /:::::/〃
814NAME IS NULL:2007/01/05(金) 20:20:48 ID:mthSBstD
すいません、ちょっと質問があります。

CentOSにてPostgreSQL 7.4.13を動かしているのですが、クラッシュしてしまいました。
dataフォルダを 救出することは出来たのですが、これを再構築したサーバに、コピーして
使用することは出来ますでしょうか? /var/lib/pgsql/data を上書きしたのですか
起動することが出来ませんでした。

何か気をつける事とか、ありますでしょうか?
815ココ電球(∩T∀T)  ◆tIS/.aX84. :2007/01/05(金) 22:56:40 ID:+zslfGUn
さば缶のことは知らないけどDATAフォルダーをコピーするのは違うと思うな
バックアップデーターとってないの?
816ココ電球(∩T∀T)  ◆tIS/.aX84. :2007/01/05(金) 22:57:49 ID:+zslfGUn
PostgreSQLのDBバックアップ&復旧方法
http://www.kenti.jp/dat/2005/03/postgresqldb.html

PostgresのDBをバックアップし、その後復旧する方法です。
(._.) φ メモメモ

バックアップ方法
(postgresqlは起動した状態にしておく)

% pgdumpall > backup.db


復旧方法
(postgresqlを起動し、initdbだけしておく)

% psql -e template1 < backup.db

復旧時の注意点は、やっぱり -e をつけないとだめなようです。
817814:2007/01/06(土) 08:38:26 ID:WKYcCNZ9
>>ココ電球(∩T∀T)  ◆tIS/.aX84様

詳細な復旧方法ありがとうございます。本来なら常にこのような
方法でバックアップをとっておくべきだったのですが。。。

クラッシュした方のpostgresが立ち上がらない状況なので
以下のリンクの一番目の復旧方法を試みてました。

http://www.hizlab.net/app/pgadmin.html
818NAME IS NULL:2007/01/06(土) 11:22:48 ID:???
バージョンが同じならDATAコピーだけでいけるよ
OSやCPUもあわせないとならんと思うけど
819NAME IS NULL:2007/01/06(土) 11:55:00 ID:1ae5baRY
話の種提供
1981から1983の間にK谷市H陽中にてM畑44Xの
7某上野家系泰市の子泰和とその仲間たちは
6あらゆる身障者と差別されやすい容姿や身体的特徴
4のある人を化け物呼ばわりし、
0第三者の視線が外れると裏顔をあらわし
2弱者に対しては豹変しキチガイやくそたれなどの人に向けてはいけない
6言葉を交えた恫喝、罵倒を行う
社会的弱者や負組が特に嫌いで死ねばいいと度々発言している
こういう類は親族ともども不幸とは無縁の
社会的信用を得たお金持ちの生活をしている
820NAME IS NULL:2007/01/06(土) 17:43:25 ID:???
8.2 に移行したら副問い合わせが劇遅になりました。どうにかならないものでしょうか。
SQL は
SELECT * FROM a_table WHERE id IN (SELECT id FROM b_table...)
のような感じで、副問い合わせの SELECT 単体では瞬時に 8 件結果が得られます。
IN (...) の部分にその 8 件の id を列挙すると全体としても瞬時に結果が得られるのです。
毎日 vacuumdb --analyze --all はしています。
8.2 で新たに何か設定しないといけないものなのでしょうか?
821NAME IS NULL:2007/01/06(土) 18:31:39 ID:???
explain analyze してみたら。
822NAME IS NULL:2007/01/06(土) 18:59:22 ID:???
>>821
explain しろってのは分かるのですが、この程度の簡単な SQL が
バージョンアップすると劇遅になるのが不可解なのです。
この程度の SQL でチューンが必要な DB になりましたか。
823NAME IS NULL:2007/01/06(土) 19:06:13 ID:???
うんこだから、あきらめろ。
824NAME IS NULL:2007/01/06(土) 22:33:38 ID:???
副問い合わせじゃないけど、これが現象としては近いかも。
http://archives.postgresql.org/pgsql-general/2006-12/msg00864.php
とりあえず 8.1.5 に戻してみようと思う。
825NAME IS NULL:2007/01/06(土) 22:47:41 ID:???
>>814
>起動することが出来ませんでした。

サーバから、何かメッセージなり、ログなり出てませんか?
826NAME IS NULL:2007/01/06(土) 23:40:07 ID:???
うんこすぎ
827NAME IS NULL:2007/01/07(日) 01:21:05 ID:???
>>820
http://itpro.nikkeibp.co.jp/article/COLUMN/20061225/257728/
とかを見ると IN の問い合わせは速くなってるはずなんですけどねぇ。
828NAME IS NULL:2007/01/07(日) 17:02:41 ID:???
>>822
なったっつうか、Postgresは昔っからそうだよ。
商用製品じゃないからOracleみたいに互換モード用意しろとは言わないけど、
いまだにプランナの特性がころころ変わるから困ったもんだ。

プランナが最適な実行計画を選択しくれないケースではたいがいHashJoinを
選択しているから、enable_hashjoinをon/offしてコストを求めてみて、IndexScan+
NestedLoopの方がHashJoinよりコストが低くなるよう、*_costを調整しろ。
#デフォルト値はディスク能力の高いサーバー機向きではないっぽい。

そうやって最適値を求めても、場合によってはバージョンアップでまた求めなおす
必要があったりするわけだけどね。
829NAME IS NULL:2007/01/07(日) 17:24:42 ID:???
うんこっこだねw
830NAME IS NULL:2007/01/07(日) 17:57:12 ID:???
使い出したらバージョンは変えないほうがいいでFA?
831NAME IS NULL:2007/01/07(日) 18:05:22 ID:???
おまえには無理でFA
832NAME IS NULL:2007/01/07(日) 20:19:39 ID:???
とりあえず 8.1.5 にバージョンダウンして元の速度(瞬時)に戻りました。

>>828
ありがとうございました。
ちなみに 8.2.0 では Hash IN Join で 8.1.5 では Nested Loop になってました。
他にもパフォーマンスが劇的に劣化している例があるようなので 8.2.1 を待ってみます。
833ココ電球(∩T∀T)  ◆tIS/.aX84. :2007/01/08(月) 00:20:54 ID:bQTUi6zK
ああ、postgresはプランナーにバグあるよ。
誰か直して
834ココ電球(∩T∀T)  ◆tIS/.aX84. :2007/01/08(月) 00:22:38 ID:bQTUi6zK
JOINにして JOINの順番変える事でプランナーをある程度制御できるって書いてある。
835NAME IS NULL:2007/01/08(月) 18:07:50 ID:???
いつのまにか8.2.1あるけど、8.2.0で問題あった人、どうですか?

* Fix planner mistakes for outer join queries (Tom)
* Fix several problems in queries involving sub-SELECTs (Tom)
ってあるけど
836NAME IS NULL:2007/01/08(月) 18:16:01 ID:???
>>835
お、まじですか。昨日はなかったはずなんだけど。
早速試して報告します。
837NAME IS NULL:2007/01/08(月) 18:49:48 ID:???
駄目だった。また遅くなった…
8.1.5 に戻ります。
838NAME IS NULL:2007/01/08(月) 19:34:26 ID:???
だーみだこりゃ
839NAME IS NULL:2007/01/09(火) 15:14:18 ID:???
ちなみに 8.1.6 も試してみましたが問題なしだった。これは当然か。
本家 ML では同様の報告を見掛けるのに
日本の ML でパフォーマンス劣化の話は見たことありませんね。
皆さん 8.2 系使ってないのかな?

今回の問題を開発者に出来れば日本語でフィードバックしたいんだけど
どうすれば良いものでしょうかね。
ML 等の不特定多数宛に情報を流すのは避けたいのですが。
せめて Bugzilla レベルのものはないのでしょうか?
840NAME IS NULL:2007/01/09(火) 16:36:23 ID:???
おめーのフィードバックなんかイラネ
841NAME IS NULL:2007/01/09(火) 19:40:15 ID:???
>>839
日本のMLに投げれ。きっと誰かが英訳してくれる。
842ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. :2007/01/09(火) 20:10:27 ID:EnJ2TtdZ
日本postgres協会の人が2ちゃんを巡回しているl事を祈ってここに書こう
843ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. :2007/01/09(火) 20:12:54 ID:EnJ2TtdZ
30分でおわたのか はえーなー
アナライズかけたん?
844NAME IS NULL:2007/01/09(火) 21:50:23 ID:NMxA2CQg
8.2系、8.2.1出たので試そうかと思ってましたが、まだ駄目っぽいですね、、、
845NAME IS NULL:2007/01/09(火) 22:33:48 ID:???
バグじゃなくて8.2としての仕様だな。
8.3が出るまで待てってことだ。
846NAME IS NULL:2007/01/10(水) 00:31:30 ID:T8inmjPD
>>845
ま、あと半年くらいで8.3出てくるからなあ
847NAME IS NULL:2007/01/15(月) 09:00:24 ID:tMwB6TgS
DBの項目に存在する値の種類を調べたいのですが、どのようなSQL文を打てばよいのでしょうか?
結果としては次のようなものを期待しています。

データ
id name
----------
1 hoge
2 hogehoge
3 hoge
4 saitama

SQL文の結果
name
-----------
hoge (1)
hogehoge (2)
saitama (1)

件数はあってもなくてもかまわないです。
以上よろしくお願いします。
848NAME IS NULL:2007/01/15(月) 09:16:20 ID:???
>>847
これなら分かるんだが。。。
hoge (2)
hogehoge (1)
saitama (1)
>件数はあってもなくてもかまわないです。
゚Д゚)ハッ!
select name,count(*) from table group by name
849NAME IS NULL:2007/01/15(月) 22:50:28 ID:???
件数無くてもいいなら、select distinct name from table でもいいかも。
850NAME IS NULL:2007/01/16(火) 10:32:48 ID:???
npgsqlを使用してVB.NET2003からPostgres8.2日本語版に接続中です。

tb_sampleテーブルのカラム名に
DATA_NO
data_no
というのがあり
のように大文字小文字を意識しないとDBにSQLを投げた時点で怒られてしまいます。
X:SELECT DATA_NO FROM tb_sample
◎:SELECT data_no FROM tb_sample
◎:SELECT "DATA_NO" FROM tb_sample

テーブルは大文字小文字意識する必要があったと思うのですがカラムは準拠するSQLの規格からして関係なかったように思いますが・・・
やっぱり、カラムも大文字小文字意識しないといけないのでしょうか?
851NAME IS NULL:2007/01/16(火) 11:20:20 ID:???
>>850
> tb_sampleテーブルのカラム名に
> DATA_NO
> data_no
> というのがあり
これ、大小が違うだけなんだよね?
852NAME IS NULL:2007/01/16(火) 12:00:29 ID:???
>>851
2バイト文字ではないです

あくまで半角英数のみになっています。
その上で大小が違うということです。
853NAME IS NULL:2007/01/16(火) 12:03:34 ID:???
>>850
の補足です。
言い回しが悪かったです。

//以下修正

tb_sample1テーブルのカラム名に
DATA_NO

tb_sample2テーブルのカラム名に
data_no

というのがあり
のように大文字小文字を意識しないとDBにSQLを投げた時点で怒られてしまいます。
X:SELECT DATA_NO FROM tb_sample1
◎:SELECT data_no FROM tb_sample2
◎:SELECT "DATA_NO" FROM tb_sample1

//ここまで修正

すいません、同一テーブルに同名のカラムが存在しているように見られていたことに今気づきました。
854NAME IS NULL:2007/01/16(火) 13:09:21 ID:???
>>853
create tableんときに"DATA_NO"ってくくったんじゃない?
くくると大小を区別し、くくらないと小文字と同じになるような
855NAME IS NULL:2007/01/16(火) 13:17:26 ID:???
>>854
やっぱそういうことになりますよね?
で、問題は確か準拠してるSQLの規格がカラムの大文字小文字を問わない奴だったようなきがしたから聞いてみたかったんです。
まぁ、大文字小文字を区別するのであればソフトからの利便性考えて小文字にしようかなと・・・
856NAME IS NULL:2007/01/16(火) 13:55:03 ID:???
大文字小文字を問わないのはSQLキーワードだべ
857NAME IS NULL:2007/01/17(水) 13:23:56 ID:???
>>856
アーーーッ orz

ありがとう、めちゃくちゃその一言で救われた
858NAME IS NULL:2007/01/22(月) 07:29:51 ID:aHLhnF6z
8.1.5を導入してみました。configureオプションに
UNICODEをつけてもインストール後の初期のDBはEUCになってしまいます。
initdbのときもオプションつけないとEUCに。。
(-E UNICODEつけるとUNICODEにはなる)
なんでですかね?デフォルトロケールをUNICODEにしたい。
859NAME IS NULL:2007/01/28(日) 00:56:19 ID:???
もしかしてデータ型のvarchar(n)のnって最大バイト数でなく最大文字数ですか?

文字コードによるバイト差とか気にしなくてOKですか?
860859:2007/01/28(日) 01:02:05 ID:94XmzyhW
あともうひとつ^^;

「text は最大文字数を指定する必要がありません。また、char、varchar に比べて効率が良いので、文字列を扱う場合は text の使用が勧められています。」
と書いてあるサイトを見つけたのですが、これってあってます?
文字列型は全部textでつくちゃって何か問題ないのでしょうか?
たとえばよけいな容量をくうとか、遅くなるとか・・・(根拠は何もないけど)
861NAME IS NULL:2007/01/28(日) 01:50:52 ID:???
>>859
文字数。バイト差は気にしなくて桶

>>860
文字数チェックとかパディングとか余計なことしなくていい分
text型の方が速いんじゃね。
また、バイト数じゃなくて文字数なんだから、charにしろvarcharにしろ
INSERTされるまで何バイトか判らないので、text型に比べ容量効率がいいとも思えない。

結局
varvhar = 文字数チェック付きtext
char = 文字数チェック+パディング付きtext
って俺の中で結論つけて、検証すらやってねぇ。
862NAME IS NULL:2007/01/28(日) 02:20:36 ID:???
>>859
文字数になったのは7.2からだからね。
http://osb.sraoss.co.jp/PostgreSQL/7.2/changes.html
863859:2007/01/29(月) 23:47:47 ID:JCUg+EpF
>>861
>>862
遅くなりましたが
レスどうもありがとうございます。

考えるの面倒だから^^;
TEXTにして、もし必要なら後で入力のバリデートで文字数制限してみます。

まあ、後でデータ型の変更も8以降ならわりと簡単にできそうですけど
864NAME IS NULL:2007/01/31(水) 13:42:19 ID:EuNAQDjk
こんにちは
プログラム版から誘導されてきました。

店テーブルと商品テーブルとお互いのIDを主キーにしたラインナップテーブルがあったとして
例えば商品4を扱っている店とその店が扱っている全ての商品を下のような形の配列で取得したいです。
[0]=>
[shop_id] => 1
[shop_name] => 店1
[item] => Array
[0] => Array
[item_id] => 1
[item_name] => 商品1
[2] => Array
[item_id] => 3
[item_name] => 商品3
[3] => Array
[item_id] => 4
[item_name] => 商品4
[1]=>
[shop_id] => 3
[shop_name] => 店3
[item] => Array
[0] => Array
[item_id] => 4
[item_name] => 商品4
[2]=>
[shop_id] => 6
[shop_name] => 店6
[item] => Array
[0] => Array
[item_id] => 1
[item_name] => 商品1
[1] => Array
[item_id] => 4
[item_name] => 商品4

こんな感じの多重配列を取り出したいのですが、
今のところ、一回、店テーブルから商品4を扱っている店の列を取り出した後
その配列をまわしてもう一度ラインナップテーブルにSELECTを発行して
上のような配列を得ています。

プログラム版で「内部的なSELECT回数は別としてSQL一発でいける」といわれたのですが
どのようなSQLでいけるのでしょうか?
GROUP_CONCAT()という関数を使うという話もありましたがこの関数postgreにはないですよね?
postgreでは一発で取り出せないのでしょうか?

お願いいたします。
865864:2007/01/31(水) 13:47:39 ID:???
あ、頭のスペース消されて見づらくなってるOTZ

店データの中に商品の配列がある状態です。

[shop_id] => 1
[shop_name] => 店1
[item] => Array
   [0] => Array
     [item_id] => 1
     [item_name] => 商品1
   [2] => Array
     [item_id] => 4
     [item_name] => 商品4

こんな感じです。すいません
866NAME IS NULL:2007/01/31(水) 14:34:37 ID:???
>>865
店テーブルと商品テーブルの関連がDB上でリレーションが
貼られているという前提で、

店テーブルと商品テーブルを結合してshop_idで並べ替えたSQLで
全部のデータを一回のSQLで取ってきてプログラム側で順番に
取り出して配列にする

とかじゃだめ?
867865:2007/01/31(水) 23:12:03 ID:???
>>866
レスありがとうです

ふむ〜
なるほどそれなら一回ですがちと強引な気が・・・
やっぱりpostgreでは厳しいのかな

SQL板に行ってみます。
うろうろすいません^^;

この板勢いなさ過ぎ・・・
postgreSQLはあんまり人気無いのかな?TT

おじゃましました〜
868ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. :2007/02/01(木) 00:51:05 ID:up3HpEho
テーブル名、カラム名が書いて無いので判りにくいんだけど JOIN とIN を使うのかな?

あれ?Arrayなんて使ってええの?
使っちゃいけない気がするのだが・・・
869ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. :2007/02/01(木) 00:52:04 ID:up3HpEho
ARRAYやめよう。
使用禁止。
870NAME IS NULL:2007/02/01(木) 01:55:12 ID:fAFpWpWL
>>867
オブジェクトデータベースとかになるのかな?
まあ、セオリーは全部の情報を表として取って来て
ぐるぐる回しながら格納していくんだと思う

ところで、札幌市の市場の入札システム(水産、たことか貝とかかすべとか)は
PostgreSQL使ってるよ
俺が作っただよ
871NAME IS NULL:2007/02/01(木) 07:05:13 ID:???
すみません、どこで聞いていいか分らなかったのでここで聞かせてもらいます。
C言語を使ってpostgreからのデータを構造体に格納する手法がよく分らないんですが。

以下概要

postgre、データベースのテーブル設計

テーブル名 hogetbl

項目     名称     型
front     前部     varchar(10)
rear      後部     varchar(10)
te       長さ      int(2)


C言語側

構造体

struct GH{
char front [10];
char rear [10];
int te;
};

データベースのレコード数は100件を上限に想定にしつつ
hogetbl内のデータを構造体GHへ格納したいのですが・・・。

書物で探してもCでpostgreを扱った本がほとんど見かけないので対処に困り果てています。

どうかお力をお貸しくださいませm(_ _)m
872NAME IS NULL:2007/02/01(木) 08:28:48 ID:fAFpWpWL
>>871
接続は出来るの?
列の値を取って来れるの?
先ず話はそれから?
873871:2007/02/01(木) 09:08:51 ID:???
>>872
SQLへの接続とSQL構文での値の抽出とかですか?
本に書いてあるのは、実際にしてみたりはしましたけど・・・。

というか、>>871でやろうとしているのは
postgresqlに組み込んだデータを資源として
Cでの二分探索木を行う試みなんですが。
874NAME IS NULL:2007/02/01(木) 09:27:56 ID:???
>>871
定番中の定番であるシーラカンス本にlibpqを使った例が書いてあると思うが?
今のままだと全然PostgreSQLの話題じゃない。
875NAME IS NULL:2007/02/01(木) 09:44:01 ID:???
>本に書いてあるのは、実際にしてみたりはしましたけど・・・。
したけど、どうなんだ。
Cで2分探索木ならスレ違いだろ。
876871:2007/02/01(木) 09:53:02 ID:???
>>874
あれ? そうでした?
見落としたかな?、ちょっと見直してきます。

ちなみにシーラカンス本は・・・
技術評論社
石井達夫 著
PostgreSQL完全攻略ガイド

ですよね?


>>875
871のところでどういう手法でやればいいのか
具体的なところが分らなくなって途方に暮れてたので・・。
スレ違いですいませんm(_ _)m

877ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. :2007/02/01(木) 18:45:50 ID:BE/MXAwv
Cか どうしてもCなのか?
STLコンテナのMAPとかVECTORじゃだめなのか?
自作するんか?
878871:2007/02/02(金) 02:09:47 ID:???
>>877
はい、どうしてもCです・・or2

Cのソース上にデータ書けば済むところではありますが
それをするとpostgreを使わなくなってしまいますし
libpqもあるのでC&postgreでやりたいのですが。

メタコマンド\copyでCでの取り込み用に中間ファイルを作ってからやればいいんだろうか?
出来れば中間ファイルを作らずに行いたいですが・・・うーん。
879NAME IS NULL:2007/02/02(金) 02:57:15 ID:???
>>878
とりあえず、全角半角混ざったのと、Postgreっていう略称は知能障害としか思えんからやめろ
880871:2007/02/02(金) 02:59:26 ID:???
m(_ _)m
881NAME IS NULL:2007/02/02(金) 10:52:24 ID:???
日本語でポストグレス、というのを考慮してね
Postgre で寸止めされると気色悪いw
882NAME IS NULL:2007/02/02(金) 10:56:49 ID:???
883ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. :2007/02/03(土) 00:23:15 ID:eaIOV6qU
いっそのことデーターベースにやらせたらどうだろう。
インデックス張って検索やらせるんだ。
突拍子も無いアイデアだとは思うが
884NAME IS NULL:2007/02/03(土) 01:37:52 ID:???
さすがにDBにやらせるのは無理があんべ
connect byなんかもロクにパフォーマンスでないしニガテな処理の類でそ
885ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. :2007/02/03(土) 02:06:06 ID:eaIOV6qU
皮肉で書いてるのだが
なんのためのリレーショナルDBなのやら
886NAME IS NULL:2007/02/04(日) 14:43:57 ID:???
FreeBSD + PostgreSQL8.1.4で
su -l pgsql -c "/usr/local/pgsql/bin/pg_ctl start
-l /usr/local/pgsql/data/serverlog
-D /usr/local/pgsql/data
というシェルで起動させるとDBから轢いた値が文字化けします。
-c以降を手打ちすると文字化けしません。
なぜですか?誰かエロ居人教えてください
887NAME IS NULL:2007/02/05(月) 09:30:06 ID:HV6WuwW4
8.2.2, 8.1.7, ..., 7.3.X
888NAME IS NULL:2007/02/05(月) 23:00:39 ID:gpmdvzrY
本家のページでもアナウンスし始めたな。>8.2.2その他
今回はセキュリティパッチ。
889NAME IS NULL:2007/02/06(火) 14:07:53 ID:???
あるカラムにT155B80(B)W55H78という感じのデータが入ってるんですけど
selectするときに〜 as t , 〜 as b , 〜 as w , 〜 as hとかって別々に分解して取り出すのって無理ですか?

読み出してから配列まわしてプログラムでやらないとだめでしょうか?
お願いいたします
890889:2007/02/06(火) 14:10:21 ID:GHmM0Kaz
またjaneで下げてしまいました。
sageにチェックが、デフォルトではいってるのやめてもらいたいですねOTZ

すれ汚しすいません。一応IDだしとこうと思いまして
お願い致します
891NAME IS NULL:2007/02/06(火) 15:15:35 ID:???
>>890
設定で変えられるだろ。

>>889
substring
892889:2007/02/06(火) 16:59:17 ID:GHmM0Kaz
>>891
ありがとうございます
ほぼ出来ました。

えーと
取り出したいのはT155B85(D)W57H84でたとえるなら
155
85
D
の三つなのですが
153は substring(three_size from 2 for 3) as t で
Dは substring(three_size from position('(' in t_girl.three_size)+1 for 1) で
で取り出せました。

問題は85で、ここは3桁の可能性もあります。

POSIXで
substring(three_size from 'B.*\(') as b
とかしてみたのですが
ERROR: invalid regular expression: parentheses () not balanced
と怒られました。エスケープの仕方が違うっぽいし
そもそも、これじゃあ、"B85("がマッチしちゃうから違うんですけど。

なんか良い案があったらお願いします。

そもそも、全部の数字が別カラムに入ってない時点で、設計に問題があるのですが・・・
893889:2007/02/06(火) 17:21:02 ID:???
なんどもすいません

substring(three_size from 'B[1-9][0-9]|B[1][0-9][0-9]')で
B85
まで取り出せました。
Bはどうにか出来ませんでしょうか?
894NAME IS NULL:2007/02/06(火) 17:57:17 ID:???
>>893
"B85"の2文字目から後ろを取り出すの?
もっかいsubstringすれば?
895893:2007/02/06(火) 20:00:51 ID:GHmM0Kaz
ありがとうございます

substring(substring(three_size from 'B[1-9][0-9]|B[1][0-9][0-9]') from 2)

で出来ました。
お世話になりました。

結構処理早いですね。
スリーサイズと身長とバストとヒップと全部、この処理で別項目に分けたけど
ほとんど処理する前と時間かわらなった。対象は6000件くらい。
896NAME IS NULL:2007/02/07(水) 19:10:55 ID:6/it0EpA
Wait before applying 8.1, 8.2 security release.
897NAME IS NULL:2007/02/07(水) 23:59:50 ID:MkuIhqmm
date_from - date_to で interval が帰ってきますが、
この interval を 分 に変換するにはどうすればよいでしょうか。
extract でごりごり書くのでしょうか。
898NAME IS NULL:2007/02/08(木) 08:52:33 ID:???
>>897
select (extract(epoch from timestamp date_to) - extract(epoch from timestamp date_from))/60
でどうよ。
899NAME IS NULL:2007/02/08(木) 13:07:44 ID:Ecl3eExm
Reviced Security Releas available for 8.2, 8.1, 8.0
900NAME IS NULL:2007/02/09(金) 17:27:57 ID:eSr0Uf1/
お世話になっております。

order by 〜 descでソートすると
nullが入ってる項目が最初に出てきちゃうのですが
ascの時もdescの時も後ろに出すことは出来るでしょうか?

ソートした時はnullのものは検索に引っ掛けない、という風にしていたのですが
nullのものが後ろに出た方が自然だ、という意見もありまして。

もう一度nullのものだけ検索かけて合体とか・・・イヤイヤ

簡単な方法ありましたらお願いします。
901NAME IS NULL:2007/02/09(金) 18:42:31 ID:???
902NAME IS NULL:2007/02/10(土) 11:59:09 ID:???
>>900
ソート対象のフィールドが数値で最小値が 0 以上なら >>901 でいいけど、
そうでないなら、

order by case when [xxx] is null then 1 else 0 end desc, [xxx] asc;

でいいんじゃないか。

環境無いから試せてないけど。
903900:2007/02/12(月) 01:25:39 ID:6lvwoyZe
>>901
>>902
レスありがとうございます
遅くなってすいません。

そうか、普通にorder byにもcaseかけるんですね。
ふ〜む。結構柔軟に出来てるんだなあ。
904NAME IS NULL:2007/02/13(火) 10:35:58 ID:???
>>903
俺も一瞬、おおとか思ったけど、
考えてみりゃ、CASEやら関数やらをかました
列の別名をorder byに書けるんだから、
そりゃそうか、と思った。
905NAME IS NULL:2007/02/13(火) 18:29:42 ID:???
ながいこと再起動とかvacuumとかやらずに頻繁にupdate,insertしてるんですけど
とうとうディスク容量があと2%ぐらいになってしまいましたぁ><

これは再起動とかvacuumとかでかなり容量減りそうですか?
906NAME IS NULL:2007/02/13(火) 22:11:56 ID:???
再起動してもかわらんだろ。
vacuum fullなら減るが、一時領域が必要じゃないかな。
これはもうダメかもわからんね。
907NAME IS NULL:2007/02/13(火) 22:20:09 ID:???
vacuum full出来なけりゃ
ダンプ→削除→リストア
908NAME IS NULL:2007/02/13(火) 22:42:17 ID:???
原因は>>905しかわからんからどうしようもない
909NAME IS NULL:2007/02/14(水) 11:46:36 ID:???
> vacuum full する前に一旦、vacuumのみを行なったら
その後に行なうvacuum fullは少しは短時間で完了できるものですか?
910NAME IS NULL:2007/02/14(水) 13:45:07 ID:yJifxSet
正規表現で()をエスケープするにはどうするのでしょうか?
例えば文字列の中から
(0)とか(8)とか取り出したいとき

substring(hoge from '\([0-9]\)')

とかやってみたんですけど、駄目みたいです。
お願いいたします。
911NAME IS NULL:2007/02/14(水) 14:19:51 ID:7NlKu+Xn
SQL SERVERで言う所のTimeStampみたいなものはないでしょうか?

Serialとは挙動が違うし・・・・
SQL鯖のTimeStampは行IDのようなものらしく
自動的に更新されたりする 行をユニークに保つための型っぽいんですが・・・

何に使うかというと、頻繁に同時更新が行われそうなシステムの楽観的更新に使用したいと考えています。
なので精度が極力高いようにしたいんです。
912NAME IS NULL:2007/02/14(水) 14:37:41 ID:???
>>910
substring(hoge from '\\([0-9]\\)')
913912:2007/02/14(水) 14:45:02 ID:???
途中で送ってしまった。

>>912の書式はpsqlを使った場合ね。というかほとんどの言語でもそのような書き方になるが、
一つ目の\はpsql(シェル)に対してエスケープさせているってことで。
914NAME IS NULL:2007/02/14(水) 14:52:23 ID:???
>>911
つ「bigserial」
915NAME IS NULL:2007/02/14(水) 15:08:39 ID:???
>>911
timestampだと被るの?
916NAME IS NULL:2007/02/14(水) 15:17:54 ID:7NlKu+Xn
>>914
>>915
レスサンクスです
Windows上のPostgresで処理を行うんですが
今まではSQLサーバでやっていたんです。
その時SQLサーバのTimeStampの挙動は一意になる事が保障されているようなものでした。

TimeStampだと時間になるのでWindowsの分解能に依存し、ものすごい低確率で、起きないかもしれませんが
最悪2箇所からの同時更新の際にかぶってしまう可能性が出てきますよね?
(確かLinuxだとマイクロ秒まで取得できていたかと・・・)

実際にかぶったわけではないですが、出来る限りの可能性は取り除きたくて調べていたんです。

ぶっちゃけた話、更新の時に絶対かぶらない保障があればそれこそなんでもいいということなんです。
917NAME IS NULL:2007/02/14(水) 15:26:14 ID:???
>>916
Serialなら裏でSequence使ってるから、
セッション毎に個別のシーケンス値が
割り当てられる事が保証されているはずだが。
918NAME IS NULL:2007/02/14(水) 15:40:06 ID:7NlKu+Xn
>>917
レスありがとうございます。
今一歩理解力なくてすません

ってことは・・・
楽観的更新の時、 参照した時の元の値=現在のDBの値 ならば
NextValをセット でOK?って事でしょうか?
919NAME IS NULL:2007/02/14(水) 15:55:06 ID:???
>>916
あ〜、意味をはき違えてたかもしんないwww
SerialじゃなくてSequenceで良いと思うよ。

で、SQL ServerでいうTimeStamp型の代わりに、
bigint型の列を定義して、
その列の値について
> 参照した時の元の値=現在のDBの値 ならば 
> NextValをセット
すると同時に更新用の値をそれぞれの列にセットで良いと思われ。
920NAME IS NULL:2007/02/14(水) 15:58:05 ID:7NlKu+Xn
>>919
把握!!1111111
色々回りくどく聞いて済ませんでした(;´∀`)
やってきます!ノシ
921910:2007/02/16(金) 00:25:28 ID:JCviIvwK
>>912
超遅いレスですがありがとうがとうございました。
無事出来ました。

スクリプト(PHP)内から使うと

〜 and substring(hoge from '\\\([0-9]\\\)')

になるんですね。
気づくまでちょっと時間かかりました。OTZ
922NAME IS NULL:2007/02/16(金) 00:30:54 ID:JCviIvwK
すいません
立て続けですんません
もう一つ質問です^^;

prepareしてSQLを実行するときORDER BYはプレイスフォルダに出来ないのでしょうか?

SELECT * from test order by ?
でprepareして、カラム名をバインド後実行してもソートされません。
やり方が違うのでしょうか?それとも出来ないのでしょうか?
(PHPのPDOで試してます。psqlでは試してません・・・)

お願い致します
923NAME IS NULL:2007/02/16(金) 00:40:25 ID:???
PDOのプレースホルダーは?じゃ無かったような
924NAME IS NULL:2007/02/16(金) 00:44:08 ID:???
?も使えるんだな。俺の思い込みか。
925NAME IS NULL:2007/02/16(金) 01:08:25 ID:???
>>922
PHPのPDOがどういう実装になっているか分からないけど
SQLのPREPARE文に対応している形に変換されているなら
PREPARE文で出来ないから出来ない。
そんなのPHP側で?の部分に変数埋め込んで展開すれば良いだけじゃんか。
SQL injection が、とか言うなよ。そもそもカラム名だろ。
そこに injection 可能なパラメータが来ることがあるかもしれないなら
それは設計が間違っているんじゃないかと。
926912:2007/02/16(金) 02:50:24 ID:???
>>921
そりゃ違うぞ。間違いではないがちゃんと理解してない。

$sql = "SELECT substring(hoge from '\\([0-9]\\)') FROM Table";
もしくは
$sql = 'SELECT substring(hoge from \'\([0-9]\)\') FROM Table';

これで$sqlの中身は
SELECT substring(hoge from '\([0-9]\)') FROM Table
になってバックエンドに渡される。

>>922
たぶん
SELECT * FROM test ORDER BY 'カラム名'
となってて、'カラム名'という文字列でソートしてる。
この文字列は当然不変だから意味を成さない。
基本的に"データタイプ"を指定するので、カラム名そのものを
渡すのは無理じゃないかな?
試したことないのであれだが、そのあたりは>>925に同意
927NAME IS NULL:2007/02/16(金) 08:38:02 ID:LbPZpHQw
>>922
列名ではなく列番号なら出来るかも。
やったことないけど。
928NAME IS NULL:2007/02/16(金) 10:18:33 ID:Fn+4HLpK
>>925
>>926
レスありがとう御座います。

>>925
確かに、カラム名をフォームでテキスト入力させることはないだろうし
メソッドもPOSTにするだろうしインジェクションの心配はないですよね。

また値じゃないからできないのかなあ、とも思ったんですけど
出来ないじゃなくて、必要ないって感じですか。

すっきりしました。ありがとうございます。

>>956
>$sql = "SELECT substring(hoge from '\\([0-9]\\)') FROM Table";
>もしくは
>$sql = 'SELECT substring(hoge from \'\([0-9]\)\') FROM Table';

そうですよね?最初そうだろうと思って、上の例のようにしたんですけど
エラーは出ませんでしたが意図した結果が得られなかったんです。
しかも、デバッグのために発行したSQLを画面に出してるんですけど
'SELECT substring(hoge from '\([0-9]\)') FROM Table'
と表示されました。

SQL上の正規表現の()のエスケープ自体\\(2コ)にしなきゃならないのかと思って
921の例のようにしたら、意図した結果が得られたんですけど・・・

なんか勘違いしてるかな〜
時間があったらもう一度試して見ますね。
929NAME IS NULL:2007/02/16(金) 11:25:10 ID:KW5uPsrG
作成(create等)専用ユーザと、閲覧(select)専用のユーザを作成したいんだけど、 テーブルを作成するごとに GRANT SELECT ON createdtable TO viewonlyuser するのが面倒で困ってるんだけど、なんとかならない?
930NAME IS NULL:2007/02/17(土) 17:24:03 ID:???
>>928
> メソッドもPOSTにするだろうしインジェクションの心配はないですよね。

POST とインジェクションってなんか関係あるのか?

> 出来ないじゃなくて、必要ないって感じですか。

カラム名を動的に指定することはあるけど、カラム名はシステム側で持って
るんだからから不正なカラム名ははじいておけばいいだけだ。

>>929
そんなことが面倒になるほどテーブルを頻繁に作成すると言う設計を見直す。
931NAME IS NULL:2007/02/17(土) 18:14:04 ID:???
インジェクションとCSRFの区別がついてないと思われ。
そしてPOSTにしてもCSRFは防げない。
932NAME IS NULL:2007/02/18(日) 07:48:40 ID:???
>>929
何のためにロールがあると思ってる?
933NAME IS NULL:2007/02/18(日) 13:42:21 ID:???
少なくとも>>929が望んでるもののためではないな。
934NAME IS NULL:2007/02/19(月) 18:58:07 ID:???
GRANT SELECT ON TABLE ALL TO viewonlyuser;
とかできないから無理なんだよね。
935NAME IS NULL:2007/02/19(月) 22:38:28 ID:???
>>934
ストアドで動的SQLを使えばいいんじゃね?
936NAME IS NULL:2007/02/20(火) 02:11:35 ID:sgIFKsE/
7.4を使っとります。
ODBCでAccessから操作してるんですが、PostgresqlにどのようなSQLが送られたか
知るにはどうしたらよいでしょうか。どこかのLogに残ってたりするでしょうか。

具体的には、レコードの1カラムを変更したときにレコードまるごとUpdateしてるかどうかを
知りたいのです。たぶんしてないと思うんですが、CSEってまるごとだった気がしたので。
違ったらすみません。

よろしくお願いします。
937NAME IS NULL:2007/02/20(火) 02:14:06 ID:???
>>936
server側でもODBC側でもログは取れるよ。
設定すればだけど。
938NAME IS NULL:2007/02/20(火) 02:16:10 ID:???
わぉ、ちょっぱやレスありがとうございます!
ちょっと頭悪い質問だったんで自己フォロー入れようと思ったら遅かった・・

設定を調べてみます
939NAME IS NULL:2007/02/20(火) 02:21:05 ID:???
>>938
サーバ側は
http://www.stackasterisk.jp/tech/sonomama/postgresql0b_01.jsp#5
かな。これだけで出来たっけ? なんか自分はこれだけじゃ駄目だった記憶が…

ODBC側はCOMMLOGをオンにすればC:\直下にログが出来る。
940NAME IS NULL:2007/02/20(火) 02:54:57 ID:???
できました!ありがとうございます!
とりあえず、ODBC側でログがはけましたが、サーバ側のほうが便利なので調べてみます。

ちなみにupdateは変更箇所のみでしたが、何故かwhere句で抜き打ち的に
主キー以外のいくつかのカラムをチェックしていました。
941NAME IS NULL:2007/02/21(水) 07:33:30 ID:if9xwFYZ
制作環境を全面的にUTF-8に移行させようと思っているのですが、psqlってUTF-8に対応してますか?
(今はMac/WinのSJIS+LinuxのEUC-JP)
今はLinux環境がVine3.2なのでPostgreSQLは7.4なのですが、
7.1対応の改訂第3版のシーラカンス本では、psqlはEUCなら日本語を受け付ける、とあります。
UTF-8については言及がなく、そもそも7.1ではUTF-8ではなくUNICODEという名称ですね。
$ psql hoge_db < fuga.sql
なんてやるときに、fuga.sqlがUTF-8で書かれていてhoge_dbもUTF-8で作成しているとき、
$psql --encoding UTF-8 hoge_db < fuga.sql
という感じにできればと思うんですが。(7.4ではできないみたい)
942NAME IS NULL:2007/02/21(水) 07:46:10 ID:???
>>941
こんな所にだらだらと書く時間があるならググればいいやん。
http://www.google.co.jp/search?q=PostgreSQL+UTF-8
943NAME IS NULL:2007/02/21(水) 11:37:04 ID:???
テーブルを数十万行ほど定期的に消しては入れてを繰り返したら、
だんだんクエリが遅くなっていくんだけども、テーブル削除以外で直す方法ないの?
VACUUMしても全然元に戻らない。。
944NAME IS NULL:2007/02/21(水) 12:25:04 ID:???
>>943
ワロス
945NAME IS NULL:2007/02/21(水) 15:39:42 ID:mnbRGN6m
windows のポストグレス(現在の最新版(8.21?))へLinux上(バージョンは7.43)のデータを復元したいいのですがうまくコマンドが使えません。
Linuxでpg_dumpを使ってバックアップしたファイル"a.out"を
Windows上のc:\に配置した場合
psql コマンドで
psql -e testdb > c:\a.out
としてもバックアップが復元されません・・・
ググってもコレでよさそうだし・・・・

上記のコマンド実行結果は
なぜかテーブル空間の一覧が表示されてしまいます。
もう訳ワカメラーメン
946NAME IS NULL:2007/02/21(水) 16:10:18 ID:???
>>943
つ「VACUUM FULL」


>>945
つ「不等号の向き」
947NAME IS NULL:2007/02/21(水) 16:28:49 ID:mnbRGN6m
>>946
トンクス

ごめ、こっちに書き込んだ奴の不等号間違えただけだた

psql -e testdb < c:\a.out
これは
psql -e testdb < "c:\a.out"
こうするべきなんだろうか?
むしろ""でパスくくらないと \aがコマンドに間違えられてしまって怒られるんだが・・・
画面では
postgres=# キャレット
てなってて
キャレットの位置から上にあるコマンドを打ち込んだ結果(psql -e testdb < "c:\a.out")
結果も何も出ずにまた
postgres=# キャレット
という状態です。

なにか俺カンペキに勘違いしている????
948NAME IS NULL:2007/02/21(水) 16:36:59 ID:???
>>947
>postgres=# キャレット

これはすでにpsql実行中だろ
コマンドプロンプトから実行しなさい
949NAME IS NULL:2007/02/21(水) 16:55:31 ID:???
>>947
つか>>948の指摘を解消した上で、
まだパスの問題が出るなら、

カレントドライブ、カレントディレクトリをC:\にしてから、
パラメタにドライブレターや\マークを使わないようにすれば良さ気だが?

C:\>C:
C:\>CD \
C:\>psql -e testdb < a.out
950NAME IS NULL:2007/02/21(水) 17:24:52 ID:mnbRGN6m
>>948->>949

サンクス!でけた〜!!!
コマンドライン引数に入れてやったらでけたよ
パスは"D:\a.out"
としました。

しっかしこうやってコマンドライン引数に入れるのであれば・・・・Postgresインスコした時に一緒に入ってくる
'オーナー名'へのpsql
のショートカットの使い道がわからんっす(;´∀`)
ほとんどはPgAdminでやっちゃってたから・・・・・

ともかく勘違いしてたんでスッゴイ助かりました!
951NAME IS NULL:2007/02/21(水) 17:27:27 ID:???
>>950
> 'オーナー名'へのpsql 

DB管理には便利だと思うがなwww
952NAME IS NULL:2007/02/21(水) 17:31:03 ID:mnbRGN6m

ん〜
やっぱりGUIツール使うよりコマンド覚えたほうが色々早いし融通もきくの・・・かな?
953NAME IS NULL:2007/02/21(水) 18:01:09 ID:???
>>952
とりあえず、このスレは知能の足りないお前のボヤキを書くスレではない
954ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. :2007/02/24(土) 23:32:34 ID:ocVpsDw0
前はコマンドだったけど今はアド民3どっぷり
955NAME IS NULL:2007/02/25(日) 00:22:10 ID:???
コマンドラインを使うのなら、psql だけは cygwin で make したのを使った方が良い。
mingw の psql はタブ補間も効かないし、使い物にならん。
956NAME IS NULL:2007/02/25(日) 00:47:26 ID:???
>>955
俺もWindows版のpsqlは補完が効かなくて、一時期cygwinを入れてたが、
結局pgAdmin3になっちゃった。
でも、テスト的にSQLを書くなら補完の効くpsqlは便利なんだよなぁ。
まぁ、LAN内に常時稼動しているLinux機があるから、そこにあるpsqlから
Windows機のpgsqlに接続することも可能なんだけどね。
957NAME IS NULL:2007/02/26(月) 11:19:17 ID:???
CURRENT_TIMESTAMPの時間が20分程度ずれるのですが、これはDBが稼動しているサーバの問題なのでしょうか。
958NAME IS NULL:2007/02/26(月) 17:08:40 ID:???
>>957
わかってるならサーバを時刻校正しろよwww
959NAME IS NULL:2007/02/26(月) 17:11:29 ID:???
>>958
や、サーバそのものは触れないのです。
確認のお願いをする前に確認しておこうかな..と(・ω・`)
960NAME IS NULL:2007/02/27(火) 11:13:18 ID:eiuGLXcr
外部参照について質問です。
例えば、

テーブルA
id | name
--+------
1 | ほげお
2 | ほげこ

テーブルB
id | name_id | item
--+---------+-----
1 | 1     | えんぴつ
2 | 1     | ノート
3 | 2     | 消しゴム

の二つのテーブルから、
id | name  | item
--+--------+-----
1 | ほげお | えんぴつ
2 | ほげお | ノート
3 | ほげこ | 消しゴム

のような結果を取得したい場合に、テーブルBの name_id には外部参照の制約を
つけるとパフォーマンスが上がるものなのでしょうか?
それとも単にデータ整合性が保たれるというだけのものなのでしょうか?

現在、上記の例のようなテーブルで、テーブルAのレコードのみ非同期で削除
したいという案件がありまして、外部参照の有り無しがパフォーマンスに影響
するのかしないのかちょっと不安になったので質問させてもらいました。
961NAME IS NULL:2007/02/27(火) 11:25:42 ID:???
>>957
\! でサーバ側の日時を確認すれば分かるでしょ。
962NAME IS NULL:2007/02/27(火) 18:14:14 ID:???
アデレードにサーバがあるとか
963NAME IS NULL:2007/02/27(火) 22:55:03 ID:???
>>960
上がらない。
外部参照制約をつけた状態でAのレコードを削除すると、
つけない場合より遅くなる。
B.name_idにindexをつけてやれば解決。
964NAME IS NULL:2007/02/28(水) 00:30:15 ID:Xrd/4ZND
>>960
>>963
えっ?FKにしないとJOIN出来ないんじゃないの?
勘違いしてたっぽい?

ということはFKは何のためにあるの?
登録しようとしたときエラーを出すためだけ?
965NAME IS NULL:2007/02/28(水) 00:43:35 ID:???
>>964
制約とJOINは関係ねーべ。
966960:2007/02/28(水) 09:10:06 ID:???
>>963
レスありがとうございます。
なんとなくそうじゃないかなぁと思ってたんですがこれですっきりしました。

>>964
登録のときと削除のときに、整合性がないデータはエラー判定するための
ものですかね。
そもそも数年前のバージョンでは外部参照制約使えませんでしたし。
967NAME IS NULL:2007/03/02(金) 21:51:16 ID:???
MLネタですが、色々なところで有名なhasiru.netの人はなんと言うか…
ODBCドライバのメインメンテナを相手になんてことを書いているのか。
968NAME IS NULL:2007/03/03(土) 09:10:07 ID:???
正直、あのドライバの出来なら言いたくもなる
969NAME IS NULL:2007/03/03(土) 10:45:13 ID:???
>>966
> 登録のときと削除のときに、整合性がないデータはエラー判定するための
> ものですかね。

削除の時に関連するデータを削除することもできるよ。

ようは、整合性をデータベース側で維持するための仕組みだよ。
970NAME IS NULL:2007/03/05(月) 03:22:34 ID:???
夜分失礼します。

vacuum analyzeをかけようかと思っているのですが、このオプションは
「vacuum+analyze」という認識でかけてよろしいのでしょうか。

それともvacuumはvacuumで別にかけなければならないものなのでしょ
うか。

初心者的な質問で恐れ入りますが、ご教示いただけますと幸いです。
971NAME IS NULL