トップページ⇒db
983コメント361KB

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001NAME IS NULL04/03/20 17:24ID:/Cqtf47w
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/
0002NAME IS NULL04/03/20 17:30ID:???
>1
乙
0003NAME IS NULL04/03/20 19:19ID:cQph4WXC
>>1
スレ立て乙。
0004お願いします04/03/29 15:15ID: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
0005NAME IS NULL04/03/30 16:50ID:???
予約語だ。"user"とダブルクォートで括れ。
http://www.postgresql.jp/document/pg742doc/html/sql-keywords-appendix.html
0006NAME IS NULL04/03/30 19:11ID:???
通し番号をつけるのに今は max を利用しています。

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

UPDATE t1 SET a = b, b = c;

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

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

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

point型を数値に型変換する方法がわかりません。
atan2にぶちこんで、ラジアンに変換したいんですが、とりあえず生でぶちこんでも駄目だと言われます。
何か、とても簡単な方法があるような気がするんですが、みつけられないでいます。
ヒントをいただけないでしょうか。
0012NAME IS NULL04/04/19 02:46ID:???
>>11
pがpoint型として
select atan2(p[0],p[1]) from table...
00131104/04/19 12:52ID:???
>>12
できました。
これって、他の幾何型にも使えるやり方ですね。勉強になりました。
ありがとうございました。
0014NAME IS NULL04/04/27 23:45ID:wkoq9ZT+
Postgre本スレあげ
0015NAME IS NULL04/04/28 02:27ID: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と
いうようなことを書いてあるけど、新しすぎてもだめなのかな?
だれか上手くいった人います?
0016NAME IS NULL04/04/28 04:25ID:???
テーブル作成日時とテーブル変更日時を知りたいんですが
どんなコマンドでみれますか?
0017NAME IS NULL04/04/28 16:45ID:N09xy6IO
>>16
ls(1)
0018104/04/29 02:52ID:???
新スレたててから移行まで1ヶ月か・・・
0019NAME IS NULL04/04/30 15:17ID:???
oid ってありますよね?これが最後まで行ったらどうなるんですか?
0020NAME IS NULL04/04/30 15:26ID:???
>>19
行き着いたときだったか、使い尽くしたときだったか忘れたけど、
動かなくなってしまうんじゃなかったかな。
今のところそこまで使い切ったDBは存在しないらしい。
って、ソースコードの中かリリースノートかなんかで読んだ。
開発者自身も検証していないようなコメントだった。
0021NAME IS NULL04/04/30 17:16ID:???
>>15
usogres使うならいっそpgpoolにしてみたら?
http://www2b.biglobe.ne.jp/~caco/pgpool/
http://itpro.nikkeibp.co.jp/members/ITPro/oss/20040422/2/
0022NAME IS NULL04/05/01 00:19ID:???
>>21
なるほど、これもよさげですね。
こちらを試してみます。

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

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

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

ファイルがでかいからって、lo_unlinkって5分もかかるのかなあ。
002849004/05/04 12:02ID: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.
0029NAME IS NULL04/05/04 12:03ID:???
どうちなむのだろう?
003049004/05/04 12:04ID:jR8ayW8M
まちがいました。
0031NAME IS NULL04/05/12 04:59ID:???
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のトンネルを介しています。
0032NAME IS NULL04/05/12 10:13ID:???
>>31
Oracleとかでもそうなるよ。
他のクライアントから削除、更新をすると#Deletedになるんじゃなかったかな。
で、結局回避方法は再表示(だったか再接続だったか・・・)ぐらいしか
なかったような気がする。

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

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

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

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

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

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

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

>>35
defaultを使ってます。でもその文書の記述だとinsertなどをしたときになるような感じですね…
0037NAME IS NULL04/05/17 10:13ID:???
>>36
テーブルに主キーが設定されてないとか?
0038NAME IS NULL04/05/25 18:57ID:xgZdnpwF
7.4でunicodeのデータベース使ってるんだけど、euc-jpのPHP4.3.4からpg_connectするとバケまくり。
解決方法しらないですか?
0039NAME IS NULL04/05/25 19:11ID:xgZdnpwF
pg_set_clientencodingで解決した。けど、どっか一括で設定できんのかね・・・
0040NAME IS NULL04/05/25 19:18ID:???
>>39
postgresql.conf
0041NAME IS NULL04/05/26 00:42ID:hRTK0adv
>>40
それをやるとJavaから呼び出したときに文字化けするかもしれないことがわかった。
一括設定はあきらめる。
0042NAME IS NULL04/05/26 17:57ID:???
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
です。

どなたかよいアドバイス等あったらお願いします。
0043NAME IS NULL04/05/26 18:33ID:???
>>42
のまえに、なぜ7.3.3なんだ。
せめて7.3.6に上げてみれば。
0044NAME IS NULL04/05/26 23:11ID:???
その手の問題はほとんどlocaleが原因なんだけどね。
psqlからshow all;かなんかしてlc_*がどうなってるか見てみたら?
00454204/05/27 01:14ID:???
>>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
と変えてあります・・・
00464404/05/27 11:43ID:???
>>45
ソレダ!!
lc_collateあたりは、initdbした時に決定して以降変更できないはず。
やっぱinitdbの時に--no-localeなってくれなかったように
見えるな。気の毒だけどinitdbしなおすしかないと思いマス。
00474204/05/28 05:33ID:???
>>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にアップしました。

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

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

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

CREATE FUNCTION hogehoge() returns opaque as '
BEGIN
NEW.last_access := CURRENT_TIMESTAMP;
RETURN NEW;
END;
' language 'plpgsql';
0055NAME IS NULL04/06/06 09:29ID:???
char* sql = "CREATE FUNCTION hogehoge() returns opaque as ' "
 "BEGIN "
 "NEW.last_access := CURRENT_TIMESTAMP; "
 "RETURN NEW; "
 "END; "
 "' language 'plpgsql'; "
0056NAME IS NULL04/06/07 17:02ID:???
>>54
http://www.postgresql.jp/document/pg742doc/html/triggers.html
http://www.postgresql.jp/document/pg742doc/html/spi.html
この辺の話だと思うが、諦めたほうが得策。
どうしてもやりたかったら、自力でやってみてどこまで出来たか教えれ。
0057NAME IS NULL04/06/21 17:35ID: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 すれば良いみたいなのですが、ラージオブジェクトを含むデータの場合は
どう対処すれば良いでしょうか。お知恵をお貸し下さい。
0058NAME IS NULL04/06/21 18:10ID:???
なんで7.3.4とか中途半端なバージョンなの?
0059NAME IS NULL04/06/21 19:38ID:HUxGxZ26
たまたま今の作業環境が 7.3.4 なだけで、深い意味は無いです。
7.2.1 から最新バージョン(7.4.x)への移行の問題として捉えて下さって結構です。
どなたかよろしくお願いします。
0060NAME IS NULL04/07/09 01:31ID:???
MLにひさびさに面白い方がきていましたね。
なんでしょうねあれ。
0061NAME IS NULL04/07/09 09:18ID:???
房でしょう
0062NAME IS NULL04/07/19 18:43ID:3/3kexye
文字列の場合、
 ・char
 ・varchar
 ・text
の違いがわかりません(><)
誰か教えてください。特に、charとtextの違い。
やっぱり、textの方がメモリを食うんですか?
0063NAME IS NULL04/07/19 19:15ID:???
(><)
0064NAME IS NULL04/07/19 19:46ID:???
(><)
00656204/07/19 19:56ID:???
PostgreSQLのことならここで聞け
だと思ってカキコしたら違ってました・・・(><)
dat落ちしてしまっているみたいだし・・・どうすれば・・・。
0066NAME IS NULL04/07/19 20:20ID:???
>>65
http://pc5.2ch.net/test/read.cgi/db/1056960249/
00676204/07/19 21:59ID:???
>>66
ありがとう。行ってきます。
0068NAME IS NULL04/09/30 11:17:58ID:???
こちらのスレは使われないなぁ。

俺的ブックマーク
Windows版PostgreSQL配布サイト
ttp://pgfoundry.org/
ttp://pgfoundry.org/projects/pginstaller/
0069NAME IS NULL04/11/19 10:56:55ID:???
UTF-8 で困る環境って携帯電話以外でもあるの?
0070NAME IS NULL04/11/19 16:31:44ID:???
Lモード
0071NAME IS NULL04/11/19 17:38:51ID:???
MULCOとかWebTVとか。
0072NAME IS NULL04/11/19 18:57:48ID:???
出力とDB内部がUTF8なのと直接的な関係はないぞ
0073NAME IS NULL04/11/19 19:10:52ID:???
UTF-8 だと半角カナも使いやすいのになぁ。
ISO-2022-JP じゃなきゃだめなのかぁ。
0074NAME IS NULL04/11/22 20:52:17ID:???
34321 みたいな質問はどういう風に答えたらいいのでせうか。
いやな予感がするので、レス書けません。
0075NAME IS NULL04/11/22 21:55:28ID:???
いい英和辞典でも紹介するのがよいのでは?
0076NAME IS NULL04/11/23 07:36:43ID:???
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秒づつぐらいアクセスを拒否する設定とかでもいいんだけどな。
同期がとれているんだったら。
0077NAME IS NULL04/11/23 13:11:58ID:???
>>75 ありがとう。
英和辞書を紹介したら、引き方のレクチャーもしなきゃいけない
なんてことないですか。

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

しかし、postmasterが起動しなくなったのは一体???
0112NAME IS NULL04/12/29 14:13:00ID:???
>>111
強制終了かなにかでdata/postmaster.pid のファイルが残ったまま落ちちゃったんじゃないか?
あったら消せ。
011310504/12/29 14:21:51ID:???
>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?)して
漢字入力しても同じはずだけどな。
0114NAME IS NULL04/12/29 14:24:18ID:???
>>110
なにも起こらないけど?
どうなるの?
011599、10204/12/29 14:47:10ID:???
>112
/usr/local/pgsql/dataをみましたが、そのようなファイルはありませんでした。
どうなってるんだか。
0116NAME IS NULL04/12/29 21:13:30ID:???
管理者に聞いて下さい
0117NAME IS NULL04/12/29 23:07:09ID:???
>>114
起こらないはずないよ
まぁやってみれば分かります
0118NAME IS NULL05/01/11 16:20:11ID:mtFH19Sy
CSEみたいに使いやすくてかつ
開発が続いてるクライアントアプリってないですかね?

今はCSEをだましだまし使ってる
0119NAME IS NULL05/01/12 15:03:33ID:/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です。

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

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

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

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

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

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

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

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

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

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 という環境です。
0136NAME IS NULL05/01/18 16:24:49ID:???
1操作で更新系100SQL、ピーク分1000SQL以上走るという
実装が既に腐ってるんだが。

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

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

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

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

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

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

つうか、1分に10受注って、ピーク時にもそんなに負荷はかからない、ということがいいたいのかな?
0146NAME IS NULL05/01/19 00:29:53ID:???
人気通販サイトとかの方がトランザクション多いと思うけど、
バキュームなんて日に1回程度だろ。
なんか違うところがおかしいはず。
0147NAME IS NULL05/01/19 01:00:26ID:???
>>144
PostgreSQLスレじゃなく、データモデリングに関するスレで聞いたほうがいいよ
0148NAME IS NULL05/01/19 04:29:43ID:???
>>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

テーブルの仕様が分からないと、正確な事は言えんから、残念。
014914105/01/19 10:17:38ID:???
>>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 のようにクールに書く方法はないかな、と。
0150NAME IS NULL05/01/19 10:41:50ID:???
>>144
スレ違いすみませんが
これの実装方法気になる。
この話題、別のとこで再開してるのなら誘導お願いしますー
015113205/01/19 11:42:51ID:???
私も知りたいです
0152NAME IS NULL05/01/19 11:52:08ID:???
>>149
移動位置にあるアルファベットの数字を移動するアルファベットに割り当て
それ以降(ソートによっては以前)〜移動するアルファベットの間にある数値を
+1すればよいんじゃないか?一回じゃ無理だけど。2,3回か。

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

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

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

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

で、どんなもんだろうか?
入出庫履歴にどのぐらい溜まれば、在庫量を算出するクエリが実用上問題になる時間が掛かるのかは
試してみないとわからないけど、100x60分x業務時間で5万-10万行/日ぐらいなら、何とかなりそう。
出庫(販売)前に現在庫量を調べてからって形になってたら厳しいか。
0156NAME IS NULL05/01/19 12:22:33ID:???
>>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 ) が難しくありませんか。
0157NAME IS NULL05/01/19 13:10:08ID:???
>>153
正直、RDBでそのアクセス量は捌けないと思う。
RDBはバッチ処理系だもんで、そもそもそう使い方するもんじゃないし。
(全テーブルをオン・メモリにするとかの反則はなしでね。)

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

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

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


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

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

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

移動量がいくつだろうが条件文を書けば2回のupdate分で済むと思うのだが。
もちっと頭使え。
0165NAME IS NULL05/01/19 15:01:57ID: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
0166NAME IS NULL05/01/19 15:06:14ID:g1/lbauT
PostgreSQL8.0を話題にしないのは、波田陽区に斬られるのが怖いからですか?
0167NAME IS NULL05/01/19 15:08:23ID:???
>>164
ごめん。何度読んでも素で分からないです。教えてくれますか。
0168NAME IS NULL05/01/19 15:36:58ID:???
>>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';
0169NAME IS NULL05/01/19 15:41:25ID:???
>>168
ああ、UPDATE"文"が2つってことか。
0170NAME IS NULL05/01/19 16:31:23ID:???
> update分
スマン変換ミスだ。
0171NAME IS NULL05/01/19 17:23:53ID:???
>>167
vacuumする頻度が少なくて済むようにupdate対象を少なくしたいってことか。
こっちが良く理解してなかった。148のように、ってあるからsql文を少なく
したいと勘違いしてた。スマン。

そういう条件だと、データを文字データとして一箇所に入れて、スクリプト側で
文字列操作する方法ぐらいしか思いつかない。selectの手間を考えなければ154の
リスト構造化か・・・。
017216705/01/19 18:56:33ID:???
>>171
いろいろ考えてくれてありがとうです。
0173NAME IS NULL05/01/19 19:54:45ID:???
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;

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

後者の方が早い。

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

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

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

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

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

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

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

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

『プログラマのためのSQL』で,そのやり方が紹介されていたので,
PostgreSQL でそのようにやってみたいのです.
0187NAME IS NULL05/02/02 14:59:50ID:???
current_timestamp,current_date
018818405/02/02 15:19:42ID:???
>>187
ありがとうございます!うまく行きました.
これで MySQL から順調に乗り換えられます.
0189NAME IS NULL05/02/02 22:11:15ID:???
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/のぶぶん)は何をいれても変わりません。
入力がアルファベットのみの時は問題ありません。
また、正規表現の行だけを外したら問題なく動作するのですが、
何を疑ったらいいでしょうか?
0190NAME IS NULL05/02/02 22:20:17ID:???
>>189
>何を疑ったらいいでしょうか?
terminalの文字コードだな。
UNICODEで吐き出されて北データをUTF-8で処理しようとして
バケてるんじゃないのかな。
0191NAME IS NULL05/02/02 22:35:06ID:???
>>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';
}
だとうまく行くのですが。
0192NAME IS NULL05/02/02 22:43:25ID: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}/ ){と、それに対応する}
をコメントアウトしたら、文字化けコードも大量に含みますが、
値が返って来ます。
0193NAME IS NULL05/02/02 23:02:53ID:???
>>191
UNICODE≠UTF8
0194NAME IS NULL05/02/03 00:59:55ID:???
DBはEUC-JP、ロケールはCにしといたほうが無難。
0195NAME IS NULL05/02/03 02:00:24ID:us67hi8V
ロールケーキが何だって?
019618905/02/03 04:50:07ID:???
思考錯誤の末やっと問題解決
どうも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)

ちなみに置換もだいたいこの応用(正規表現部分の書き換えだけ)で行けました。
019718905/02/03 05:10:27ID:???
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';

間違えた。こちらのすくりぷと。
いろいろ試すためにごちゃごちゃしたのつけてて、整理して貼ってたんで
余計な物まで消してしまっていた、、、、。
019818905/02/03 05:25:47ID:???
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サーバーで日本語正規表現使える事確認できたので。
おいらはこれでおわりにします。。。
019918905/02/03 05:36:00ID:???
あ、正規表現の/忘れも気づきましたが、これを加えてみても結果変わらずでした。
0200NAME IS NULL05/02/04 18:57:52ID: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になってしまいます、、、、
0201NAME IS NULL05/02/04 19:22:40ID:???
>>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)
0202NAME IS NULL05/02/05 23:39:11ID:???
=# select round((1343.0/5501),9);
    round
-------------
 0.244137430
0203NAME IS NULL05/02/07 16:00:37ID:???
INDEXについてですが、主によく検索するキー(whereで使うキー)を
INDEXとして貼りまくってるのですが、皆さんはどのような基準で貼られているか
教えていただけますでしょうか。あまり値の変化がないものに貼っても意味がないとか
いろいろ聞くのですが、いまいちピンとこないのです。
0204NAME IS NULL05/02/07 21:01:30ID:???
検索して速くなるものについて張る。
速くならないものに張ってもDML文が遅くなるだけなので張らない。
0205NAME IS NULL05/02/07 22:18:57ID:???
>>204
その基準だと、ある程度の規模になると破綻しそうだな
0206NAME IS NULL05/02/07 22:29:59ID:???
>>205
詳しく
0207NAME IS NULL05/02/07 22:39:49ID:???
どのカラムにインデックスを貼るかは
テーブルもしくはシステム全体の設計時点で決まるってことじゃないの。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

DWH系の機能がないのであれば、調査するまでもなくDWH系での利用は
時期早々ということになるかと思います。
0226NAME IS NULL05/02/12 16:01:03ID:???
フリーのであればOpenOLAPぐらいか…?
そういえば、実務で使ってる人っている?
0227NAME IS NULL05/02/12 17:19:03ID:???
フリーのプロダクトの安定性はユーザー数に単純に左右されやすいからなぁ
0228NAME IS NULL05/02/12 17:26:03ID:???
フリープロダクトの安定性は、そこにつっこまれた金額に左右されるんだよ。
0229NAME IS NULL05/02/12 18:03:08ID:???
フリープロダクトの安定性は、そこにつっこまれた手弁当に左右されるんだよ。
0230NAME IS NULL05/02/12 21:24:31ID:???
フリープロダクトの安定性は、そこに入ったMSのツッコミに左右されるんだよ。
0231NAME IS NULL05/02/13 00:36:58ID:???
フリープロダクトの安定性は、>>227-230 全てに左右されるんだよ。
0232NAME IS NULL05/02/13 01:52:07ID:???
フリープロダクトの安定性は、カワイイ娘からの応援メールに左右されるんだよ。
0233NAME IS NULL05/02/13 02:30:09ID: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はやってないです。
0234NAME IS NULL05/02/19 09:36:32ID:???
1つ質問があります。
SSH経由でpgAdminIIIからリモートのDBサーバ(PostgreSQL 8.x)に
接続することは可能でしょうか?

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

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

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

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

これを

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

という集約ができるような関数を作りたいのです.
どうかよろしくお願いします.
0238NAME IS NULL05/03/03 00:08:08ID:???
plpgsql 集約関数
でぐぐると幸せになれるよ。
023923705/03/03 10:56:30ID:???
>>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 というのがあったのですね.
不慣れなもので,見つけられませんでした.すみません.
024023705/03/03 10:58:16ID:???
お礼にはなりませんが,自分の作った関数を晴らせていただきます.
まあ,先のリンク先とほとんど同じなのですが.

-- カンマ区切りで 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);
0241NAME IS NULL05/03/03 21:13:06ID:???
>>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;
024223705/03/04 12:30:30ID:???
>>241
なるほど,配列を要素に持つ PostgreSQL ならではですね.手続き型言語によくある
配列の join 関数と同じですね.ありがとうございます.

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

0243NAME IS NULL05/03/06 22:53:34ID:???
WindowsのPostgreSQL8.0でデータの自動バックアップ出来ないかな?
0244NAME IS NULL05/03/07 00:20:46ID:???
?
0245NAME IS NULL05/03/07 00:24:51ID:???
自動バックアップのバッチ組んでタスクスケジューラで…
0246NAME IS NULL05/03/07 16:42:57ID:???
PostgreSQL 7.4.7 です。
テーブルの継承と外部キー制約についての質問です。内容はこれと同一なのですが、返信がもらえていないようです。

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

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

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

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

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

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

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

トランザクション内で処理すれば問題ないでしょ。
025425105/03/13 01:47:52ID:???
>>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 により対象範囲を
切り出す方法だと、カウントとレコードを同時に取得できるものの、無駄なレコードの転送が発生しないか
どうかが気になるのです。

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

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

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

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

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

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

先のレスに書いたけど、効率のいい方法があるなら俺も知りたい。
0263NAME IS NULL05/03/15 04:57:14ID: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 はどのようになるでしょうか?
0264NAME IS NULL05/03/15 09:30:22ID:???
>263
ID2がユニークならそのSQLでOKだがそうでないと1が3回とかでも引っかかっちゃうぞ。
ケータイなんでSQLは書かないけど普通セルフジョインだ罠。
0265NAME IS NULL05/03/15 14:43:18ID:???
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)
って単純じゃあねーな。
026626305/03/15 23:29:14ID:???
>>264
ID1 と ID2 の組み合わせでユニークです。

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

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)

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

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

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

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

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

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

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

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

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

あとそんな冗長な書きかたしなくてええ
027527105/03/18 11:22:26ID:???
>>274
ああそうか,受け手の setter の引数を,java.util.Date 型にすれば,
Timestamp 型をそのまま渡せるのですね.
困ったな,今まで気づかずに,どのメソッドも java.sql.Date 型にして
しまってます.
まあ,何とかします.ありがとうございました.
0276NAME IS NULL05/03/19 13:43:54ID:???
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 にすればうまく行きますが、
これだと、「こちらで用意した複合型を引数にさせる」と言う目的が果たせないので、、、。
0277NAME IS NULL2005/03/23(水) 11:21:48ID:1/N/aqtf
こっちでいいと思うのですが
PHPからPostgreSQLに接続したいんですが
ホストをlocalhostにして接続するとつながりません。 ホスト名を指定しなければ(空白で)繋がります。
繋がるときのリソースからホスト名を返しても空白なんですが
PostgreSQLのホスト名ってどこで指定するのでしょうか? postgresql.confの中?
0278NAME IS NULL2005/03/23(水) 12:03:55ID:???
>>277
tcpip_socket = true
02792772005/03/25(金) 09:44:18ID:iOUir/Em
>>278

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

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

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

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

0285NAME IS NULL2005/04/07(木) 18:15:53ID:???
postgresql jdbcでぐぐれば一番上に出てきませんか?
0286NAME IS NULL2005/04/07(木) 20:18:11ID: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
これと似ている状況らしいのですが、レスがついていないため
いまいち何が原因でエラーが出ているのかわかりません。
0287NAME IS NULL2005/04/08(金) 10:54:22ID:???
ご教授は出来ませんが、pg_num_rows()で行が存在するかチェックしたら?
0288NAME IS NULL2005/04/08(金) 12:02:18ID:???
>>286
pg_fetch_result()なんて使った覚えないけど、エラーが出てんなら、そうなんだろうな。
どうしてもpg_fetch_result()を使うのなら、@をつけるとか。ついでに無駄も省いて。
for ($s == 0; $s <= 100; $s++) {
   if ( ! $key=@pg_fetch_result($result, $s, 0)) break;
   echo $key;
}
02892862005/04/08(金) 16:20:35ID:???
>>287
そですね、行数を調べるのが一般的なやり方ですね。
ありがとうございます。

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

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インストール時に上書きされた気がします。)

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

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

しかし1は未だに未解決です。2が解決したので問題ないと言えば問題ないのですが、pg_dumpの結果が文字化けしまくりなのが、やはり怖い…
0293NAME IS NULL2005/04/13(水) 10:26:24ID: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
0294NAME IS NULL2005/04/13(水) 11:08:42ID:???
>>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行分の結果が返ってしまうよ。
0295NAME IS NULL2005/04/13(水) 12:02:42ID:r7emTefn
>>294
抽象的なサンプルでもうしわけないです。

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

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

まぁ、書き方と言うか、SQL9xの表記を理解した方がいいんじゃね。
0297NAME IS NULL2005/04/13(水) 23:27:06ID: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 をはじめたばかりのものです。
0298NAME IS NULL2005/04/14(木) 00:02:09ID:???
>>297
> host testdb01 all 192.168.1.2/20 trust
localhost(127.0.0.1)で接続しているとか?

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

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


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

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

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

ありがとうございました。
0302NAME IS NULL2005/04/14(木) 14:49:20ID:???
http://slashdot.jp/article.pl?sid=05/04/14/0536217&topic=113
0303NAME IS NULL2005/04/14(木) 23:57:46ID:???
質問です。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 でも同じでした。

0304NAME IS NULL2005/04/19(火) 19:24:43ID:???
質問です。
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 にでも変換するかな、と考えてます。
ただ、それでうまくいったとしても上記の問題の原因・解決法は知りたいので、
お暇な方いらっしゃったら是非ご教示お願いします。
0305NAME IS NULL2005/04/20(水) 14:36:09ID:???
>303
・変更が頻繁に起こるフィールドのインデックスを、最小値に保つことは出来ない
 と思う。(でテーブルの件数を少なくするか、逆に上限を1Gにする)
・対象フィールドを更新しないようにする(少なくする)。table構造を見直す

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

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

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

>>310
ありが�d。助かったっす。
0312NAME IS NULL2005/05/12(木) 19:14:54ID:???
http://www.postgresql.org/ftp/source/v8.0.3/
0313NAME IS NULL2005/05/14(土) 15:12:17ID:???
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を使ってます。
どなたか、解決方法をご教授していただけませんでしょうか。
0314NAME IS NULL2005/05/14(土) 19:27:25ID:I+81aSyr
ウンチ
0315NAME IS NULL2005/05/14(土) 22:39:03ID:34naW8Or
Postgres8のJDBCフォルダに3つ(2、2ee、3)がはいってるけど
WinでPathに設定するのはどれ?それともフォルダのパスをPathに設定すれば使える?
初心者すぎる質問でごめんなさい。
0316NAME IS NULL2005/05/14(土) 23:30:14ID:???
答えは

















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

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

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

1つのテーブルに2つの VIEW を作って,一方の VIEW に挿入するときと,もう
一方の VIEW に挿入するときとで,NOT NULL となるカラムを変えたいのです.
03203192005/05/27(金) 17:01:42ID:???
どうもできないようですね.よく分からないのですが,ルールは 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 になりました.

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

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

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

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

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

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

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

と解釈されます。うまい方法はないでしょうか?
0327NAME IS NULL2005/07/01(金) 19:39:58ID:pFeBRZhx
age
0328NAME IS NULL2005/07/01(金) 20:04:49ID:???
>>326
select * from t1where a like '%' || b || '%';
0329NAME IS NULL2005/07/01(金) 20:40:41ID:???
ありがと!
0330NAME IS NULL2005/07/04(月) 11:10:03ID:???
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%';

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

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

0334NAME IS NULL2005/07/05(火) 00:15:15ID:???
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文で記述することは可能でしょうか?
0335NAME IS NULL2005/07/05(火) 00:56:18ID:???
>>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にデフォルト設定してもいいけどな。
03363342005/07/05(火) 01:43:29ID:???
>>335
「no」はno1の間違いでした。すみません。
ありがとうございます、助かりました。
0337NAME IS NULL2005/07/08(金) 18:07:10ID:???
すみませんが、質問です。
「今週が誕生日」の人を取得する方法はどうしたら良いでしょうか?
PostgreSQLのバージョンは7.34 です。

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

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

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

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

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

上のコードは、8.0.1では動きますが、7.3.4では以下のエラーが出ます。
ERROR: TIMESTAMP units 'week' not supported
03403372005/07/08(金) 18:55:58ID:???
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');
0341NAME IS NULL2005/07/08(金) 19:15:07ID:???
つーかそこまで挙動が分かってるのなら問題なく組めそうなもんだが
03423372005/07/08(金) 19:39:38ID:???
私も簡単に組めると思っていたんですが…。
結局、条件文は以下のようにしました。

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

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

どなたか、2行目をPostgreSQL 7.3.4 で取得する方法をご存知の方、どうかお
教えください。
0343NAME IS NULL2005/07/08(金) 20:03:16ID:???
そもそも曜日が分かればその週がはっきり分かると思うんだが
単純に日付の範囲でいいと思われ
03443372005/07/09(土) 00:00:46ID:???
すみません、ちょっと出ておりました。
>>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
0345NAME IS NULL2005/07/09(土) 00:44:46ID:???
to_charをつかって文字列整形すればいいよ

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

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

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

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

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

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

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

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

失敗してるという事でしょうか?
0371NAME IS NULL2005/08/10(水) 14:44:34ID:???
>>370
以前makeした場所でそのままやり直したん?
make distclean
していないのジャマイカ。
0372NAME IS NULL2005/08/11(木) 11:15:51ID:???
つーか、config.log をじっくりみてごらん
0373NAME IS NULL2005/08/12(金) 00:20:52ID: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の結果をちゃんとキャストできてないバグですか?
03743702005/08/12(金) 09:44:21ID:???
>>371 & 372

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

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

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

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

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

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

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

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

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

このままではディスクが溢れてしまいます。
どなたか原因に心あたりのあるかたはいませんでしょうか。
バージョンは7.2.7です。
0397NAME IS NULL2005/09/03(土) 13:58:51ID:???
>>396
reindex してみたら?
03983932005/09/07(水) 03:41:53ID:Ew4HgFdN
394,395さんありがとうございます。
PostgreSQL7.4.8でやってみようと思います。ちなみにPostgreSQL専用のアカウント
の作成方法がわかりません(><) いちおー、CUIでやりたいと思うのですが…
0399NAME IS NULL2005/09/07(水) 14:13:22ID:???
>>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系と呼ぼう、
ってだけの話だ。
0400NAME IS NULL2005/09/07(水) 22:02:54ID:h4DOps4+
>>398
ここ、
http://www.entropy.ch/software/macosx/postgresql/
参考にしてみれば。
0401NAME IS NULL2005/09/17(土) 11:56:34ID:???
windows版 8.0.0で、日本語の単語(名詞動詞形容詞副詞etc)をつっこんでるんですが、
varchar(20)のカラムにインデックスをcreateしようとすると6時間とか掛かるんですが、
これって正常な動作なんでしょうか?

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

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

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

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

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

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

create table example (
 a int,
 c int
);

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

alter table example add b int after a;

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

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

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

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

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

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

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

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

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

x
-
2
3

としたいんです。y != 'c' では複数行なのでダメで…。
0418NAME IS NULL2005/10/12(水) 19:29:16ID:???
>>417
あまり自身はないが。。。これでいいのかな?
select distinct x from test
where x not in (select x from test where y = 'c');
04194182005/10/12(水) 19:36:11ID:???
きゃあ。s/自身/自信/g
過疎スレで何やってんだか。。。orz
0420NAME IS NULL2005/10/12(水) 19:43:45ID:???
きゃあ。早速ありがとう。OK でした!
0421NAME IS NULL2005/10/14(金) 11:44:58ID:???
>>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固有の話ではないわけだが。
04224172005/10/14(金) 17:11:42ID:???
>>421
URL までありがとう。勉強する。
0423NAME IS NULL2005/10/15(土) 01:21:41ID:???
>>421
417じゃないけどそのURLは勉強になった。サンクス。
0424NAME IS NULL2005/10/15(土) 01:24:00ID:???
PostgreSQLには通じない内容もある。
勉強がてらに検証するのもいいがな。
0425NAME IS NULL2005/10/15(土) 01:29:13ID:???
確かに。参考にしつつもexplainじゅーよーだな。
6 の count(pkey) は MySQL だと遅いらしいし。
0426NAME IS NULL2005/10/15(土) 01:50:52ID:???
>>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になってる、なんてのはよくあることだ。
04274212005/10/15(土) 02:19:28ID:???
>>426
素晴らしい!大変参考になった。ありがとう。
しかし、私が今のプロジェクトで使っている PostgreSQL は 7.3 なのだ。
喜んだらいいのか悲しんだらいいのか。
0428NAME IS NULL2005/10/15(土) 15:40:59ID:???
>>322
>>320のサンプルコードをぜひ!!
お願いします。
04293222005/10/15(土) 18:46:05ID:???
運良く、手元に例のサンプルコードがありました。貼らせていただきます。

-- -------------------------
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);
04303222005/10/15(土) 18:46:53ID:???
/* 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, 'ほげほげ');
04313222005/10/15(土) 18:52:09ID:???
>>428
以上です。
半年近く経ってからお求めになる方がおられるとは、大変うれしいです。
04324282005/10/17(月) 08:49:28ID:???
>>431
大変参考になりました。
自分が今抱えている問題を解決する糸口がつかめました。
本当にありがとうございました。
0433NAME IS NULL2005/10/18(火) 21:49:26ID:???
[pgsql-jp: 36186]
宮内の物言いムカつくんだけど。
0434NAME IS NULL2005/10/18(火) 22:13:12ID:???
>>433

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

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

これだけ時間使ってたら他のことできるだろうに、馬鹿な奴。
0442NAME IS NULL2005/10/20(木) 18:39:26ID:???
宮内、ぐちゃぐちゃ言われた後のレスは明らかに口調が違うんだが。
0443NAME IS NULL2005/10/20(木) 23:54:47ID:???
重複を削除した 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
で欲しい結果が出るのですが、もっといい正攻法のようなやり方はありますか?
0444NAME IS NULL2005/10/21(金) 02:44:18ID:???
>>443
それでいいんじゃね。

DISTINCT ON は重複削除の時にソートを必要とするので、
そのソートされたときの頭だしをおまけ的にやっているわけで、
別の列でソートするなら結局再ソートが必要なんで、結局
貴方が書いたSQL(サブクエリ内で重複削除後に外のクエリでソート)になる。
0445NAME IS NULL2005/10/26(水) 21:04:44ID:???
停電で電源が落ちた後再起動し
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です
0446NAME IS NULL2005/10/26(水) 21:10:03ID:???
Is the postmaster running ?
Is the postmaster running ?
Is the postmaster running ?
04474452005/10/26(水) 21:15:07ID:???
/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.

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

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

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

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

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

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

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

という無料のメールサービスみたいですよ。
0470NAME IS NULL2005/11/16(水) 12:22:03ID:???
>>469
俺にとっては括弧良くない
0471NAME IS NULL2005/11/16(水) 13:01:30ID:???
man su
0472NAME IS NULL2005/11/16(水) 13:45:57ID:???
あー、やっぱりコンパイル段階での問題なのかな。
0473NAME IS NULL2005/11/16(水) 14:45:53ID:???
まずgoogle教えてやればよかったのにw
0474NAME IS NULL2005/11/17(木) 06:28:51ID:029n4mvn
もう彼の存在そのものがネタ扱いですか
0475NAME IS NULL2005/11/17(木) 09:55:52ID:???
宮尾とか宮内とかわかりにくい。
0476NAME IS NULL2005/11/17(木) 20:31:21ID: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
です
0477NAME IS NULL2005/11/18(金) 19:20:31ID:???
石井タンのこれ↓

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

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

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

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

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

インストールの前にこれやっとけばいい。
インストール中にユーザー作ったりもするが前もって
やっといたほうがめんどくさくなくていい
0484NAME IS NULL2005/11/30(水) 16:50:11ID:???
インストール中にユーザー作るほうがらくだと思う・・・
ただユーザー管理が頭にないhomeエディションでこれはきついんだよね
0485NAME IS NULL2005/12/01(木) 15:15:35ID:???
>>482-484
レス有難うございます。cygwin上でcygIPCを入れてやってみたいと思います
0486NAME IS NULL2005/12/01(木) 15:52:32ID:???
cygwinいらないでしょ、まあやってもいいけど
0487NAME IS NULL2005/12/01(木) 15:56:15ID:???
cygwin使ったほうがトラブル多いようだが
0488NAME IS NULL2005/12/01(木) 16:12:38ID:???
ネイティブ版を使えばいいのにねぇ。日本語インストーラもあるし。
0489NAME IS NULL2005/12/01(木) 18:45:17ID:???
cygwinまじいらね
0490NAME IS NULL2005/12/01(木) 18:53:40ID:???
アカウントアカウントってわずらわしいし、サービスに登録されたがろうとするから、
おいらはcygwinのままでいいや。
0491NAME IS NULL2005/12/02(金) 02:35:27ID:???
べつにわずらわしくないよ
postgresってユーザー作ります、よろしいですか?ときかれるだけだし
0492NAME IS NULL2005/12/02(金) 11:34:36ID:???
upgradeじゃなくて、新規のPCに一からインストールしてみた。
何の問題もなかった、、、引っかかる人はどこでひっかかるのか。
postgresユーザーに権限与えすぎるとまずかったり、サービスを
実行するユーザーになれないとかみたいだが、、、
ファイヤウォールとかがわるさしてんのかねえ
0493NAME IS NULL2005/12/02(金) 12:11:16ID:???
おまえら、助けてください。
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;

どうなおせば良いかヒントください。エロイ人。
0494NAME IS NULL2005/12/02(金) 14:37:54ID:???
>>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での動作確認は、全く行なっていません。また、行なうことも出来ません。
0495NAME IS NULL2005/12/02(金) 14:42:16ID:???
NT!
04964932005/12/02(金) 19:34:00ID:???
(ノ_・。)
0497NAME IS NULL2005/12/02(金) 22:41:17ID:???
>>485
cygipcって何年前の話だか……
0498NAME IS NULL2005/12/02(金) 23:24:14ID:???
粘着カキコキター(・∀・)
0499NAME IS NULL2005/12/02(金) 23:30:45ID:???
ファイヤウォールとかがわるさしてんのかねえ
05004932005/12/02(金) 23:48:12ID:???
�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の日付/時刻型」の精度の差が原因だったみたいです。
0501NAME IS NULL2005/12/03(土) 00:17:13ID:???
>>497
エンドユーザーなりに
せめてその場の空気くらいは読めるようになろうぜ
0502NAME IS NULL2005/12/05(月) 00:53:53ID:???
current_timestamp::timestamp(0)
0503NAME IS NULL2005/12/05(月) 14:42:24ID:???
過去のアーカバイブから
0504NAME IS NULL2005/12/27(火) 22:56:11ID:???
最近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';

長文になり申し訳ないのですが、よろしくお願いします。
0505NAME IS NULL2005/12/28(水) 01:37:22ID:???
| 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してるのは理解できが
その条件がキーっぽいと言うかコードでは意味がない気がするが
0506NAME IS NULL2005/12/28(水) 02:57:54ID:???
>>505
有り難うございます。これで動きました。

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

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

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

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

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

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

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


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

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

なんてのがありましたか。どうもありがとうございます。とっても助かりました。
0517NAME IS NULL2006/03/03(金) 13:37:05ID:???
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のクエリーエラーの一覧があるサイトや書籍がありましたらご紹介ください。
0518NAME IS NULL2006/03/14(火) 18:18:23ID:???
エラーメッセージに関してまとまったことを書いたとこがみつからないねえ
ソース探したら、英語以外は po ファイルにまとまってんだね。
中国語や韓国語もあるけど日本語無いんだね。

まあエラーメッセージが文字コード違いの日本語で出ると
面倒だからなあ。Oracleで????ばっかりのメッセージをよく見るしな
0519NAME IS NULL2006/03/19(日) 18:55:12ID:gv0TLlVc
[pgsql-jp: 36898] のような $body$ って一般的?
普通は '' でくくると思うんだけど、初めて見たよ。
0520NAME IS NULL2006/03/21(火) 01:04:57ID: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)
0521NAME IS NULL2006/03/21(火) 10:59:24ID: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)
0522NAME IS NULL2006/03/21(火) 17:24:44ID:???
Windowsの8.0でUnicodeをにすると、インストールの時、なんかメッセージでなかったか?
0523NAME IS NULL2006/03/21(火) 17:52:38ID:???
インストール時はちょっと覚えてないですけど 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 でデータベース作るとちゃんと日本語も引っかかるのになぁ。
0524NAME IS NULL2006/03/21(火) 17:57:07ID:???
Winの8.0ではUnicodeは使うな
0525NAME IS NULL2006/03/21(火) 17:58:46ID:???
つ ttp://www.postgresql.jp/wg/jpugdoc/FAQ_windows.ja.html#2.6
0526NAME IS NULL2006/03/21(火) 18:01:33ID:???
了解しますた (゚∀゚)ノ
0527NAME IS NULL2006/03/21(火) 18:03:40ID:???
DBのエンコードにunicode+winで8.0ずっと使ってるけど問題は出てないな

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

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

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

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

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

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

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

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

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

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

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


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

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

やりたいこと。
1.通信はhttpのみ。
2.クライアントはサーバにアクセスして、
 「特定テーブルのCSV出力」を命令する。<--------------(・ω・)
3.クライアントは処理の終了を待つ。
4.クライアントは出力されたCSVファイルをダウンロードする。
0583NAME IS NULL2006/04/28(金) 16:13:08ID:???
>>582
クライアントがストアドプロシージャを直接キックするん?
0584NAME IS NULL2006/04/28(金) 17:22:25ID:???
>>583
「そのようにせよ」と指示を受けました。
自分としてはADO.NETを介しても問題ないとは思うのですが...。
0585NAME IS NULL2006/05/05(金) 16:48:00ID:???
>>582
もしストアードプロシージャを使うとして、クライアントから来たHTTP通信を受けるのは
誰なんだ? postmasterにそんな機能はないぞ。
0586NAME IS NULL2006/05/08(月) 13:27:34ID:???
>>582
CSV出力するphpを作り、クライアントからそいつにアクセスする。
phpじゃなくてもいいけど。
0587NAME IS NULL2006/05/11(木) 22:31:00ID:???
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
0588NAME IS NULL2006/05/12(金) 09:32:55ID:???
いつも PostGreSQL って書いてるけど何か言いたいことある?
0589NAME IS NULL2006/05/12(金) 21:15:45ID:???
グレないでください。
0590NAME IS NULL2006/05/25(木) 21:19:56ID:rseeNcuL
PostgreSQL 8.1.4にageたらエラーでまくりなんだけど。地雷踏んじゃったかなorz
0591NAME IS NULL2006/05/25(木) 23:26:32ID:???
>>590
かなり込み入ったシステムでばーうpしたけど、無問題。
どんなエラーか知らんけど、おまいの作ったモノの方がおかしいんでないか?
05925902006/05/26(金) 00:06:36ID:???
>>591
一応原因がわかった

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

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

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

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

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

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

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

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

OS:CentOS 
バージョン:PostgreSQL 8.1.3

以上です。よろしくお願いいたします。
0605NAME IS NULL2006/06/06(火) 15:22:11ID:???
窃盗OSを使ってるような奴は、質問するときもマルチ。
0606NAME IS NULL2006/06/06(火) 15:34:49ID:???
よそのスレから移動したんだからいいんじゃね?
0607NAME IS NULL2006/06/06(火) 16:07:29ID:???
というか、pgsql-jp: 37115への返信はしないのか?
06086042006/06/06(火) 16:18:04ID:???
>>607
的外れなレスに返信する必要があるとは思えませんでしたので。
0609NAME IS NULL2006/06/06(火) 16:42:10ID:???
さすが盗人クオリティw
0610NAME IS NULL2006/06/06(火) 16:43:36ID:???
>>601
オレまだ7.2系使ってるんだけど、どうしたらいいの・・・?
今年中くらいにリプレイスの予定だったんだけどなぁ。
はぁ。。。
0611NAME IS NULL2006/06/06(火) 16:46:51ID:???
SJIS使わなきゃいいだけ。
プレースホルダー使えばいいだけ。
0612NAME IS NULL2006/06/06(火) 16:53:56ID:???
SJISを使いたがるPG自体がセキュリティホールみたいなもんだよなぁ
0613NAME IS NULL2006/06/06(火) 17:03:16ID:???
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

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

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

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

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

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

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

0623NAME IS NULL2006/07/01(土) 02:02:03ID:???
ココ電逝ったああああああああああああああああああ
0624NAME IS NULL2006/07/01(土) 02:03:07ID:cSX6hSFp
ココ電逝ったああああああああああああああああああ FROM 市況1より愛をこめて
0625NAME IS NULL2006/07/01(土) 02:03:21ID:???
おいおいなんでココ電がこんなとこに
0626NAME IS NULL2006/07/01(土) 02:03:39ID:GrSHDerV
ココ電いったぁ?
市況版より
0627NAME IS NULL2006/07/01(土) 02:03:46ID:???
ココ電逝ったあああああああああああああああああああああああああああああああ
0628NAME IS NULL2006/07/01(土) 02:04:00ID:???
すいませんお騒がせしました
>>623-627
さぁ森へ還ろう
0629NAME IS NULL2006/07/01(土) 02:04:03ID:Qe/njGR0
ココ電逝ったああああああああああああああああああああああああああああああああああ阿
0630NAME IS NULL2006/07/01(土) 02:04:11ID:RlbL4Q/Q
ココ電だたら、舌かんで死ぬ
↓
0631NAME IS NULL2006/07/01(土) 02:04:38ID:Q9DHHByP
ココ電球さんですか?

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


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

278 ココ電球(∩T∀T)  ◆tIS/.aX84. New! 2006/07/01(土) 02:04:51 ID:7nlUZFjU
てめえら 書き込むなつうのに
0637NAME IS NULL2006/07/01(土) 02:05:57ID:???
ココ電逝ったああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ阿
0638NAME IS NULL2006/07/01(土) 02:06:03ID:???
ココ電逝ったぁぁぁぁああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
0639NAME IS NULL2006/07/01(土) 02:08:08ID:???
誰か>>622の質問分かる人答えてやって下さい
ココ電は株で大損した不幸な女子高生です
0640NAME IS NULL2006/07/01(土) 02:09:08ID:Q9DHHByP
53歳の女子高生ですがw
0641NAME IS NULL2006/07/01(土) 02:12:42ID:RLoIh/h1
ココ電は看板に名前がのってる有名な市況1板のマスコット的な存在です。
ココちゃんをよろすく。。。
0642NAME IS NULL2006/07/01(土) 02:15:16ID:???
ココ電逝ったあああああああああああああ!!!!!!
0643NAME IS NULL2006/07/01(土) 02:16:16ID:???
ココ電が持ってた株です
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
こんなことになっちゃいました
0644ココ電球(∩T∀T)  ◆tIS/.aX84. 2006/07/01(土) 02:16:29ID:8EUWdSXu
書き換えは当然commitを含みます。
MVCCを考慮してみてください。
0645NAME IS NULL2006/07/01(土) 02:17:22ID:Q9DHHByP
ココ電球は当然入金を含みます。
再就職を考慮してみてください。
0646NAME IS NULL2006/07/01(土) 02:20:08ID:???
ココ電逝ったああああ!
0647NAME IS NULL2006/07/01(土) 02:20:09ID:cSX6hSFp
株で大損物故板ココ電さんがフリーのデータベースを物色中とな
救ってやれよ
0648NAME IS NULL2006/07/01(土) 02:24:57ID:Q9DHHByP
しかし、ココ電球は相変わらず人気あるな。
どなたかココちゃんに教えてやってください。おながいします。
0649NAME IS NULL2006/07/01(土) 02:26:33ID:1BXR4Dua
>>622
DBだけで普通に考えると更新後の結果が取得できて当然
0650ココ電球(∩T∀T)  ◆tIS/.aX84. 2006/07/01(土) 02:37:20ID:8EUWdSXu

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

とりあえず、PostgreSQLなりで色々やってみては?
もう少し、自分なりに調べて勉強してみたほうがよろしい。
0678NAME IS NULL2006/07/09(日) 06:52:51ID:???
>>677
Oracle はそういったベンチの公開を禁止しているんじゃなかったっけ?
0679NAME IS NULL2006/07/15(土) 02:41:52ID:???
ポストグレスではMySQLについてるAES関数のような暗号化関数は無いのでしょうか?
0680NAME IS NULL2006/07/18(火) 15:56:58ID: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
0681NAME IS NULL2006/07/18(火) 16:02:14ID:???
>>680
「SQL BETWEEN」なりで検索するといいよ。
0682NAME IS NULL2006/07/18(火) 16:46:27ID:7etx55f4
>>681
お答えありがとうございます。

分からないのはBETWEENでは無く、日付なんです。
SELECT pubtime FROM article WHERE ?? BETWEEN 2005-08-27 AND 2005-08-28 ;
??の部分と日付の指定の仕方がよく分かりません。
もしお分かりでしたら、教えてください。
ヒントや解説のぺージでもけっこうです。
0683NAME IS NULL2006/07/18(火) 16:54:57ID:???
>>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 のものしか含まれないけど。
0684NAME IS NULL2006/07/18(火) 17:04:48ID:7etx55f4
>>683
ありがとうございます。
「'」単純にが抜けてましたorz...

お手数おかけしました。
0685NAME IS NULL2006/07/18(火) 20:29:06ID:???
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)

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

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

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

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

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

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

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

ERROR: missing chunk number 0 for toast value 8902358

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

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

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

 ・
 ・
 ・

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

0705NAME IS NULL2006/08/10(木) 21:04:32ID:???
なんでポストグレスキューエルはMySQLより人気無いの?
0706NAME IS NULL2006/08/11(金) 10:42:13ID:???
安定してないから。
実績がないから。
MySQLで充分だから。
グレスケはBSD厨と間違われそうで嫌だから。
グレスケは一時Red Hatが後押ししてたから。
0707NAME IS NULL2006/08/11(金) 14:58:46ID:???
読みにくいから。
0708NAME IS NULL2006/08/13(日) 02:15:23ID: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ループってものすごく遅いのでしょうか。


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

あと、もう運用しているのでテーブル設計はやりなおせません。
0709NAME IS NULL2006/08/13(日) 02:27:32ID:???
そもそもなんで関数になってんのか意味不明
とりあえずexplainの結果をだせ
0710NAME IS NULL2006/08/13(日) 02:45:33ID: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かかる

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

0713NAME IS NULL2006/08/13(日) 03:08:42ID:OMR6/0y3
>>711

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

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


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

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

schema with OID 5118787 does not exist

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

バックアップできないだけで、その他は正常に動いているようなのですけど。
同じ症状でDB崩壊の予兆なんていう不気味な書き込みもありましたが、
直し方ご存知の方おりましたら教えてください。
0721NAME IS NULL2006/08/21(月) 11:16:12ID:???
>>720
schema だけと、データだけをダンプするとどうなる?
--schema-only と --data-only ね。
07227202006/08/21(月) 12:17:29ID: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からやりました。
07237202006/08/21(月) 12:30:56ID:iNhabLLZ
Postgresqlのバージョンは7.4です。
07247202006/08/21(月) 12:49:04ID:iNhabLLZ
720
連続の書き込みごめんなさい。
レンサバの管理者に連絡したら、3日前のバックアップが
あるということなので、被害が広がらないうちにこれで
復旧することにしました。
本当は今の状態から復旧できるのがありがたいのですが、
>>721番さん、助けてくれてありがとうございました。
0725NAME IS NULL2006/08/21(月) 14:09:22ID:???
あらら、けっこう切羽詰ってたんですね。
0726NAME IS NULL2006/09/05(火) 19:04:20ID:???
>>722
それ、スキーマの大文字、小文字を区別してることに気が付かなかったとかじゃ…。
0727NAME IS NULL2006/09/11(月) 04:32:56ID:???
皆様 おはようございます
最近、会社に行く前に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の間の売り上げが一番よかった日を探すことなども可能でしょうか?

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

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

早速いろいろ実験してみます
0730NAME IS NULL2006/09/11(月) 16:34:15ID:???
http://itpro.nikkeibp.co.jp/oss/index.html
0731NAME IS NULL2006/09/12(火) 19:43:59ID: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万件のテーブルから数件を取り出すのに、数分待っても応答無し)
0732NAME IS NULL2006/09/12(火) 23:39:08ID:???
>>731 ANALYZE はしたか? EXPLAIN も晒せ。
07337312006/09/13(水) 13:34:07ID:???
>>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しても両者とも全く同じです。
スレ汚しすいませんでした。
0734NAME IS NULL2006/09/13(水) 13:56:38ID:???
ANALYZE前にEXPLAINすれば違いがわかったのにw
0735NAME IS NULL2006/09/13(水) 13:57:27ID:???
おそらく
>違うインデックスが使われていた
んじゃなくて、seq scan だったんだろう
0736NAME IS NULL2006/11/16(木) 17:28:57ID:???
DB内の全てのテーブルにまとめて同じ権限を与えたりする方法って無いですか?
GRANT ALL ON * TO user;
の様なことが出来れば良いんですけど・・・
0737NAME IS NULL2006/11/24(金) 17:49:29ID: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)です。
0738NAME IS NULL2006/11/24(金) 18:00:19ID:???
>>737
日本語でおk

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

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

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

そういうことを言ってるんじゃないなら、スルーよろ。
0739NAME IS NULL2006/11/24(金) 23:22:38ID:???
質問です。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とかになりますよね?)
0740NAME IS NULL2006/11/25(土) 03:12:46ID:???
>>739
>例えばAさんが4つのデータ、Bさんが6つのデータを同時に入力しよう

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

まで読んだ
0763NAME IS NULL2006/12/11(月) 13:44:13ID:???
>>762
種馬ディープインパクトが羨ましい
まで読んだ
0764NAME IS NULL2006/12/11(月) 18:30:57ID:???
>>761
UTF-8が使えるならいかなる犠牲を払ってでも使うべし。
シフトJISは悪魔のコード系。
0765NAME IS NULL2006/12/11(月) 18:44:25ID:???
>>761
容量なんて気にしない。半年もすれば改善される。
0766NAME IS NULL2006/12/11(月) 18:46:48ID:???
UTF で Mac と Win と UNIX の違いを吸収してくれるライブラリがほしい
0767NAME IS NULL2006/12/11(月) 21:42:15ID:???
UTF-8の使用に支障があるOSは排除
0768NAME IS NULL2006/12/11(月) 21:59:38ID:???
EUCでいいじゃん。
0769NAME IS NULL2006/12/11(月) 22:31:06ID:???
EUCに固執する奴は修正主義者のブルジョア反革命分子
0770ココ電球(∩T∀T)  ◆tIS/.aX84. 2006/12/11(月) 23:07:59ID:3tBKtZRs
UTFは不具合あるから使っちゃだめよ。
ユニコード問題でぐぐれ
0771ココ電球(∩T∀T)  ◆tIS/.aX84. 2006/12/11(月) 23:10:06ID:3tBKtZRs
>>766
コネクションで変換してクライアントもサーバーも内部は勝手なコーディングで組むのが普通。
なんでごっちゃになるのか判らん
0772NAME IS NULL2006/12/11(月) 23:56:19ID:???
UTFを嫌う奴はたいていキチガイ
コテハンもたいていキチガイ
0773NAME IS NULL2006/12/12(火) 10:55:18ID:???
>>761 の質問はDB関係無いとしか思えん
Webprogの板でもいけば
0774NAME IS NULL2006/12/14(木) 07:10:03ID:???
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;";』の部分が
正しくないのかなと考えているのですが…
長文ですみませんが、アドバイスお願い致します。

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

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

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

     :

create index table_idx on table(no);

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

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

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

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

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

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

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

原因は、私が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)
0789NAME IS NULL2006/12/16(土) 12:37:32ID:???
んで、SELECTの時間はどれくらいになりました?
07907802006/12/16(土) 13:35:25ID:???
>>789
1分以上かかってたのが、1秒かからなくなりました。

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

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

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

よくワカランかったら、インストールまでして今まで通りのオプションをつければいいんじゃね。
0808NAME IS NULL2006/12/31(日) 10:34:06ID: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の日本語問題)について
詳しく記載されているサイトなどありましたら教えて頂けないでしょうか?
よろしくお願いします。
08098082006/12/31(日) 10:36:05ID:7k+gGJn4
補足です。
PostgreSQLのバージョンは7.4.13で
CentOSでrpmのものをインストールしました。
0810ココ電球(∩T∀T)  ◆tIS/.aX84. 2006/12/31(日) 12:02:16ID:+YaIr0XC
エンコーディング直せないからDB作り直したけど
0811NAME IS NULL2006/12/31(日) 13:13:11ID:???
initdbする前にDBあったんじゃない?
消してつくり直してみては
0812NAME IS NULL2006/12/31(日) 18:13:50ID:???
>>807
ありした〜

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

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

何か気をつける事とか、ありますでしょうか?
0815ココ電球(∩T∀T)  ◆tIS/.aX84. 2007/01/05(金) 22:56:40ID:+zslfGUn
さば缶のことは知らないけどDATAフォルダーをコピーするのは違うと思うな
バックアップデーターとってないの?
0816ココ電球(∩T∀T)  ◆tIS/.aX84. 2007/01/05(金) 22:57:49ID:+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 をつけないとだめなようです。
08178142007/01/06(土) 08:38:26ID:WKYcCNZ9
>>ココ電球(∩T∀T)  ◆tIS/.aX84様

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

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

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

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

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

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

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

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

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

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

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

件数はあってもなくてもかまわないです。
以上よろしくお願いします。
0848NAME IS NULL2007/01/15(月) 09:16:20ID:???
>>847
これなら分かるんだが。。。
hoge (2)
hogehoge (1)
saitama (1)
>件数はあってもなくてもかまわないです。
゚Д゚)ハッ!
select name,count(*) from table group by name
0849NAME IS NULL2007/01/15(月) 22:50:28ID:???
件数無くてもいいなら、select distinct name from table でもいいかも。
0850NAME IS NULL2007/01/16(火) 10:32:48ID:???
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の規格からして関係なかったように思いますが・・・
やっぱり、カラムも大文字小文字意識しないといけないのでしょうか?
0851NAME IS NULL2007/01/16(火) 11:20:20ID:???
>>850
> tb_sampleテーブルのカラム名に
> DATA_NO
> data_no
> というのがあり
これ、大小が違うだけなんだよね?
0852NAME IS NULL2007/01/16(火) 12:00:29ID:???
>>851
2バイト文字ではないです

あくまで半角英数のみになっています。
その上で大小が違うということです。
0853NAME IS NULL2007/01/16(火) 12:03:34ID:???
>>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

//ここまで修正

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

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

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

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

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

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

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

まあ、後でデータ型の変更も8以降ならわりと簡単にできそうですけど
0864NAME IS NULL2007/01/31(水) 13:42:19ID: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では一発で取り出せないのでしょうか?

お願いいたします。
08658642007/01/31(水) 13:47:39ID:???
あ、頭のスペース消されて見づらくなってる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

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

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

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

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

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

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

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

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

ところで、札幌市の市場の入札システム(水産、たことか貝とかかすべとか)は
PostgreSQL使ってるよ
俺が作っただよ
0871NAME IS NULL2007/02/01(木) 07:05:13ID:???
すみません、どこで聞いていいか分らなかったのでここで聞かせてもらいます。
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
0872NAME IS NULL2007/02/01(木) 08:28:48ID:fAFpWpWL
>>871
接続は出来るの?
列の値を取って来れるの?
先ず話はそれから?
08738712007/02/01(木) 09:08:51ID:???
>>872
SQLへの接続とSQL構文での値の抽出とかですか?
本に書いてあるのは、実際にしてみたりはしましたけど・・・。

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

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

ですよね?


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

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

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

メタコマンド\copyでCでの取り込み用に中間ファイルを作ってからやればいいんだろうか?
出来れば中間ファイルを作らずに行いたいですが・・・うーん。
0879NAME IS NULL2007/02/02(金) 02:57:15ID:???
>>878
とりあえず、全角半角混ざったのと、Postgreっていう略称は知能障害としか思えんからやめろ
08808712007/02/02(金) 02:59:26ID:???
m(_ _)m
0881NAME IS NULL2007/02/02(金) 10:52:24ID:???
日本語でポストグレス、というのを考慮してね
Postgre で寸止めされると気色悪いw
0882NAME IS NULL2007/02/02(金) 10:56:49ID:???
サンプルってこういうの?
ttp://www.postgresql.jp/document/pg721doc/programmer/libpq-example.html
0883ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. 2007/02/03(土) 00:23:15ID:eaIOV6qU
いっそのことデーターベースにやらせたらどうだろう。
インデックス張って検索やらせるんだ。
突拍子も無いアイデアだとは思うが
0884NAME IS NULL2007/02/03(土) 01:37:52ID:???
さすがにDBにやらせるのは無理があんべ
connect byなんかもロクにパフォーマンスでないしニガテな処理の類でそ
0885ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. 2007/02/03(土) 02:06:06ID:eaIOV6qU
皮肉で書いてるのだが
なんのためのリレーショナルDBなのやら
0886NAME IS NULL2007/02/04(日) 14:43:57ID:???
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以降を手打ちすると文字化けしません。
なぜですか?誰かエロ居人教えてください
0887NAME IS NULL2007/02/05(月) 09:30:06ID:HV6WuwW4
8.2.2, 8.1.7, ..., 7.3.X
0888NAME IS NULL2007/02/05(月) 23:00:39ID:gpmdvzrY
本家のページでもアナウンスし始めたな。>8.2.2その他
今回はセキュリティパッチ。
0889NAME IS NULL2007/02/06(火) 14:07:53ID:???
あるカラムにT155B80(B)W55H78という感じのデータが入ってるんですけど
selectするときに〜 as t , 〜 as b , 〜 as w , 〜 as hとかって別々に分解して取り出すのって無理ですか?

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

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

>>889
substring
08928892007/02/06(火) 16:59:17ID: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("がマッチしちゃうから違うんですけど。

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

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

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

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

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

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

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

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

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

簡単な方法ありましたらお願いします。
0901NAME IS NULL2007/02/09(金) 18:42:31ID:???
>>900
http://homepage1.nifty.com/kojama/works/rdbms/psql/sql.html#term10
0902NAME IS NULL2007/02/10(土) 11:59:09ID:???
>>900
ソート対象のフィールドが数値で最小値が 0 以上なら >>901 でいいけど、
そうでないなら、

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

でいいんじゃないか。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

お願い致します
0923NAME IS NULL2007/02/16(金) 00:40:25ID:???
PDOのプレースホルダーは?じゃ無かったような
0924NAME IS NULL2007/02/16(金) 00:44:08ID:???
?も使えるんだな。俺の思い込みか。
0925NAME IS NULL2007/02/16(金) 01:08:25ID:???
>>922
PHPのPDOがどういう実装になっているか分からないけど
SQLのPREPARE文に対応している形に変換されているなら
PREPARE文で出来ないから出来ない。
そんなのPHP側で?の部分に変数埋め込んで展開すれば良いだけじゃんか。
SQL injection が、とか言うなよ。そもそもカラム名だろ。
そこに injection 可能なパラメータが来ることがあるかもしれないなら
それは設計が間違っているんじゃないかと。
09269122007/02/16(金) 02:50:24ID:???
>>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に同意
0927NAME IS NULL2007/02/16(金) 08:38:02ID:LbPZpHQw
>>922
列名ではなく列番号なら出来るかも。
やったことないけど。
0928NAME IS NULL2007/02/16(金) 10:18:33ID: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の例のようにしたら、意図した結果が得られたんですけど・・・

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

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

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

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

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

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

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

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

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

ちなみにupdateは変更箇所のみでしたが、何故かwhere句で抜き打ち的に
主キー以外のいくつかのカラムをチェックしていました。
0941NAME IS NULL2007/02/21(水) 07:33:30ID: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ではできないみたい)
0942NAME IS NULL2007/02/21(水) 07:46:10ID:???
>>941
こんな所にだらだらと書く時間があるならググればいいやん。
http://www.google.co.jp/search?q=PostgreSQL+UTF-8
0943NAME IS NULL2007/02/21(水) 11:37:04ID:???
テーブルを数十万行ほど定期的に消しては入れてを繰り返したら、
だんだんクエリが遅くなっていくんだけども、テーブル削除以外で直す方法ないの?
VACUUMしても全然元に戻らない。。
0944NAME IS NULL2007/02/21(水) 12:25:04ID:???
>>943
ワロス
0945NAME IS NULL2007/02/21(水) 15:39:42ID:mnbRGN6m
windows のポストグレス(現在の最新版(8.21?))へLinux上(バージョンは7.43)のデータを復元したいいのですがうまくコマンドが使えません。
Linuxでpg_dumpを使ってバックアップしたファイル"a.out"を
Windows上のc:\に配置した場合
psql コマンドで
psql -e testdb > c:\a.out
としてもバックアップが復元されません・・・
ググってもコレでよさそうだし・・・・

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


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

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

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

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

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

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

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

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

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

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

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

ん〜
やっぱりGUIツール使うよりコマンド覚えたほうが色々早いし融通もきくの・・・かな?
0953NAME IS NULL2007/02/21(水) 18:01:09ID:???
>>952
とりあえず、このスレは知能の足りないお前のボヤキを書くスレではない
0954ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. 2007/02/24(土) 23:32:34ID:ocVpsDw0
前はコマンドだったけど今はアド民3どっぷり
0955NAME IS NULL2007/02/25(日) 00:22:10ID:???
コマンドラインを使うのなら、psql だけは cygwin で make したのを使った方が良い。
mingw の psql はタブ補間も効かないし、使い物にならん。
0956NAME IS NULL2007/02/25(日) 00:47:26ID:???
>>955
俺もWindows版のpsqlは補完が効かなくて、一時期cygwinを入れてたが、
結局pgAdmin3になっちゃった。
でも、テスト的にSQLを書くなら補完の効くpsqlは便利なんだよなぁ。
まぁ、LAN内に常時稼動しているLinux機があるから、そこにあるpsqlから
Windows機のpgsqlに接続することも可能なんだけどね。
0957NAME IS NULL2007/02/26(月) 11:19:17ID:???
CURRENT_TIMESTAMPの時間が20分程度ずれるのですが、これはDBが稼動しているサーバの問題なのでしょうか。
0958NAME IS NULL2007/02/26(月) 17:08:40ID:???
>>957
わかってるならサーバを時刻校正しろよwww
0959NAME IS NULL2007/02/26(月) 17:11:29ID:???
>>958
や、サーバそのものは触れないのです。
確認のお願いをする前に確認しておこうかな..と(・ω・`)
0960NAME IS NULL2007/02/27(火) 11:13:18ID: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のレコードのみ非同期で削除
したいという案件がありまして、外部参照の有り無しがパフォーマンスに影響
するのかしないのかちょっと不安になったので質問させてもらいました。
0961NAME IS NULL2007/02/27(火) 11:25:42ID:???
>>957
\! でサーバ側の日時を確認すれば分かるでしょ。
0962NAME IS NULL2007/02/27(火) 18:14:14ID:???
アデレードにサーバがあるとか
0963NAME IS NULL2007/02/27(火) 22:55:03ID:???
>>960
上がらない。
外部参照制約をつけた状態でAのレコードを削除すると、
つけない場合より遅くなる。
B.name_idにindexをつけてやれば解決。
0964NAME IS NULL2007/02/28(水) 00:30:15ID:Xrd/4ZND
>>960
>>963
えっ?FKにしないとJOIN出来ないんじゃないの?
勘違いしてたっぽい?

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

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

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

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

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

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

初心者的な質問で恐れ入りますが、ご教示いただけますと幸いです。
0971NAME IS NULL2007/03/05(月) 06:28:53ID:???
>>970
http://www.postgresql.jp/document/current/html/sql-vacuum.html
0972NAME IS NULL2007/03/06(火) 01:47:28ID:???
>>971
vacuum+analyzeでしたね。
ありがとうございました。
0973デムパゆんゆん2007/03/06(火) 14:52:11ID:xEVGMVAD
バキューム アナル ア-ッ!!!

おちんちんが奥まではいってる
いつか様 お尻がいたいですーーーーっ!!! ア"ーッ!!!

もっとズボズボおながいします ぁぅぁぅ

スレ汚しすまそ クエリ検索でバキュームアナルがヒットしちまった
8.2になってからjavaとのせつぞく少し早くなった気がするお
0974NAME IS NULL2007/03/06(火) 16:07:46ID:???
8.2って>>820-837のようなことがあるので、あんまり移行したくないなぁ。
0975NAME IS NULL2007/03/06(火) 18:15:35ID:???
>>974
今はオレもそれで躊躇してる。
動作確認さえもしていない
0976NAME IS NULL2007/03/06(火) 18:34:42ID:???
>>837によると8.2.1でも未解決だそうだったけど、今の8.2.3はHISTORYをみると
8.2.3
Changes
* Remove overly-restrictive check for type length in constraints and functional indexes(Tom)
* Fix optimization so MIN/MAX in subqueries can again use indexes (Tom)
なんていうのがあるから、>>820の問題が解決している可能性はあるんだけどね。

とはいえ、8.2にすると使いものにならないほどパフォーマンスが落ちる可能性が
あるっていうのは、バージョンアップ後にいちいち検証しなければならないので
非常に面倒。
0977NAME IS NULL2007/03/06(火) 19:17:21ID:???
いつのまに8.2.3までw
試してみるか・・・

しかし8.1.xで、昔入力に失敗して文字化けしたデータが混ざってるやつ
そのまま8.2.xにもってくと文字コード範囲から外れてるとかで
テーブル丸ごとスキップされるんだけど、無理やり入れる方法は無いものか・・
0978NAME IS NULL2007/03/06(火) 20:22:38ID:???
件の遅くなった報告をした当事者です。現在は 8.1.8 で運用中です。
あれから暫く、リリースされる度に Change log は見ていたのですが
確認するのが面倒だったので確認はしてません。
副問い合わせが 8.1 系列と遜色ない速度に戻っていたとしても
別の問い合わせ(SQL)で問題が出ないかを検証しないといけないのは
ちょっとやってられない、からです。

まぁ、今回せっかく話題が出たので、時間があれば試してみますが
>>976 の件には当てはまらない感じなので、駄目だとは思います。
0979NAME IS NULL2007/03/06(火) 22:33:43ID:???
>>976
こいつしょっちゅうプランナ弄ってるけど、正直その修正が
役に立ってるのかと思うよね。
つか、どういうデータでどういう問い合わせで検証しているのか。

RBOでいいからきっちり期待通りに動けばそれでいいんだけどな。
geqoは役に立たない失敗作だったし。
0980ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. 2007/03/07(水) 23:11:36ID:EZjgay4s
導入すんの?
えーとね
痛かったのは 文字列変数に ' を埋め込むとき \' って書いてたのが駄目になってた事。 ''  に直さなければならない 
0981ココ電球(∩T∀T)y-~~~~   ◆tIS/.aX84. 2007/03/07(水) 23:12:43ID:EZjgay4s
プランナはある特定のアルゴリズムで 

要素数が多いとき シーケンススキャン
要素数が少ないとき インデックススキャン

を選択しておりました。
0982NAME IS NULL2007/03/08(木) 00:33:23ID:???
>>977
俺は、8.2のソースを取ってきて、
文字コードチェックのところで変換できない文字を'?'に置き換えることで対処。
その後は、正式版のバイナリに差し戻した。
0983NAME IS NULL2007/03/08(木) 11:25:58ID:???
>>982
うわ、強引だけど使えそう。
ありがとう、早速試してみます。
レス数が950を超えています。1000を超えると書き込みができなくなります。