PostgreSQL & pgsql-jp ML 3テーブル目
1 :
NAME IS NULL :
04/03/20 17:24 ID:/Cqtf47w
>1 乙
3 :
NAME IS NULL :04/03/20 19:19 ID:cQph4WXC
4 :
お願いします :04/03/29 15:15 ID:bZAOhvfO
966 :NAME IS NULL :04/03/29 14:20 ID:bZAOhvfO PostgreSQLって、コラム名にuser使えないの? 967 :NAME IS NULL :04/03/29 14:43 ID:bZAOhvfO ERROR: parser: parse error at or near.... って何よ。。 968 :NAME IS NULL :04/03/29 15:00 ID:bZAOhvfO ********=# CREATE TABLE accesslog ( ********(# time timestamp(0), ********(# path varchar(80), ********(# ssid varchar(80), ********(# user varchar(80), ********(# group varchar(80), ********(# lang varchar(10), ********(# remote varchar(80), ********(# browser varchar(80), ********(# error text); ERROR: parser: parse error at or near "user" at character 84
通し番号をつけるのに今は max を利用しています。 番号が飽和してしまったときの処理が必要なときは、 max を使わない方がいいのでしょうか。
imiwakaran
ガイシュツのような気もするのですが、ポスグレで UPDATE t1 SET a = b, b = c; とやったときの評価順序って規定されていないんでしたっけ? それとも左から右が保証されてます?
>>8 何が言いたいのか良くわからん。勘違いしているかも知れんが、
UPDATEされる前の値が参照されるので、順序は関係ないと思われ。
>>9 > UPDATEされる前の値が参照される
これがわかれば充分です。そういうもんなんですね。
>>11 pがpoint型として
select atan2(p[0],p[1]) from table...
13 :
11 :04/04/19 12:52 ID:???
>>12 できました。
これって、他の幾何型にも使えるやり方ですね。勉強になりました。
ありがとうございました。
14 :
NAME IS NULL :04/04/27 23:45 ID:wkoq9ZT+
Postgre本スレあげ
15 :
NAME IS NULL :04/04/28 02:27 ID:KBMCaswf
Redhat 9でusogresがコンパイルできない…。 makeするとこんなエラーがでてしまう…。 /usr/include/c++/3.2.2/exception:57: overriding `virtual const char* std::exception::what() const throw ()' make[2]: *** [exception.o] エラー 1 make[2]: 出ます ディレクトリ `/home/nozaki/usogres-0.8.1/src' make[1]: *** [all-recursive] エラー 1 make[1]: 出ます ディレクトリ `/home/nozaki/usogres-0.8.1' make: *** [all-recursive-am] エラー 2 gccとglibc関係はインストールパッケージのrpmそのまま。 compat-gcc-7.3-2.96.118 gcc-g77-3.2.2-5 gcc-java-3.2.2-5 libgcc-3.2.2-5 compat-gcc-c++-7.3-2.96.118 gcc-3.2.2-5 gcc-c++-3.2.2-5 gcc-gnat-3.2.2-5 glib-1.2.10-10 glibc-common-2.3.2-11.9 glibc-2.3.2-11.9 glib2-2.2.1-1 glibc-devel-2.3.2-11.9 glibc-kernheaders-2.4-8.10 usogresのサイトみるとgcc-2.95.x と glibc2.1.9xではだめで、最新のgccならOKと いうようなことを書いてあるけど、新しすぎてもだめなのかな? だれか上手くいった人います?
テーブル作成日時とテーブル変更日時を知りたいんですが どんなコマンドでみれますか?
17 :
NAME IS NULL :04/04/28 16:45 ID:N09xy6IO
18 :
1 :04/04/29 02:52 ID:???
新スレたててから移行まで1ヶ月か・・・
oid ってありますよね?これが最後まで行ったらどうなるんですか?
>>19 行き着いたときだったか、使い尽くしたときだったか忘れたけど、
動かなくなってしまうんじゃなかったかな。
今のところそこまで使い切ったDBは存在しないらしい。
って、ソースコードの中かリリースノートかなんかで読んだ。
開発者自身も検証していないようなコメントだった。
>>21 なるほど、これもよさげですね。
こちらを試してみます。
どうもありがとう。
23 :
NAME IS NULL :04/05/01 00:41 ID:ZjwnXM2M
>>19 おいらも気になってた
確かlog int だったかな
じゃ直ぐ無くなる
>>19 一応初期オブジェクトの分を除いてループする。
けどそのときの動作保証はない。
log intはイヤだ
MLで巨大なファイルを扱いたがってる人、最近DBを使い始めたのかと 思ったらpostgre95のころからMLにいるのね。 ぐぐったら1996年のアーカイブが出てきたよ。 経験=スキルではないんだね…
漠然とイメージだけで「メモリが足りないんじゃない」とか 「常識的に考えましょう」とか釣られて回答してる奴らの方がキモいのでは。 結局誰も答えられてないし。 ファイルがでかいからって、lo_unlinkって5分もかかるのかなあ。
28 :
490 :04/05/04 12:02 ID:jR8ayW8M
ちなみに「pg_ctl start」コマンドを打つと以下のようになります。 Administrator@windows2000 ~ $ pg_ctl start pg_ctl: Another postmaster may be running. Trying to start postmaster anyway. FATAL: File /usr/local/pgsql/data/PG_VERSION is missing. This is not a valid da ta directory. pg_ctl: cannot start postmaster Examine the log output.
どうちなむのだろう?
30 :
490 :04/05/04 12:04 ID:jR8ayW8M
まちがいました。
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のトンネルを介しています。
>>31 Oracleとかでもそうなるよ。
他のクライアントから削除、更新をすると#Deletedになるんじゃなかったかな。
で、結局回避方法は再表示(だったか再接続だったか・・・)ぐらいしか
なかったような気がする。
原因はプライマリキーをアクセスが拾えないとかじゃなかったかな。
「かなかな」ばかりですまんが。
33 :
31 :04/05/13 03:33 ID:???
>>32 遅くなってすんません。
他からはデータベースに接続してない状態で
ただ単にテーブルを表示させるだけでも#Deletedになっちゃうんです。
テーブルの定義をして、念のためAccessを終わらせて、
再度起動してテーブルを開くと#Deletedになっちゃうんです。
なんか、情報があんまりなさそげですね…
そんな状態でもinsertやupdateはできてるみたいだから、参照はviewを使うことにするか…
>>31 うろ覚えなんだけど、OIDオプションの「インデックスを装う」をonにすることで回避できたような気が。
36 :
31 :04/05/15 05:45 ID:???
38 :
NAME IS NULL :04/05/25 18:57 ID:xgZdnpwF
7.4でunicodeのデータベース使ってるんだけど、euc-jpのPHP4.3.4からpg_connectするとバケまくり。 解決方法しらないですか?
39 :
NAME IS NULL :04/05/25 19:11 ID:xgZdnpwF
pg_set_clientencodingで解決した。けど、どっか一括で設定できんのかね・・・
41 :
NAME IS NULL :04/05/26 00:42 ID:hRTK0adv
>>40 それをやるとJavaから呼び出したときに文字化けするかもしれないことがわかった。
一括設定はあきらめる。
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 です。 どなたかよいアドバイス等あったらお願いします。
>>42 のまえに、なぜ7.3.3なんだ。
せめて7.3.6に上げてみれば。
その手の問題はほとんどlocaleが原因なんだけどね。 psqlからshow all;かなんかしてlc_*がどうなってるか見てみたら?
45 :
42 :04/05/27 01:14 ID:???
>>43 ,44
返事ありがとうございます。また返答遅くなって申し訳ございません。
Show all で確認したところ、エンコーディングはEUC_JPなっていました・・・
Psql -l だとEUC_JPと表示されます・・・・
そしてlc_* us_en に・・・・
これが原因なのでしょうか?
/etc/sysconfig/li18nも
LANG=EUC_JP
LC_ALL=EUC_JP
LC_CTYPE=EUC_JP
LINGUAS=EUC_JP
と変えてあります・・・
46 :
44 :04/05/27 11:43 ID:???
>>45 ソレダ!!
lc_collateあたりは、initdbした時に決定して以降変更できないはず。
やっぱinitdbの時に--no-localeなってくれなかったように
見えるな。気の毒だけどinitdbしなおすしかないと思いマス。
47 :
42 :04/05/28 05:33 ID:???
>>44 返事が遅れて申し訳ないです。
pg_ctl stop
rm -rf /usr/local/pgsql/data
initdb --encoding=EUC_JP --no-locale
pg_ctl start
で、テストデータを流しなおして
createdb test_base
psql test_base
CREATE TABLE T_TEST (T VARCHAR(128));
INSERT INTO T_TEST (T) VALUES ('あ');
INSERT INTO T_TEST (T) VALUES ('い');
INSERT INTO T_TEST (T) VALUES ('う');
INSERT INTO T_TEST (T) VALUES ('え');
SELECT * FROM T_TEST ORDER BY T;
であいうえお順にデータが並びました。
その後
SELECT * FROM pg_settings WHERE name like 'lc%' or name like '%encoding'
でサーバークライアント共にエンコードがEUC_JPになって居るのを確認。
lc_*が全てCになっているのを確認して、データのリストアを無事に終了しました。
初歩ミスでポストマスターが正常に終了せずに変な挙動になっていたみたいです。
無理やりポストマスターをつぶして上記作業で正常動作になりました。
>>43 助言に従って7.3.6にアップしました。
以上ありがとうございました。
にしても、最新の7.4.2にしなかった理由が知りたい。
バージョン上げればいいってもんでもないしょ。
それにしても、運用方法とかデータ型が大きく変わるわけではないのに、7.4のメリットを捨てて7.3にする理由が知りたい。 だって、もとは7.1だよ。
よくわかんねぇけど 激しく変化したから?
さいとうさんも大変だな。 ここで聞けスレにも書いてるみたいだが、英語だけでなく日本語も苦手っぽいし
BOFの中継を見るの忘れた…
54 :
NAME IS NULL :04/06/06 02:05 ID:czq84YCV
以下のモノをCで書き直すにはどうしたらよいでしょうか? 教えてエロい人。 CREATE FUNCTION hogehoge() returns opaque as ' BEGIN NEW.last_access := CURRENT_TIMESTAMP; RETURN NEW; END; ' language 'plpgsql';
char* sql = "CREATE FUNCTION hogehoge() returns opaque as ' " "BEGIN " "NEW.last_access := CURRENT_TIMESTAMP; " "RETURN NEW; " "END; " "' language 'plpgsql'; "
57 :
NAME IS NULL :04/06/21 17:35 ID:HUxGxZ26
PostgreSQL 7.2.1 から 7.3.4 に移行しようとしています。 7.2.1 で使っているラージオブジェクトを含むデータを % pg_dump -b -F c DB_NAME > foo.out などとしてバックアップを取り、7.3.4 の方で % pg_restore -d DB_NAME foo.out として戻そうとすると、 pg_restore: [archiver (db)] could not execute query: ERROR: Column "COLUMN" is of type timestamp without time zone but default expression is of type text You will need to rewrite or cast the expression と言われてしまいます。 ラージオブジェクトを含まないデータなら、timestamp 型の記述を書き換えて restore すれば良いみたいなのですが、ラージオブジェクトを含むデータの場合は どう対処すれば良いでしょうか。お知恵をお貸し下さい。
なんで7.3.4とか中途半端なバージョンなの?
59 :
NAME IS NULL :04/06/21 19:38 ID:HUxGxZ26
たまたま今の作業環境が 7.3.4 なだけで、深い意味は無いです。 7.2.1 から最新バージョン(7.4.x)への移行の問題として捉えて下さって結構です。 どなたかよろしくお願いします。
MLにひさびさに面白い方がきていましたね。 なんでしょうねあれ。
房でしょう
62 :
NAME IS NULL :04/07/19 18:43 ID:3/3kexye
文字列の場合、 ・char ・varchar ・text の違いがわかりません(><) 誰か教えてください。特に、charとtextの違い。 やっぱり、textの方がメモリを食うんですか?
(><)
(><)
65 :
62 :04/07/19 19:56 ID:???
PostgreSQLのことならここで聞け だと思ってカキコしたら違ってました・・・(><) dat落ちしてしまっているみたいだし・・・どうすれば・・・。
67 :
62 :04/07/19 21:59 ID:???
UTF-8 で困る環境って携帯電話以外でもあるの?
Lモード
MULCOとかWebTVとか。
出力とDB内部がUTF8なのと直接的な関係はないぞ
UTF-8 だと半角カナも使いやすいのになぁ。 ISO-2022-JP じゃなきゃだめなのかぁ。
34321 みたいな質問はどういう風に答えたらいいのでせうか。 いやな予感がするので、レス書けません。
いい英和辞典でも紹介するのがよいのでは?
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秒づつぐらいアクセスを拒否する設定とかでもいいんだけどな。 同期がとれているんだったら。
>>75 ありがとう。
英和辞書を紹介したら、引き方のレクチャーもしなきゃいけない
なんてことないですか。
あ、堅いレスがついているようですね。
>>76 使ったことないが Slony-I は time の値は同じになるとのこと。
非同期レプリだけどね。
79 :
NAME IS NULL :04/11/26 18:25:32 ID:TIFoj5JU
>>78 ただ、そちらはラージオブジェクトが使えないそうなんですよね。
pgpool_now()とかって関数を入力したら、そこだけ置換してくれるとかあれば嬉しいのに。
80 :
NAME IS NULL :04/11/26 19:49:50 ID:ybnduqE4
>>79 pgpoolに関してはSQLレベルで分配してるだけだから。
だからpostgresql側の変更が不要なかわりに、
nowなどサーバ依存な動作は不許可なわけ。
仮にpgpool_now()なんてつくって、それはpgpoolが解釈して
時刻を埋め込むものだとしても、どっかで破綻しない?
クエリーがpgpool依存になるってのは目をつぶるとしても。
って書いてて思ったのだが、
クエリーを投げる側(アプリ側)でnowとか使わないように
アプリ側で時刻を埋め込めばいんじゃん。
#問題はシーケンスとかだろなあ。
>>79 ラージオブジェクトは使えないね。
セミナーに行ったとき、開発者が NO と断言してた。
>>80 >って書いてて思ったのだが、
>クエリーを投げる側(アプリ側)でnowとか使わないように
>アプリ側で時刻を埋め込めばいんじゃん。
ってまあ、たしかにそうなんだけどね。
ただ、nowはよく使う関数だからなぁ。
Slony-Iはテーブル単位での管理ができるってことだから、
ラージオブジェクトの管理だけ別にやって残りで使うって手もあるか。
83 :
NAME IS NULL :04/11/28 22:53:29 ID:7LOVBWil
>>82 Slony-Iは非同期。
最悪10秒くらいデータの不一致が発生するけどOK?
>>83 うーん、かたっぽのDBがアボーンした時に、
即座にもう片方で動作できるようにするのがレプリケーションする目的なんで、
最悪スレーブの方読みに行かなくてもいいかもなぁとか思ってたり。
日付関連値をできるなら主キーにしたいんで、
そこの不整合が起きるとめんどいしね。
pgpoolで、一つ思ったことに、
アプリ、pgpool側で乱数を発生させ(重複がまず発生しない桁数)
マスタ側で時刻テーブル(乱数、now())なりで一旦適当なテーブルにnowなりの値を保存。
マスターもスレーブもそのマスターにあるテーブルをみて、乱数をキーにして時刻を取得。
マスターアボーンしてるとわかったら、スレーブは自前のnowを使う。
これはシーケンスにも使えるかもね。
縮退運転に備えて、シーケンス番号をこまめにセットしないとならないけど。
シーケンスにトリガ貼るってできるんかな、、、、、?
もちろん、これはDB越しのアクセスってなんかでき無いとダメだけどね。
Slony-Iをみるかぎりできそうだけど(でないとレプリケーションできないはずだよね)
試してない。
とか言うのどうかなぁ?とか思ってみたり。
シーケンス発行だけでもpgpoolでやってくれないものかなぁ。 まあ、順序が保証されるんなら、max+1でもいいから特に重要ではないかもしれんが。
レンカキすまん。 、、、良く考えたら、「順序が保証される」ようにできるのなら、 どちらかのシーケンスにpgpool経由以外からアクセスさせないようにしておけば、 両方のサーバーともシーケンス番号は同じになるんじゃないかな それともおいら何か見落としてる?
というか、そんなの日常でやってる奴なんて稀だから、 自分で試さないと答えは出てこないような気が。
88 :
NAME IS NULL :04/11/30 09:34:18 ID:8FceD7Au
>>86 原理的には。
しかし、運用に負担がかかる。
そもそも、シーケンスという概念で隠蔽したもろもろが、
そのような運用にしたとたん、
主にトラブル時だが、一気に表面に出てくる。
nowとかも同じね。
運用が面倒になることのデメリットが理解できないのなら、
レプリケーションを実運用すべきでない。
>>84 乱数とかいってる時点で厨房だな。
レプリケーション、いやDBに手を出すのはやめといたほうがいい。
いや、すべての電気機器を操作するのは危険だ。
91 :
NAME IS NULL :04/12/02 12:59:27 ID:pHcXoZZE
psqlodbc.dll内の関数のマニュアルとかってどこにあるんですか? 探したけど見つかっていない状態なのでどなか教えてください
92 :
NAME IS NULL :04/12/27 00:15:28 ID:NPDFfQpi
siteAとsiteBという二カ所の物理的に離れてる場所があるとして、 どっちにもpostgreSQLが回してあって、 どっちかがサイトごと死んでもそのまま生かし続けられる、 と云う構成にしたい場合、 siteAとsiteBにそれぞれpgPoolを入れて、 その下のdbをたすき掛的にレプリケーションをしておけばok? ちなみにpgPoolへの接続は自動的に切り替えられるものとして。 わかりにくいかな? まあ明日テストしてみるけど。
>>92 pgpoolはどちらか一方、もしくは別マシンでOK。
94 :
92 :04/12/27 00:23:04 ID:NPDFfQpi
いや言葉が足りなかった。すまん。 siteAとsiteBには通常運用時(両方生きてるとき)はパラでアクセスが来るんだよね。 だからたすき掛がいいかなと。
95 :
93 :04/12/27 00:35:57 ID:???
あぁーなるほど。はやとちりスマソ。
siteAとBの間のネットワーク速度は大丈夫?
97 :
92 :04/12/27 00:38:54 ID:???
それは問題ない
98 :
92 :04/12/28 23:06:02 ID:???
今日試してみたけどあまりにもあっさり成功。 クラスタDBのネットワークケーブル抜いたりしたけど、 2度ほど障害が出ただけであっさり再開(縮退モード)。 こりゃ便利だわ。
Postgre初心者なのですが、 psqlのコンソールから日本語を入力する方法 ってどうすれば調べられるでしょうか?
>99 言ってる意味が良くわからんのだが。日本語って普通に入力できないか? ってか、情報少なすぎ。 Postgresが動いているマシンの OS、文字コード設定 psqlを動かしている画面(端末エミュレータ?)が動いている OS、端末ソフト、文字コード設定 最低限このぐらいを晒さないと答え様がない罠。
>99 DB名や項目名に日本語を使うのはアマチュアがよく犯す間違い
OSはFreeBSD、文字コードはEUC_JPでテーブルを作成。 端末エミュレータは起動してません。 Wnnは起動してます。kinput2もインストール済みです。 つか、日本語入力の仕組みがイマイチわからないんですが。 JSERVERはWnnをローカルホストで起動させ、 kinput2をFEPに設定することはできてると思うのですが。 また、項目やDB名に日本語は使いません。 SQLファイルを作成してpsqlに流し込む方法もあるのかもしれませんが、 日本語が使えるエディタが起動できていないので、 どうしようかと思案中です。 あと、DBの基礎知識は少しはあります。運用経験はありません。 どうか、良きアドバイスをお願い致します。
pgAdmin 使うとか。 アプリケーションの裏において使うものなので、 アプリを作るところからはじめてくれ。
>103 Windowsで使うものでは? 今Windowsマシンとネットワーク繋がっていないんです。
105 :
NAME IS NULL :04/12/29 12:51:04 ID:3gim2RWe
>102 X使ってないならkonしてるか? [shift]+[space]で漢字入力にならないか?
>>100 そもそもpsqlじゃないときは
日本語使えてるの?
使えてないなら板違い
>105 konって表示専用じゃないんですか? 前に起動させたことはありましたけど、 シフト、スペースで何も起こりませんでした。 とそれよりpostmasterが起動できなくなってしまいました。 いろいろ環境変数を追加したりしてるのが原因でしょうか? 一度再起動してみます。 psqlの時も日本語つかえてません。 emacsとかどうやって起動させるんでしょう? UNIX板で聞けばいいですか?
>>107 その状態でここで質問するってことがすごいね。
悪いことは言わない。
あきらめろ
109 :
105 :04/12/29 13:57:32 ID:???
>107 少し落ち着け。 >konって表示専用じゃないんですか? 漢字が正しく入力されているか、表示されなくても分かるのか? ってかさ、Xは起動してるの? それともフルスクリーンでテキストコンソールになってるの? そこが分からんと、説明のしようが無い。 #kinput2とか言ってる所をみると、X使ってるっぽいけど、 #「端末エミュレータは起動してません」ってじゃあ、藻前がpsqlを使ってる画面はどこに出てるのかと小一時(ry #Xでデフォルトのxtermで作業してる気がしてならないのだが・・・。
pgAdminIIIの1.2.0でフォント設定をMSゴシックにしてみると とても面白いことが起きるよ
>109 どうもレスありがとうございます。 UNIX使いの人にも親切な方っていらっしゃるんですね。 konを起動させたときは、色々キーを叩いてみましたが、 アルファベットしか入力できなかったです。 Xが起動してるとは・・・psコマンドで見る限り、 cshしかアクティブになってませんが。 ログインスクリプトとか全然書いてないので。 フルスクリーンでテキストコンソールにはなってます。 Xでデフォルトのxtermとは一体?たぶんそうだと思うのですが、 どのようなサイトを見たら意味がよくわかるでしょうか? >#kinput2とか言ってる所をみると、X使ってるっぽいけど、 >#「端末エミュレータは起動してません」ってじゃあ、 >#藻前がpsqlを使ってる画面はどこに出てるのかと小一時(ry >#Xでデフォルトのxtermで作業してる気がしてならないのだが・・・。 そう言われてみると端末エミュレータは起動してますね? しかし、postmasterが起動しなくなったのは一体???
>>111 強制終了かなにかでdata/postmaster.pid のファイルが残ったまま落ちちゃったんじゃないか?
あったら消せ。
113 :
105 :04/12/29 14:21:51 ID:???
>112 /usr/local/pgsql/dataをみましたが、そのようなファイルはありませんでした。 どうなってるんだか。
管理者に聞いて下さい
>>114 起こらないはずないよ
まぁやってみれば分かります
118 :
NAME IS NULL :05/01/11 16:20:11 ID:mtFH19Sy
CSEみたいに使いやすくてかつ 開発が続いてるクライアントアプリってないですかね? 今はCSEをだましだまし使ってる
119 :
NAME IS NULL :05/01/12 15:03:33 ID:/0becKYD
すいませんちょっと質問があるのですが、Webmin上からPostgresが見れないのです。 僕のような入門者には、Webminはありがたいのです。 SQL select tablename from pg_tables where tablename not like 'pg_%' and tablename not like 'sql_%' \ order by tablename failed : ERROR: relation "pg_tables" does not exist このようなエラーを返してくれます。 状況としては、最初にソースからインストールしたのですが、うまくいかずapt-get からRPMでの インストールを行いました。OSはFC3、Pgのバージョンは7.4.6です。 どちらさまかお助けいただけないでしょうか。
初期化してないとか
121 :
119 initdb :05/01/12 16:43:03 ID:/0becKYD
>>120 神!てゆうか未熟すぎてすみませんでした。
朝起きたら120様のほうに向かいおまいりします。
122 :
120 :05/01/12 16:51:46 ID:???
東京都目黒区在住です
SSHを使って、コマンドでテーブルを表示させようとしたのですが、文字化けしました。 どうすれば解決するでしょうか?
psqlの話をしてると仮定して \encoding
update 対策で vacuum を cron で回す、という話はよく聞きますが、 例えば PHP などで大量に update した後にプログラム内で pg_query($db, "vacuum") を している方はいらっしゃいませんか。
そこまでしなくていいんじゃないかな。
つか、なんでcronで回すかってーと、systemのidle時を狙い打つためなのね。 phpでアップデート後というとまあ普通は時間が特定出来ず、高負荷時に VACUUMをかける可能性もあるのでお勧めできない。 その大量アップデートの後はsystemが比較的idleなことが確実で、どうしても やりたいんだというなら止めないが。 更新直後のVACUUMの必要性はその大量更新によって参照パフォーマンスに どれくらい影響があるかによる。たとえば数百万単位のレコードの index対象項目を殆ど更新してしまうような更新処理でもしない限り、 そこまですることはないと思う。
128 :
125 :05/01/18 10:18:51 ID:???
>>126-127 ありがとうございました。
一番いいのは DB のパフォーマンスが下がり、
かつ idle なら vacuum 自動実行なのですが。
すみません。教えていただきたいのですが、 SELECT count (*)を使わないで、 システムカタログ等からテーブルのレコード件数を把握したいのですが、 どこを見れば宜しいでしょうか。
130 :
NAME IS NULL :05/01/18 11:25:39 ID:2UkA0amN
>>128 パフォーマンスが下がるって意味わかる?
なんか、パフォーマンスっていいたいだけかと。
4時ごろやっときゃ問題なかろ。
>>129 まずはしょーもないこと考える自分の頭の中を
132 :
125 :05/01/18 12:51:50 ID:???
>>130 現在は 30 分おきに cron しているのですが、
それでは足りないときがあるんです。
かといって 10 分おきだとご指摘の通り
過負荷時に vacuum 走ることになりますよね。
ですから `w` で rup を取得し、idle がある閾値以下なら
pg_query() で vacuum させようかとも思い始めました。
133 :
NAME IS NULL :05/01/18 13:13:59 ID:22aeSu5q
>>132 おまえのところは10分おきに百万レコード単位でインデックスの変更
が行われるのか?ただVACUUMいいただけちゃうんかと。
>現在は 30 分おきに cron しているのですが、 >それでは足りないときがあるんです。 30分置きにVACUUMしても足りないというのは特殊な状態だから、 多少はどういったシステムなのか、レコード数の規模なんかも 出さないと答えようがないと思うぞ。 >かといって 10 分おきだとご指摘の通り >過負荷時に vacuum 走ることになりますよね。 10分置きVACUUMを考慮するということは更新が10分以内には終わる、 ということでそれは「大量」とは思えないんだよね。 だもんで、もうちょい詳しく情報出してくれんと。
135 :
132 :05/01/18 15:34:42 ID:???
情報小出しですみません。 100 件しかない商品テーブルだと思ってください。 その 100 件の(例えば)在庫数カラムの在庫数を書き換えるために 毎回 100 回の update が一気に走ります。普通は数秒で終わります。 この作業が昼間であれば 1 分間に 1 〜 10 回くらい発生します。 ピーク時にそんな状態が数分続くと update が異常に遅くなるんです。 数秒のものが十数秒、数十秒になり、load avarage も上がっていきます。 vacuum するとまた数秒程度に戻ります。 この update 作業中にもいろいろな SQL が走りますが、 その商品テーブルを select するだけでその他に update/insert はありません。 PostgreSQL 7.2.6 / P3-930M / 256M / RH7.3 という環境です。
1操作で更新系100SQL、ピーク分1000SQL以上走るという 実装が既に腐ってるんだが。 ものすごい勢いで不使用領域を作るからVACUUMも大事だけど、 レコードはたかが3桁のオーダーだしなあ。 トランザクションの書き戻し待ちさせられててスピードが 落ちてるだけのような希ガス。 まあ、実装を考え直したほうがいいが、動いているものの改修だと そうもいかないだろうし、辛いやね。
137 :
NAME IS NULL :05/01/18 19:08:20 ID:22aeSu5q
単純にファイルI/Oの問題だろうな。まずはメモリを1GBにしてみろ。
138 :
132 :05/01/18 21:34:26 ID:???
>>136 a 〜 z にそれぞれ 1 〜 26 の数字を振り、
z の 26 を 1 にした場合、
a は 1 → 2, b は 2 → 3, ... y は 24 → 25 とずらす場合に
26 回 update が走るのですが、これのうまい実装はあるでしょうか?
>>139 >これのうまい実装はあるでしょうか?
そもそもその「これ」とやらが間違ってると思われ。
PostgreSQL自体に手を加えたいのでは無いでしょうか?
>>139 意図がつかみかねるけど、a 〜 z (1から26)の値が入っている
項目を X としたときに、(X + 1) % 26 をやりたいと言ってるだけじゃないか?
ねじが100種類あって、Aセットなら20種類50個、Bセットなら50種類230個、 というようなの組み合わせで販売するとする。 セットのねじ−個数はなんらかのマスタに持つとする。 で、Aセットが購入されたら、20種類のねじ在庫からおのおの個別個数の 在庫を引かなければならない。もちろんねじだから、1本からも販売はある。 で、最多注文時間帯は1分間に10受注ぐらいする場合がある。 このWebシステムのうまい実装を考えよ。 ‥か。こりゃ結構骨の折れる演習問題だな。
RDBではなくOODBを使うと、RDBの場合より実装しやすそう。 つうか、1分に10受注って、ピーク時にもそんなに負荷はかからない、ということがいいたいのかな?
人気通販サイトとかの方がトランザクション多いと思うけど、 バキュームなんて日に1回程度だろ。 なんか違うところがおかしいはず。
>>144 PostgreSQLスレじゃなく、データモデリングに関するスレで聞いたほうがいいよ
>>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
テーブルの仕様が分からないと、正確な事は言えんから、残念。
149 :
141 :05/01/19 10:17:38 ID:???
>>148 例が悪かったです。すまん。ローテートではなく、
a,b,c,d
の c を 1 個上にソート
a,c,b,d
そして、b を 2 個上にソート
b,a,c,d
のようなことです。
これを実現するためにテーブルはおっしゃる通り
alphabet text, no int
で、 order by no したい、ということです。
c を 1 個ソートは b と c の 2 回の update で済むが、
b を 2 個ソートだと 3 回 update、
これが z を a だと 26 回 update ですよね。
これを 148 のようにクールに書く方法はないかな、と。
>>144 スレ違いすみませんが
これの実装方法気になる。
この話題、別のとこで再開してるのなら誘導お願いしますー
151 :
132 :05/01/19 11:42:51 ID:???
私も知りたいです
>>149 移動位置にあるアルファベットの数字を移動するアルファベットに割り当て
それ以降(ソートによっては以前)〜移動するアルファベットの間にある数値を
+1すればよいんじゃないか?一回じゃ無理だけど。2,3回か。
でも何を使ってPostgreSQLを操作しているか知らないけどスクリプト等で
文字列で、検索、切り取り、挿入をしたほうが簡単じゃないか?
>>145-146 ECサイトなら分100アクセスはあっても
同一商店(この場合テーブルを指す)から1分当たり
100商品1000在庫が変動するなんてことはないでしょ。
>>152 つうか
alphabet text, no int, prev int, next int
として前後のnoを格納しておけばあらゆる異動は2UPDATEで済む。
>>150 いつどれが何個売れたとか何個入庫したとかという情報も必要かな。
だから、入出庫履歴テーブルを用意してそこに記録する。
現在の在庫量を算出するには、
SELECT * FROM ネジマスター LEFT JOIN (SELECT ねじコード,sum(入出庫量) FROM 入出庫履歴 GROUP BY ねじコード)AS foo USING(ねじコード);
見たいな?
このままほっとくと、入出庫履歴テーブルが結構な行数になっちゃうので、
INSERTはいいけど、在庫量を調べる上のクエリに時間が掛かる。
そこで、定期的に(1日おきか1時間おきかは置いといて)現在庫量をそっくりそのまま在庫テーブルに
移して、出庫履歴テーブル(記録用テーブルに移すしてから?)を空にする。
後は、在庫テーブル UNION 入出庫履歴テーブルで現在庫量を求める。
MVCCのおかげでテーブルロックすることもないから、業務中でも在庫テーブル更新は行える。
で、どんなもんだろうか?
入出庫履歴にどのぐらい溜まれば、在庫量を算出するクエリが実用上問題になる時間が掛かるのかは
試してみないとわからないけど、100x60分x業務時間で5万-10万行/日ぐらいなら、何とかなりそう。
出庫(販売)前に現在庫量を調べてからって形になってたら厳しいか。
>>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 ) が難しくありませんか。
>>153 正直、RDBでそのアクセス量は捌けないと思う。
RDBはバッチ処理系だもんで、そもそもそう使い方するもんじゃないし。
(全テーブルをオン・メモリにするとかの反則はなしでね。)
1つのASCIIフラットファイルにフォーマットを決めて全在庫を書き、
phpなりのロジックで在庫確認/増減させて書き戻す。
まあ、1行1商品の在庫数としておけばいいだろう。何行目がどの商品か
だけ厳密に決定しておけば良い。
商品が4桁程度のオーダー(1万商品程度、課題のねじなら1万種類)なら
1秒もかかるまい。
>>155 氏の意見ももっともなので、受注の週間に先ず入庫/出庫データを
一定のフォーマットで残すようにしよう。1注文で1ファイル。
これも1行1商品の増減数としておけば良いだろう。これは作っていくだけだから
壊れない。万一在庫ファイルが壊れた場合は、RDBから在庫ファイルを再生成し
入出庫ファイルを順次適用すれば、現在在庫は復元出来る。
で、夜間バッチでRDBへ適用。入庫/出庫ファイルを消去し在庫ファイルと
RDBの在庫一致を確認。
在庫管理それ自身はRDBが向いていると思うので、適材適所ということで。
>正直、RDBでそのアクセス量は捌けないと思う。 全然捌けるわけだが…
アマゾンとかヤフオクとか、普通にそれ以上のアクセスあるだろうな。 当然中の人はRDBだろう。 Postgresと関係なくなってきてるのでこの話はここでやめで。
160 :
NAME IS NULL :05/01/19 13:44:50 ID:4WtFCBLG
昭和の時代の汎用機の話してるんじゃないの? PCサーバにOracle入れたって、普通に同時1000とかで動かせるしな
162 :
155 :05/01/19 14:23:02 ID:???
このスレが該当スレになるのかな?
【より良い】データモデリング【モデルを】
http://pc5.2ch.net/test/read.cgi/db/1057509675/ 普段ヲチすらしてないけど、最後の方は在庫推移のモデルって話になっているようだ。
ただ、更新の激しいテーブルは処理時間が増えてしまうというのは、
PostgreSQL特有(MVCCの実装方法による)の問題なんですよね。
UPDATEは旧データの無効化と新データの挿入になっていて、
命題の件だと1分で10倍、1時間で600倍に膨れてしまうから、
インデックスなんて全然効かない。てか、インデックス張らない方が
速いだろう。(更新も抽出も共に)
164 :
NAME IS NULL :05/01/19 14:48:34 ID:v3nirws7
>>156 >abc(中略)xyz の y を a の次、つまり
>aybc(中略)xz の場合など、移動量によって
>update が比例して増えますよね。
移動量がいくつだろうが条件文を書けば2回のupdate分で済むと思うのだが。
もちっと頭使え。
165 :
NAME IS NULL :05/01/19 15:01:57 ID:Ua1Qg+Kc
166 :
NAME IS NULL :05/01/19 15:06:14 ID:g1/lbauT
PostgreSQL8.0を話題にしないのは、波田陽区に斬られるのが怖いからですか?
>>164 ごめん。何度読んでも素で分からないです。教えてくれますか。
>>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';
>>168 ああ、UPDATE"文"が2つってことか。
> update分 スマン変換ミスだ。
>>167 vacuumする頻度が少なくて済むようにupdate対象を少なくしたいってことか。
こっちが良く理解してなかった。148のように、ってあるからsql文を少なく
したいと勘違いしてた。スマン。
そういう条件だと、データを文字データとして一箇所に入れて、スクリプト側で
文字列操作する方法ぐらいしか思いつかない。selectの手間を考えなければ154の
リスト構造化か・・・。
172 :
167 :05/01/19 18:56:33 ID:???
100 件あるテーブルにおいて、 update hoge set no = 2 where no = 1; update hoge set no = 3 where no = 2; (中略) update hoge set no = 100 where no = 99; update hoge set no = 101 where no = 100; より update hoge set no = no + 1; の方が速いですか?それとも同じ?
>>173 試せぼけ! って言われるよ
後者の方が早い。
関係ないけど、その例でnoがunique keyだった場合に、
結果的にはOKなはずだけど、update(後者でも)ではエラーになっちゃうんだよなあ。
これって仕方ないことなのかね。
(今手元に他DBがないからこれが当然の動作かどうかはよくわからん。)
だから今は100足してから99引くとかいんちきくさい処理をしている。
誰か俺が間違っていると指摘してくれ。
>>174 制約の遅延が出来るのは、今のところ外部キーのみだから、仕方ないことなのかも。
8.0の正式版では試してないけど、beta2の時点ではダメだった。
>>174 指摘したいのは山々だが・・・
俺も同じようなことでしのいだ覚えがある。
unique key の一括update って 普通に考えたら実装に問題ありって思ってしまうけど 具体的にはどんな項目なの?
>>177 表示順序(ORDER BY)を決めるカラムとか。
新規挿入するデータを中間にもってきたい場合、
その番号以降を+1したいなど。
>>178 リストにしとけば、一斉書き換えはしなくて済むね。もちろんリストだと
表示時の負荷が高まるから、ケースバイケースだけど。
>>179 ごめん。まじでわからん。
リストって何?
>>154 みたいなリスト形式の場合ソートってどうやるの?
すみませんが,質問です. PostgreSQL で,「新規行挿入時の日時」「行更新時の日時」を 自動的にカラムに記録するにはどうしたら良いのでしょうか? 今の自分の考えですが, ・新規行挿入時...カラムのデフォルト値を,現在時刻の関数に する(どの関数にしたらよいかは分からない) ・行更新時...UPDATEに関連付けたトリガを作成する. あたりでよいのかな?と思うのですが,どうでしょうか? MySQL だと,timestamp 型のカラムは自動的に更新されて くれるのですが. 以上です.どなたかよろしくお願いいたします.
186 :
184 :05/02/02 14:51:36 ID:xRHYLdFZ
>>185 ありがとうございます.更新系は,こんなページを見つけました.
http://ash.or.jp/db/pg_use.htm 挿入系は,テーブル定義のデフォルト値に,何か関数か予約語を
指定することで可能にはならないでしょうか?
『プログラマのためのSQL』で,そのやり方が紹介されていたので,
PostgreSQL でそのようにやってみたいのです.
current_timestamp,current_date
188 :
184 :05/02/02 15:19:42 ID:???
>>187 ありがとうございます!うまく行きました.
これで MySQL から順調に乗り換えられます.
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/のぶぶん)は何をいれても変わりません。 入力がアルファベットのみの時は問題ありません。 また、正規表現の行だけを外したら問題なく動作するのですが、 何を疑ったらいいでしょうか?
>>189 >何を疑ったらいいでしょうか?
terminalの文字コードだな。
UNICODEで吐き出されて北データをUTF-8で処理しようとして
バケてるんじゃないのかな。
>>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';
}
だとうまく行くのですが。
192 :
NAME IS NULL :05/02/02 22:43:25 ID:G6QtGaOI
他に、 #!/usr/bin/perl foreach my $code ( 1..65535 ) { my $char = pack "U", $code; my $ucs2 = sprintf "%04x", $code; if ( $char =~ /\p{InHiragana}/ ){ print "$ucs2\t$char\n"; } } のばあい、正常に平仮名のリストと文字コードが返って来るのですが、 create or replace function testfunc6() returns text as' my $result; foreach my $code ( 1..65535 ) { my $char = pack "U", $code; my $ucs2 = sprintf "%04x", $code; if ( $char =~ /\p{InHiragana}/ ){ $result.= "$ucs2\t$char\n"; } } return $result; end;' language 'plperlu'; の場合、何も返って来ません。 ただし、 if ( $char =~ /\p{InHiragana}/ ){と、それに対応する} をコメントアウトしたら、文字化けコードも大量に含みますが、 値が返って来ます。
DBはEUC-JP、ロケールはCにしといたほうが無難。
195 :
NAME IS NULL :05/02/03 02:00:24 ID:us67hi8V
ロールケーキが何だって?
196 :
189 :05/02/03 04:50:07 ID:???
思考錯誤の末やっと問題解決
どうもperl5.8のユニコードの扱いの問題のようだった。
http://www.pure.ne.jp/~learner/program/Perl_unicode.html みたいに、UTFフラグを立てた文字列に対して日本語正規表現を書けてやればうまくいくようだ。
DBのエンコーディングは、、、とりあえず、UTF8文字列とマッチさせなきゃならないので、
もうしわけないがUTFのままです。
EUC-JPでも試してみたんだけども、perlの内部処理はUTF8でやってるようで、
で、関数の作成時にどうしようかなって問題があるんで、、、、。
create or replace function testfunc5(text,text) returns text as '
use encoding ''utf8'';
my $test = $_[0];
my $wide_char = Encode::decode("utf8", $test);
if($wide_char =~/\\p{InHiragana}/){
return ''success''';
}
else{
return ''not match'';
}
end' language 'plperlu';
test2=# select testfunc5('阿あ','');
testfunc5
-----------
not match
(1 row)
test2=# select testfunc5('あ','');
testfunc5
-----------
success
(1 row)
ちなみに置換もだいたいこの応用(正規表現部分の書き換えだけ)で行けました。
197 :
189 :05/02/03 05:10:27 ID:???
create or replace function testfunc5(text,text) returns text as ' my $test = $_[0]; my $wide_char = Encode::decode("utf8", $test); if($wide_char =~/^\\p{InHiragana}$/){ return ''success''; } else{ return ''not match''; } end' language 'plperlu'; 間違えた。こちらのすくりぷと。 いろいろ試すためにごちゃごちゃしたのつけてて、整理して貼ってたんで 余計な物まで消してしまっていた、、、、。
198 :
189 :05/02/03 05:25:47 ID:???
EUC-JPのDBサーバーに対して試してみた所 \\p{InHiragana}見たいなメタタイプだと問題が起きなかったのですが、 create or replace function testfunc5(text) returns text as ' use utf8; use encoding ''utf8''; my $test = $_[0]; my $wide_char = Encode::decode("utf8", $test); if($wide_char =~tr/ぁ-ん/ァ-ン){ return $wide_char.''success''; } else{ return $wide_char.''not match''; } end' language 'plperlu'; のようにじっさいにもじをうちこんでみると、ぁ-んを クライアント側がEUC-JPでおくってみても、UTF8で送ってみても ERROR: invalid byte sequence for encoding "EUC_JP": 0x812d となりました。 use euc-jp use encoding ''euc-jp''; をつけたり外したりしてもエラー変わらず。 まあ、とりあえずUNICODEサーバーで日本語正規表現使える事確認できたので。 おいらはこれでおわりにします。。。
199 :
189 :05/02/03 05:36:00 ID:???
あ、正規表現の/忘れも気づきましたが、これを加えてみても結果変わらずでした。
200 :
NAME IS NULL :05/02/04 18:57:52 ID:VjNijk/8
bis_test=# select round((1343/5501),9); round ------------- 0.000000000 (1 row) bis_test=# select round((5/1),9); round ------------- 5.000000000 (1 row) 小数点以下になる計算をすると0になってしまいます、、、、
>>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)
=# select round((1343.0/5501),9); round ------------- 0.244137430
INDEXについてですが、主によく検索するキー(whereで使うキー)を INDEXとして貼りまくってるのですが、皆さんはどのような基準で貼られているか 教えていただけますでしょうか。あまり値の変化がないものに貼っても意味がないとか いろいろ聞くのですが、いまいちピンとこないのです。
検索して速くなるものについて張る。 速くならないものに張ってもDML文が遅くなるだけなので張らない。
>>204 その基準だと、ある程度の規模になると破綻しそうだな
どのカラムにインデックスを貼るかは テーブルもしくはシステム全体の設計時点で決まるってことじゃないの。 そのまま貼っても速くならないなら貼らなくていい、で済むのならいいけど、 普通速くなるような設計にするわな。
208 :
204 :05/02/07 22:50:35 ID:???
>>208 お前みたいな先輩(上司)がだめな奴(とその結果のだめなコード)を
大量生産してるんだろうなあ。
210 :
NAME IS NULL :05/02/07 23:45:53 ID:O1kAgblR
数秒おきにUPDATEかましたら xreaにおこられちゃった▼・ェ・▼ワン♪
211 :
NAME IS NULL :05/02/08 01:02:11 ID:/tyDpKiS
DELETEやUPDATEしたとき、元のデータは物理的には削除されませんよね? そのoidを知っていればデータを見ることは出来ますか?
212 :
203 :05/02/08 16:18:07 ID:???
レスして頂いた皆様ありがとうございます。 商品マスタなら商品コードにPrimaryKeyを持たせたり、そういう主な部分は分かるのですが その他の例えば、検索フォームからキーになるようなものも全部つけたほうがいいのか等、 基準がまだよく見えてないのです。explainを使ってINDEXが使われたかどうかのチェック等をして INDEXの設計をやっていくのでしょうか?
すみません。質問させてください。 データテーブルTable1とマスタテーブルTable2があったとして Table1に商品Aと商品Bの商品コードが格納されていて、 マスタテーブルTable2から商品名を取得しようと思うのですが、 どのようなjoin文にすればよいのでしょうか? select * from table1 inner join table2 on (table1.商品A = table2.商品コード) inner join table2 on (table1.商品B = table2.商品コード) だとエラーが出てしまいます・・・・。
すみません。table2にエイリアスを与えることで解決しました。
215 :
NAME IS NULL :05/02/10 13:59:02 ID:Qz7FoCOW
ごく基本的ですみませんが,質問です. CSE で PostgreSQL に接続すると,システムテーブルらしきものまで 全部表示されてしまいます. どうしたらユーザの作成したテーブルだけを表示するようにできるでしょうか?
設定の、システムオブジェクトがどうのこうの
>>216 ありがとうございます.
CSE の設定の「PostgreSQL」に,「システムオブジェクトを表示する」という
項目がありました.
そのチェックをはずすことで,うまく行きました.ありがとうございました.
>>217 そんなごくあたりまえの結果報告が出来る質問者も最近見掛けなくなったな。
>>213 select table1.必要なカラム,table2.必要なカラム from table1,table2
where table1.商品A = table2.商品コード or table1.商品B = table2.商品コード
221 :
NAME IS NULL :05/02/11 16:25:48 ID:+y2Elq3k
where句の一個目の条件しかインデックスが利かないってホント?
ウソです。
部内システムだし、今あるオラクルのシステムをPostgreSQLに移行を 検討しているのですが、DWH的な使い方は問題ありませんでしょうか。 OPEN OLAPとかすでに出ていますが、PostgreSQLにオラクルの ビットマップインデックス等DWH向きの機能が無いように見えるので 気になります。 DWH的な使い方で使用感、アドバイス等お願いします。
OracleもMySQLもPostgresも使ってるけど(Mysqlは4.1からは凍結決定した) ビットマップインデックスやOracleTextとか 使いこなしてる人だと正直移行しないほうがいいと思う 規模を考えて何度もレスポンスやスループットを計算、テストしてみて 実用になるかどうか判断して投入するのがオープンソースのDBだと思ってくれ ただだからと飛びつくのは止めれ でもマシンパワーの向上とPostgresの高機能高速化で新規案件は Postgresを採用しているケースは多い
>>224 アドバイスありがとうございます。
>規模を考えて何度もレスポンスやスループットを計算、テストしてみて
>実用になるかどうか判断して投入するのがオープンソースのDBだと思ってくれ
それはそうですね。
OLTP系であればテストして判断します。
実際小規模ではMySQLもPostgreSQLも利用しています。
今回お聞きしたのは調べた限りではDWH系の機能がなさそうに見えたんですが、
BI系ツールも出てきたので、実際DWH系で利用されている方の意見を聞きたかった
ためです。
DWH系の機能がないのであれば、調査するまでもなくDWH系での利用は
時期早々ということになるかと思います。
フリーのであればOpenOLAPぐらいか…? そういえば、実務で使ってる人っている?
フリーのプロダクトの安定性はユーザー数に単純に左右されやすいからなぁ
フリープロダクトの安定性は、そこにつっこまれた金額に左右されるんだよ。
フリープロダクトの安定性は、そこにつっこまれた手弁当に左右されるんだよ。
フリープロダクトの安定性は、そこに入ったMSのツッコミに左右されるんだよ。
フリープロダクトの安定性は、カワイイ娘からの応援メールに左右されるんだよ。
233 :
NAME IS NULL :05/02/13 02:30:09 ID:AE3EcMav
PostgreSQL 7.2.x な環境でプライマリキーのインデックスを作り直すために -- DROP INDEX hoge_pkey; ALTER TABLE hoge ADD PRIMARY KEY (id); -- とやっているのですがALTER TABLEの際のインデックス作成中にpsでプロセスを確認すると関係ないテーブルのUPDATEがすべてWAITING状態なんです。 ALTER TABLEって全テーブルをロックする仕様なのでしょうか? ちなみにアプリケーション内では明示的にLOCK TABLEはやってないです。
1つ質問があります。 SSH経由でpgAdminIIIからリモートのDBサーバ(PostgreSQL 8.x)に 接続することは可能でしょうか? pgAdminIIIの検証を行っているのですが、 pgAdminIIIがインストールされている端末上にある ローカルのpostgreSQL8については接続できることを確認しています。 ご存知のかたがいれば、情報よろしくお願いします
昨晩SSHで5432を転送して使ったよ 7だけど。
236 :
NAME IS NULL :05/03/02 22:55:53 ID:IksncMCE
質問です. PL/pgSQL で,group by で使われる集約関数を書くことはできるのでしょうか? 具体的には,複数レコードの文字列カラムを,カンマ区切りで結合した値に まとめることのできる関数を作りたいと思っています.
237 :
236 :05/03/02 22:59:08 ID:IksncMCE
例をあげます. 1 'aaa' 1 'bbb' 1 'ccc' 2 'ddd' 2 'eee' これを 1 'aaa, bbb, ccc' 2 'ddd, eee' という集約ができるような関数を作りたいのです. どうかよろしくお願いします.
plpgsql 集約関数 でぐぐると幸せになれるよ。
239 :
237 :05/03/03 10:56:30 ID:???
240 :
237 :05/03/03 10:58:16 ID:???
お礼にはなりませんが,自分の作った関数を晴らせていただきます. まあ,先のリンク先とほとんど同じなのですが. -- カンマ区切りで CHAR 同士を連結するストアドファンクション CREATE OR REPLACE FUNCTION concat_comma(CHAR, CHAR) RETURNS CHAR AS ' BEGIN IF $1 IS NULL THEN RETURN $2; ELSIF $2 IS NULL THEN RETURN $1; ELSE RETURN $1 || '', '' || $2; END IF; END; ' LANGUAGE 'plpgsql'; -- カンマ区切りで CHAR の値を連結する集約関数 -- 従来の SUM などと同様に使う. CREATE AGGREGATE CHAR_COMMA_SUM (basetype = CHAR, sfunc = CONCAT_COMMA, stype = CHAR);
>>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;
242 :
237 :05/03/04 12:30:30 ID:???
>>241 なるほど,配列を要素に持つ PostgreSQL ならではですね.手続き型言語によくある
配列の join 関数と同じですね.ありがとうございます.
私は PostgreSQL の配列は,第一正規化に反するので好きではなかったのですが,
この使い方は面白いですね.まあ,カンマ区切りで結合するのも正規化に反するの
ですが.
WindowsのPostgreSQL8.0でデータの自動バックアップ出来ないかな?
?
自動バックアップのバッチ組んでタスクスケジューラで…
タスクスケジューラがあったか。ありがとさん。 サービスプログラム作る必要があるかと思ったけど、そっちの方が楽だね。 後は環境変数PGUSER,PGPASSWORDに・・・(以下略)。
>>246 継承されません。
ユニーク制約も継承されないので、
基底テーブルのカラムにユニーク制約をつけても
派生テーブルから同値を挿入することが可能だったりする。
249 :
246 :05/03/07 22:03:01 ID:???
>>248 やはりそうなんですか・・・
そうなると、基底テーブルを使うことによるメリットって薄そうですね。
こういった制約などが継承されるのであれば、いろんなメリットを見出せるんですけどね。
>>249 マニュアルには将来改善される感じに書いてあるが、
継承が有用か十分注意せよとも書いてあるなw
251 :
NAME IS NULL :05/03/12 14:56:30 ID:EU6oYWx7
SELECTの際、レコードの他に、ヒットした行の総数を同時に取得する方法はありますか? 開発環境としては PHP を使っています。 実はとある情報の検索画面を作っているのですが、検索結果は1画面に20件程度表示して、ページ送りが できるようにしようと思っています。 このために LIMIT と OFFSET を使おうと思っています。 そして、検索結果として、ヒット総数も表示したいのです。 COUNT を求める SELECT とレコードを得る SELECT を別々に発行する方法以外に、なにか便利な方法は ありませんか? 実はまだ試してはいませんが、自分で考えた方法もありまして、LIMIT を使わずに SELECT を発行して、 Pg_Num_Rows でレコード総数を取得して、Pg_Fetch_Array で取得行番号を指定して表示対象レコードを 切り出す、なんてやり方なのですが、パフォーマンス的にはどうでしょう?
件数とかいろいろな要素があるけど、 まず、ページ送りをするまでの間に新たなレコードが 挿入された場合どうするのか、というところが重要かな。 前者の方法だと、count()を毎回やるのか、とか。
>>252 >ページ送りをするまでの間に新たなレコードが
>挿入された場合どうするのか
トランザクション内で処理すれば問題ないでしょ。
254 :
251 :05/03/13 01:47:52 ID:???
>>252 ページ送りしてる間にヒット数が変わったら、表示もそれに追従する必要があります。
ですので、毎回 COUNT() を求めます。
>>253 ウェブアプリなので、一ページ切り出すごとにトランザクションは終了します。
google でページを送るような感じです。
ようするに、SQL だけで解決しようとすると、次のように
SELECT COUNT(*) FROM xxx WHERE xxxx・・・;
SELECT * FROM xxx WHERE xxxx・・・ ORDER BY xxx OFFSET xx LIMIT xx;
みたいに、COUNT取得用とレコード取得用のSQLを別々に発行することになるのかと思います。
ただ今回は、この方法にはちょっと抵抗があります。
というのは、複雑なクエリなので、1ページ切り出すごとに重い検索を 2回もやりたくないからです。
かといって
SELECT * FROM xxx WHERE xxxx・・・ ORDER BY xxx
みたいに、LIMIT しない全件取得の SQL を発行して、アプリ側で pg_fetch_array により対象範囲を
切り出す方法だと、カウントとレコードを同時に取得できるものの、無駄なレコードの転送が発生しないか
どうかが気になるのです。
ということで悩み中なのですが、アドバイスよろしくお願いします。
>>254 >みたいに、LIMIT しない全件取得の SQL を発行して、アプリ側で pg_fetch_array により対象範囲を
>切り出す方法だと、カウントとレコードを同時に取得できるものの、無駄なレコードの転送が発生しないか
>どうかが気になるのです。
無駄なfetchは発生するだろう。で、通常ヒット数は何件くらいなの?
元のqueryの「重さ」にもよるが、それなりの時間がかかるなら全件fetchした方が
速いような気はするが。つうか試せ。
256 :
251=254 :05/03/14 12:20:16 ID:A/eX/gkS
検索の内容は、多テーブルの結合や文字列の部分一致検索などを含むものです。 総レコード数は 1万件前後だと思いますが、ヒット件数は最大全部、通常は数百件前後になるのではないかと思います。 子テーブルに階層構造があってテストデータを作るのが一苦労でして、あまり規模の大きなテストデータを用意しづらい ことから、実際に両方式を試して比較しても、いまいちハッキリしないという状況です。 でも、SQL は 1回だけ発行する方式を採用してみました。 ありがとうございます。
257 :
GrassWonder :05/03/14 13:09:49 ID:PmfSDFy+
postgres で SELECT した結果に対して、1からの通し番号フィールドを 付けることってできるんですかねぇ?? 知ってる人居たら、教えてください!
件数カウントと必要部分抽出の共存と言うか、 (重い)queryの2回(以上)発行を回避する方法を 皆さんどうやっているのか俺も知りたいところ。 ちなみに俺は、CREATE TABLE TEMPORARY TABLE AS SELECT... でテンポラリテーブルを作ってから合計値と必要部分の1ページ分を 抜き出すようにしている。
>>257 テンポラリシーケンスを作って、
SELECT nextval('temp_seq'),* FROM Table;
テンポラリテーブルなんて使ったら、余計重くなるなんて話は無いんですか? テンポラリテーブルはオンメモリで処理されたりするんでしょうか?
262 :
258 :05/03/14 18:54:52 ID:???
CREATE TEMPORARY TABLE temptable AS SELECT...
だよ。何書いてたんだ俺...
>>260 メモリは有限なんで必ずオンメモリで処理されるとは限らんわな。
俺の場合50万件ぐらいから数100件を抜き出した感じだったんだけど
どのくらい速度差がでたかは忘れたが、遅くなるってことはなかった。
てか、総件数や合計値を知りたいだけじゃなくて、並べ替えとか
グループ分けをするなど、いろいろと表示方法を変えるとき
いったんテンポラリに落とした方がプログラミングしやすかったんだよぉ。
先のレスに書いたけど、効率のいい方法があるなら俺も知りたい。
263 :
NAME IS NULL :05/03/15 04:57:14 ID:LMNlBsry
次のような、2つの数値カラムを持つテーブル TBL に値が入っています(値は適当です)。 ID1 ID2 1 1 1 2 1 3 1 4 2 1 2 3 2 5 2 7 このとき、ID2 にたとえば 1,2,3 の全てがある ID1 を取得する SQL はどのようになるでしょうか? SELECT ID1 FROM TBL WHERE ID2 IN (1,2,3) GROUP BY ID1 HAVING COUNT(ID1)=3; みたいにやると取得できるのですが、もっと単純な方法はありますか? また逆に、1,2,3 の全てを含まない ID1 を取得する SQL はどのようになるでしょうか?
>263 ID2がユニークならそのSQLでOKだがそうでないと1が3回とかでも引っかかっちゃうぞ。 ケータイなんでSQLは書かないけど普通セルフジョインだ罠。
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) って単純じゃあねーな。
266 :
263 :05/03/15 23:29:14 ID:???
>>264 ID1 と ID2 の組み合わせでユニークです。
>>265 正攻法って感じですね。とりあえずはそういうアプローチが自然だと思います。
ただ、やりたいことの割にSQLが複雑になるのが難点なんですよね。
なにかSQLの便利文法や関数みたいのって無いものですかね。
さっきまでまともに動いていたのに、 引数に平仮名カタカナ日本語が使えなくなった。 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) 文字化けと言うことでエンコーディング周りかなと思ったのですが、 何を疑ったらいいでしょう?
訂正、文字コードを変えてやっても、変わり無し、です。
269 :
267 :05/03/16 00:23:57 ID:???
emacsからの操作をしてたのですが、一度試しにkonsole (KDEのターミナル)から操作してみましたら、正常稼働。 で、ひょっとしてemacsのSQLモードが原因かなと思って、 emacs自体を落して、再起動させてみたら、正常稼働。 emacs側の問題でした。何が原因かはちょっとわかりませんが、、、。 すみません。
>>269 正直にレスするのは大事なことだよね。乙。
すみませんが,質問です. PostgreSQL 7.3.4 で,Timestamp 型のカラムから java.sql.Date 型の 値を得たいのですが,ResultSet#getDate() だと時:分:秒が全てゼロに 切り捨てられてしまいます. 時:分:秒まで取得するためには,以下のようにするしかないのでしょうか? new Date(ResultSet#getTimestamp("カラム名").getTime()); それとも,JDBC ドライバを変えるなどして,そのまま getDate()で 取れたりするのでしょうか? 現在使っているドライバは org.postgresql.Driver というものですが, 詳しいバージョンなどはわかりません.
getTimeStampで取得すればいいだろ Dateは日付だけだしTimeは時刻だけ 何もおかしい動きではないと思うが
273 :
271 :05/03/17 21:00:01 ID:???
>>272 ありがとうございます.これが PostgreSQL の仕様なのですね.
PostgreSQL の TIMESTAMP 型は,MySQL だとDATETIME 型になりますが,
それの ResultSet#getDate() は時:分:秒を切り捨てませんので,
PostgreSQL も同様だと思っていました.
new Date(ResultSet#getTimestamp("カラム名").getTime());
この書き方は,耐えられないというほどでもありませんが,やや冗長です.
もう少しきれいな書き方はないものか,とは思います.
>>273 3種類ともDateを継承してるからな
実装によっては余計なのもはいるのかもしれないが、入ってる部分を期待するのはどうかと思うぞ
あとそんな冗長な書きかたしなくてええ
275 :
271 :05/03/18 11:22:26 ID:???
>>274 ああそうか,受け手の setter の引数を,java.util.Date 型にすれば,
Timestamp 型をそのまま渡せるのですね.
困ったな,今まで気づかずに,どのメソッドも java.sql.Date 型にして
しまってます.
まあ,何とかします.ありがとうございました.
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 にすればうまく行きますが、 これだと、「こちらで用意した複合型を引数にさせる」と言う目的が果たせないので、、、。
277 :
NAME IS NULL :2005/03/23(水) 11:21:48 ID:1/N/aqtf
こっちでいいと思うのですが PHPからPostgreSQLに接続したいんですが ホストをlocalhostにして接続するとつながりません。 ホスト名を指定しなければ(空白で)繋がります。 繋がるときのリソースからホスト名を返しても空白なんですが PostgreSQLのホスト名ってどこで指定するのでしょうか? postgresql.confの中?
>>277 tcpip_socket = true
279 :
277 :2005/03/25(金) 09:44:18 ID:iOUir/Em
280 :
NAME IS NULL :2005/03/30(水) 10:18:15 ID:uLYJQsQ+
PostgreSQLが使える レンタルサーバでおすすめってないですかね? とりあえず今はWebARENA Suiteを使って そこそこ満足してるのですが 古いサービスのためWeb側の機能がしょぼくて、、、 他にお勧めがありましたら教えてください
Windows2000で postgresql-8.0-ja.msi を実行すると「インストールの準備中...」で終了してしまいます。 英語版では言語選択が出てインストールログが取れたので見てみたら 「Custom Action GetAvailableLocales did not close 1 MSIHANDLEs.」 というエラーを吐いています。。。 同様の症状の方っています?
>>281 pathにcygwin/binが入ってるとなる
283 :
NAME IS NULL :2005/04/06(水) 22:55:14 ID:aqdN+9wz
今さらですが、Access2000をフロントエンドにして、PostgreSQLを 使うことになったのですが、ODBCドライバは、インターウィズで配布されている 日本語版を使えばいいのか、それとも公式サイトの最新版を使えばいいのか、どっちなんでしょうか? 日本語版の更新履歴はずいぶん古いようだけど・・・? 公式サイトのは、char型(1)にデータを「あ」と入れたらDBへのアクセスがおかしくなってしまった。 そんなこんなでちょっと迷っています。ググっても、古そうな情報しか出てこないみたいだし。 ちなみに、Linux(CentOS3.4)、PostgreSQL7.4.7です。
284 :
NAME IS NULL :2005/04/07(木) 18:00:10 ID:ZEIZCCOj
PostgreSQL用のJDBCドライバって どのサイトに置いてありますか?
postgresql jdbcでぐぐれば一番上に出てきませんか?
286 :
NAME IS NULL :2005/04/07(木) 20:18:11 ID:cykybgSh
質問です。
PHP環境でテーブルの中のデータを抜くときに
for ($s == 0; $s <= 100; $s++) {
if (!pg_fetch_result($result, $s, 0)) break;
$key = pg_fetch_result($result, $s, 0);
echo $key;
}
と、ループさせて、データが見つからなかったらbreakするように
しているのですが、これだと
Warning: pg_fetch_result(): Unable to jump to row 2 on PostgreSQL
result index 3 in "if (!pg_fetch_result($result, $s, 0)) break;の行"
というエラーが出てしまいます。
pg_fetch_result()では、存在しないフィールドを指定すると
エラーが出てしまうのでしょうか?
何か解決策があればご教授願えれば幸いです。
どうやら
http://ns1.php.gr.jp/pipermail/php-users/2003-August/017901.html これと似ている状況らしいのですが、レスがついていないため
いまいち何が原因でエラーが出ているのかわかりません。
ご教授は出来ませんが、pg_num_rows()で行が存在するかチェックしたら?
>>286 pg_fetch_result()なんて使った覚えないけど、エラーが出てんなら、そうなんだろうな。
どうしてもpg_fetch_result()を使うのなら、@をつけるとか。ついでに無駄も省いて。
for ($s == 0; $s <= 100; $s++) {
if ( ! $key=@pg_fetch_result($result, $s, 0)) break;
echo $key;
}
289 :
286 :2005/04/08(金) 16:20:35 ID:???
>>287 そですね、行数を調べるのが一般的なやり方ですね。
ありがとうございます。
>>288 ありがとうございます。
@をつけたらエラーが出なくなりました。
290 :
質問 :2005/04/11(月) 18:58:50 ID:???
初心者な質問で恐縮ですが、 ACCESS の データを Postgre にエクスポートする 方法をどなたか教えて下さいm(_ _)m
文字コード関連の質問です。以下が当方の環境です。 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インストール時に上書きされた気がします。) ご存知の方、宜しくお願いします。
292 :
291 :2005/04/12(火) 14:12:00 ID:???
上の質問をしたものです。 その後、2は解決しました。 やはり、PgAdminIIIがlibpq.dllを上書きしたのが原因だったようなので、CSE用のlibpg.dll(6.5付属日本語版)は\windows\system32\ではなくCSEのインストールディレクトリに入れて、アプリによって使うlibpq.dllが変わるようにしたところ問題なく動作しました。 しかし1は未だに未解決です。2が解決したので問題ないと言えば問題ないのですが、pg_dumpの結果が文字化けしまくりなのが、やはり怖い…
293 :
NAME IS NULL :2005/04/13(水) 10:26:24 ID:r7emTefn
別スレにも書いたのですがレスがなかったのでお願いします。 Oracle8iからPostgreSQL8.0に移行しているのですが、外部結合がよくわかりません。 (A) SELECT * FROM A,B,C WHERE A.xxx = B.xxx (+) AND A.xxx = C.xxx (B) SELECT * FROM A LEFT OUTER JOIN B ON A.xxx = B.xxx, C WHERE A.xxx = C.xxx (A)と等価なSQLは(B)でよいのでしょうか。 (B)では、 A LEFT OUTER JOIN B ON A.xxx = B.xxx をひとつのテーブルとして見ているような気がして、 where以下に条件が必要なのか自信がありません。 あと、FROM句で下のようにCを前に出すと、外部結合が AだけでなくCにもかかるのでしょうか。 C, A LEFT OUTER JOIN B ON A.xxx = B.xxx
>>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行分の結果が返ってしまうよ。
295 :
NAME IS NULL :2005/04/13(水) 12:02:42 ID:r7emTefn
>>294 抽象的なサンプルでもうしわけないです。
>>294 さんの、ちゃんとした書き方の方向で考えてみます。
ありがとうございます。
296 :
294 :2005/04/13(水) 14:54:56 ID:???
>>295 「ちゃんとした」ってのは語弊があるかな。
SQL92の書式とそれ以前の書式の混在が気になっただけ。
OUTERとかINNERとかは、大概(少なくとも俺は)省略するから、
SELECT * FROM A
LEFT JOIN B ON A.xxx=B.xxx
JOIN C ON A.xxx=C.xxx;
で済ましている。
まぁ、書き方と言うか、SQL9xの表記を理解した方がいいんじゃね。
297 :
NAME IS NULL :2005/04/13(水) 23:27:06 ID:O1kEf2yg
【Postgresql8.0.1でodbc接続ができない】どなたかご教授お願いします。
エラーメッセージ⇒Could Connect to remote socket(#101)[Microsoft][ODBC...
@ pg_hba.conf の設定
----------------------------------------------------------------
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
#-------------------------------------------------------------------------------
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host testdb01 all 192.168.1.2/20 trust
----------------------------------------------------------------
A ODBCドライバは、
http://www.interwiz.koganei.tokyo.jp/ から入手したもので、データソースのユーザには
postgres と、そのパスワードを指定しました。
※postgresql-7.3.4 の場合は
http://park15.wakwak.com/~unixlife/java/tomcat40-linux.html で、
postgres.confの以下を変更します。
#tcpip_socket = false
tcpip_socket = true
とあったのですが、
postgres.conf のなかで、tcpip_socket を検索しても見つからない
※また、postmaster の起動は、
$ pg_ctl start -o "-i" で起動してもだめでした
どなたか、ご教授お願い致します
FC3 をはじめたばかりのものです。
>>297 > host testdb01 all 192.168.1.2/20 trust
localhost(127.0.0.1)で接続しているとか?
299 :
NAME IS NULL :2005/04/14(木) 00:26:09 ID:fuAF7aqO
>>298 localhost(127.0.0.1)で接続しているとか?
さっそくのれす、ありがとうございます。
データソースのサーバ名には、DDNSで指定したドメイン名と
IPアドレス(192.168.1.XX)を指定してやってみましたが
どれもだめでした。
>>299 あー8.0.1なのね。使ったことないけど多分この辺だと思われ
<<postgresql.conf>>
listen_addresses (string)
サーバがクライアントアプリケーションからの接続を監視するTCP/IPアドレスを指定します。
この値は、カンマ区切りのホスト名かIPアドレスもしくはその両方のリストという形を取ります。
*という特別な項目は利用可能な全てのIPインタフェースに対応します。このリストが空の場合、
サーバはIPインタフェースの監視を全く行いません。この場合は接続にUnixドメインソケットのみが使用されます。
デフォルト値はlocalhostであり、ローカルな"ループバック"接続のみが可能です。
このパラメータはサーバ起動時のみ設定可能です。
301 :
NAME IS NULL :2005/04/14(木) 01:34:14 ID:fuAF7aqO
>>300 あー8.0.1なのね。使ったことないけど多分この辺だと思われ
さっそくのれす、ありがとうございます。
postgres.conf の listen_addresses を以下のように変更してつながりました!
#listen_addresses = 'localhost'
↓
listen_addresses = 'localhost,192.168.1.xx'
ありがとうございました。
質問です。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 でも同じでした。
質問です。 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 にでも変換するかな、と考えてます。 ただ、それでうまくいったとしても上記の問題の原因・解決法は知りたいので、 お暇な方いらっしゃったら是非ご教示お願いします。
>303 ・変更が頻繁に起こるフィールドのインデックスを、最小値に保つことは出来ない と思う。(でテーブルの件数を少なくするか、逆に上限を1Gにする) ・対象フィールドを更新しないようにする(少なくする)。table構造を見直す REINDEXで結果的にDiscは減るが、作業時Discが若干増える。 ので念のためVACUUM FULLを先の方がベターかな
306 :
NAME IS NULL :2005/05/03(火) 02:56:08 ID:smoskI+Q
>>304 遅レスなうえ、的外れかもしれないけど。
クライアント側のコードが問題なのでは?
戻そうとしているデータはEUCだろうけど、クライアントがWindowsならば違うから。
リストアするときはSET CLIENT_ENCODINGでEUCに変更してはどうでしょう。
もしくはLinuxのpsqlで接続してリストア。
見当違いだったらすみません。
遅レスってたった2レスじゃん、とか思ったが半月たってたのね・・・
308 :
NAME IS NULL :2005/05/12(木) 11:51:08 ID:5/YL5pSd
どなたか、PostgreSQL8用のODBC ドライバのありかってご存知ないですか?
7.05.0001 のままじゃ使えないの?
310 :
309 :2005/05/12(木) 12:06:27 ID:???
>>309 いや、ちょっとODBC経由で問題があってV8用ならどうだろうと・・・
どっちでも変わらないという結果でした。
>>310 ありがd。助かったっす。
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を使ってます。
どなたか、解決方法をご教授していただけませんでしょうか。
314 :
NAME IS NULL :2005/05/14(土) 19:27:25 ID:I+81aSyr
ウンチ
315 :
NAME IS NULL :2005/05/14(土) 22:39:03 ID:34naW8Or
Postgres8のJDBCフォルダに3つ(2、2ee、3)がはいってるけど WinでPathに設定するのはどれ?それともフォルダのパスをPathに設定すれば使える? 初心者すぎる質問でごめんなさい。
答えは 3.
>>313 psql -l でDBはちゃんとEUC_JPになってるか?
なってるなら・・・
ODBC変えろ
それでだめならODBCの設定のデータソース-設定2-接続時設定に
set client_encoding to sjis
とかいれてみ
318 :
317 :2005/05/15(日) 12:36:32 ID:???
すみませんが質問です. RULE を使って,NOT NULL 制約と同じ機能のものを実装することはできるでしょ うか? 1つのテーブルに2つの VIEW を作って,一方の VIEW に挿入するときと,もう 一方の VIEW に挿入するときとで,NOT NULL となるカラムを変えたいのです.
320 :
319 :2005/05/27(金) 17:01:42 ID:???
どうもできないようですね.よく分からないのですが,ルールは NOT NULL 制
約のようにエラーを発生させることはできないのでしょうか?
http://www.postgresql.jp/document/pg734doc/programmer/rules-triggers.html 別の質問です.PostgreSQL で挿入,更新したいテーブルが2つある場合,セッ
トされる値の範囲によって,更新の対象となるテーブルを切り替える,といっ
たことはできるのでしょうか?
例えば,特定のカラムにセットされる値が 0 ならば Table0を,1 ならば
Table1 を対象に更新する,といったことです.
最初は pl/pgsql の関数を書けば何でもできると思っていたのですが,INSERT
文は与える引数が一通りに定まらないので,これを関数で代用するのは無理で
した.(考えられる引数の組み合わせ全てについて関数をオーバーロードした
りすれば可能でしょうが,場合の数が多すぎて,現実的ではありません)
次に,INSERT INTO (テーブル名)のテーブル名を,CASE 文で切り替えられ
ないかと試してみましたが,この個所にはテーブル名そのものを書かないと
Syntax Error になりました.
以上です.どなたかよろしくお願いいたします.
322 :
319 :2005/05/27(金) 20:23:34 ID:???
>>320 は CREATE RULE の WHERE 条件節を利用することで実現できることがわ
かりました.
>>319 も同じような方法で実現できそうです.こちらはまだ試し
ていませんが.RULE はものすごく強力ですね.PostgreSQL を使うなら必須と
言えそうです.
(
>>320 のサンプルコードを書いてみましたが,長くなるのでここには貼りま
せん.もしどなたかからリクエストがあれば,貼らせていただきます)
---------
>>321 私もよく知りませんが,過去ログを見ると,こちらのスレはもともと
PHP 板の発祥で,向こうは DB 板で始まって,両者が統合されていないという
ことのようです.まあ向こうはスレッドタイトルが間違っているのですが.
× PostgresSQL ○ PostgreSQL
323 :
319 :2005/05/27(金) 20:56:33 ID:???
蛇足です.このスレに参加されている方に,Lisp をご存知の方はおられます か? PostgreSQL の RULE は,Lisp のマクロにあたるものだと,いまさらながら気 づきました.もともと Postgres は Lisp で書かれていたそうですから,作成 者は当然,Lispマクロの凄まじいまでの強力さを十二分に理解しており, Postgres にもその力を少しでも持たせたかったのでしょう. ということで,PostgreSQL のプログラミングでは,他のDBと違い,マクロが 書けるわけです.考えただけでもワクワクする話ではありませんか. 以上,蛇足でした.おかしなことを書いてすみません.失礼します.
muLISP
325 :
304 :2005/06/06(月) 10:44:55 ID:???
>>306 レスありがとうございます。
さらに遅々としたレスで申し訳ありません。
何もしなければ、psql コマンドは SJISファイルが渡されてきてるもんだと期待しているわけですね。
環境変数なおして上手く通りました。単純かつ当たり前のことでしたね。
迂闊でした。。
326 :
age :2005/07/01(金) 19:37:29 ID:???
カラム a に hello を入っていて、 カラム b に hell と入っているとします。 select * from t1 where a like '%hell%'; と同じ意味で select * from t1 where a like '%'.b.'%'; みたいなことがしたのですが、 select * from t1 where a like '%b%'; と解釈されます。うまい方法はないでしょうか?
327 :
NAME IS NULL :2005/07/01(金) 19:39:58 ID:pFeBRZhx
age
>>326 select * from t1where a like '%' || b || '%';
ありがと!
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%'; みたいにする方法ありますか?
>>330 t2.b LIKE '%' || CASE WHEN t1.a='a' THEN 'hell' END ||'%';
かな? 試してないけど。
補足。 WHERE句内では、ターゲットリストに渡る前に判断される為、 ターゲットリストに書かれた別名(出力名)は使えない。 #と、俺は解釈している。
>>331-332 なるほど!
|| の間に case を書くのか。全く思いつかなかったよ。
ありがと!
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文で記述することは可能でしょうか?
>>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にデフォルト設定してもいいけどな。
336 :
334 :2005/07/05(火) 01:43:29 ID:???
>>335 「no」はno1の間違いでした。すみません。
ありがとうございます、助かりました。
すみませんが、質問です。 「今週が誕生日」の人を取得する方法はどうしたら良いでしょうか? PostgreSQLのバージョンは7.34 です。 最初は extract(week from...)で良いかと思ったのですが、PostgreSQL の week は1月4日から始まるので、1月1日の週は1になったり53になったりで定ま りません。 ということで、月と日を愚直に比較するしかないと思うのですが、そもそも PostgreSQL で、今週の最初の日と最後の日を取得する方法がわかりません。 今日の曜日は EXTRACT(dow from...)で数字で返るのですが、この数値から今 週の開始日、終了日を取得する方法がわからないのです。 さらに、それが取得できても、まだ問題は残ります。週の開始日、終了日の doy を比較しようと思うのですが、うるう年だとこれが1日狂います。それを どう修正したらよいのかも分からないのです。 以上です。どなたかアドバイスをお願いします。
>>337 SELECT * FROM Table WHERE date_trunc('week',date_column) = date_trunc('week',now());
339 :
337 :2005/07/08(金) 18:44:18 ID:???
ありがとうございます。バージョンはいくつをお使いですか? SELECT date_trunc('week', NOW()); 上のコードは、8.0.1では動きますが、7.3.4では以下のエラーが出ます。 ERROR: TIMESTAMP units 'week' not supported
340 :
337 :2005/07/08(金) 18:55:58 ID:???
PostgreSQL のバージョンを上げることはできないのですが、仮に上げたとし ても、いただいた書き方では目的を達成できないようです。 SELECT date_trunc('week', timestamp'1970-07-08') = date_trunc('week', NOW()); => false あと、以下のコードを実行していただければ、week の切捨ての問題点がご理 解いただけると思います。 SELECT date_trunc('week', timestamp'2005-01-01'); SELECT date_trunc('week', timestamp'2004-01-01'); SELECT date_trunc('week', timestamp'2003-01-01'); SELECT date_trunc('week', timestamp'2002-01-01'); SELECT date_trunc('week', timestamp'2001-01-01'); SELECT date_trunc('week', timestamp'2000-01-01');
つーかそこまで挙動が分かってるのなら問題なく組めそうなもんだが
342 :
337 :2005/07/08(金) 19:39:38 ID:???
私も簡単に組めると思っていたんですが…。 結局、条件文は以下のようにしました。 WHERE date_trunc('day', birth_day) + date_trunc('year', age(birth_day)) BETWEEN ? AND ? 1行目で、生年月日から今年の誕生日の日付を取得し、2行目で今週の開始日と 終了日とで比較をしています。 2行目をPostgreSQLの関数だけで取りたかったのですが、無理のようなので Javaで求めてセットすることにしました。 どなたか、2行目をPostgreSQL 7.3.4 で取得する方法をご存知の方、どうかお 教えください。
そもそも曜日が分かればその週がはっきり分かると思うんだが 単純に日付の範囲でいいと思われ
344 :
337 :2005/07/09(土) 00:00:46 ID:???
すみません、ちょっと出ておりました。
>>343 その日付を取る方法がわからないのです。
曜日は取れます。
EXTRACT(dow FROM now()) => 5
日付をさかのぼることもできます。
DATE_TRUNC('day', now()) + INTERVAL '5 DAYS')
=> 2005-07-03 00:00:00+09
この二つを組み合わせるにはどうしたら良いでしょう?
SELECT DATE_TRUNC('day', now()) - INTERVAL EXTRACT(dow FROM now()) || ' DAYS'
=> ERROR: parser: parse error at or near "EXTRACT" at character 44
to_charをつかって文字列整形すればいいよ でもそこまでして見にくいSQL使うくらいなら プログラムからやったほうがいいだろうね
346 :
337 :2005/07/09(土) 01:56:31 ID:???
to_char()とは思いつきませんでした。確かにそれも一つの手ですね。ありが
とうございます。
ちなみに、
>>342 の1行目の後半には、バグがあるようです。このままでは、
date_trunc()は切捨てですから、今日より後の日付に誕生日が来る人は、今年
ではなく一年前の誕生日になってしまう。+ の右側の式に、切捨てではなく四
捨五入の関数が使えたらいいのに。
とりあえず、誕生日の範囲は1週間以内ですから、date_trunc()に与える式に、
+ INTERVAL '7 DAYS' をくっつけて解決することにします。ああ、アドホック
なコードだ…。
では、いろいろありがとうございました。
Java使ってるならJavaで普通に範囲を指定したほうがはえぇ
すぐバグとかいうやつは解決できないことがいろいろあるだろうな 本質を理解すれば、解決手段はすぐ出てくるのに
349 :
NAME IS NULL :2005/07/23(土) 11:15:26 ID:jrGs4b1P
postgreSQLをシェルから起動したいんですけど コマンド教えて下さい
su - pgsql
351 :
NAME IS NULL :2005/07/23(土) 11:21:24 ID:jrGs4b1P
>>350 具具ったらちょうど見付かりました
ありがとうございました
最もむかつく質問の仕方のお手本だな。
6分で見つかるものをわざわざここで聞いてんのか
linuxにPostgreSQLを入れようかと思ってます。 何か事前にやっておく設定とかありますか? もしかしなくても、すごいアホな質問かもしれませんが・・・
SharedMemoryの確認と、postgresユーザーを作ってインストールするのを忘れるな (インストール後にchownでもいいが)
あと、initdb のオプションは、 --encoding=EUC_JP --no-locale で。
最近はUTF-8な環境が多いど。
漏れはeuc-jpなdebianだがpgsqlのデフォは
8.0系に入れ替えたときにutf-8にした。
psql起動オプションでclient_encodingをeuc-jpに出来ないのが辛い。
>>354 後からなんとでもなるけど、環境変数とかも先に
セットしておいた方が、後々楽ってのもある。
>>357 環境変数PGCLIENTENCODINGは?
359 :
357 :2005/07/24(日) 18:46:56 ID:???
>>358 さんくす。それはしらなかった、それで出来たよ。
360 :
NAME IS NULL :2005/07/25(月) 07:22:05 ID:V5RJpM2v
初心者の質問ですが、テーブルを作った(できている)後に 主キーをつけることってできますか?できたらSQL文教えて下さい。
>>360 ALTER TABLE テーブル名 ADD CONSTRAINT インデックス名 PRIMARY KEY(カラム名);
>>361 速レスありがとうございます!
かなり助かりました。
インデックスを作ってVIEW経由で問い合わせるとインデックスが適用されないのは仕様なんでしょうか? VIEWを作るときのSELECT文をEXPLAIN ANALYZEすると適用されてるんですが。
>>363 VIEWの中で使われているのも含めて、クエリ内で使われるテーブルの数が
6テーブル以上になってないか?で、VIEWの中では5テーブル以下しか
使われてないとか?
366 :
NAME IS NULL :2005/08/04(木) 14:54:02 ID:/5+WAyrv
fedora coreでpostgreSQLを動かしています。 fedoraの文字コード設定はロケールをEUC-JPに変更しています。 そこで、postgreSQLにログインして、SQL文をうち、日本語のquery文を 書くと文字化けしたり、コマンドがおかしなことになる(ずれたりしておかしくなり、 CTRL-Cを押して、解除するしかなくなります。) どうすればいいか教えて下さい。 よろしくお願いします。
日本語パッチ当てたreadlineを入れてPostgreSQLのリコンパイルでどうか
>367 やっぱその時はpg_dump すべき?
readlineの入れ替えだけならDBはそのままで大丈夫ですよ。 もしかしたら、 soファイルの差し替えだけですむかもしれないし psql -n でreadline切って試してみるのもいいかもしれません。 私は、Solarisが多いのですが、よくreadline入れ忘れて 後からインストールして作り直したりしてました。 今はオプション入れないとreadline無しだとconfigureが止まりますね。
RH9 に入れてる PostgreSQL を SSL 対応にしようと思って configure にて --with-ssl ってオプション追加して リコンパイル したんですが、 pg_config --configure でみると、以前の configure の 内容のまま変わっていません。 失敗してるという事でしょうか?
>>370 以前makeした場所でそのままやり直したん?
make distclean
していないのジャマイカ。
つーか、config.log をじっくりみてごらん
373 :
NAME IS NULL :2005/08/12(金) 00:20:52 ID:8KrZv0NM
postgresql7.4.1についてなんですけど、、、 foo=#create table table_a ( id int, val int ); foo=#insert into table_a values ( 1, 1 ); foo=#insert into table_a values ( 1, 2 ); foo=#insert into table_a values ( 2, 1 ); foo=#insert into table_a values ( 3, 1 ); bar=#select * from dblink('dbname=foo','select id,sum(val) from table_a group by id') as t1( id int, val int ); ERROR: query-specified return row and actual function return row do not match ってことで、sumを使うとdblinkの結果を正しく取得できないのだけど、 これってsumの結果をちゃんとキャストできてないバグですか?
374 :
370 :2005/08/12(金) 09:44:21 ID:???
>>371 & 372
make distclean を実行して再度 configure したら出来ました。
ありがとうございました!
ポストグレスキューエルは幸せになれますか?
376 :
NAME IS NULL :2005/08/16(火) 09:01:14 ID:X4s8bmdR
プログラムで1万件のレコードn件目から1000件のレコードを取得する場合、 offset&limitを使ったSQLと、カーソルを使った場合では殆ど結果に差がないんですが、 プログラムの置いてあるサーバとDBサーバが別になると カーソルの方が極端に遅くなります。これって理由は何なんでしょうか?
377 :
NAME IS NULL :2005/08/16(火) 18:45:09 ID:OqDkzqJ9
ポスグレでヒントって与えられないんですかね? 強制的にインデックスを使用させたいんです。
>>376 サーバーカーソルかクライアントカーソルか・・・いずれにしろトラフィック
じゃないの。クエリも送らず全部サーバーDBにやらせ、結果だけ受け取れば。
380 :
NAME IS NULL :2005/08/16(火) 23:44:29 ID:v3DRyeQA
すいません質問なのですが、 windowsにcygwin + postgreSQLで運用をされている方、おられますでしょうか?
本番システムをそれで運用してる人はいないんじゃないか? 開発システムもほとんどWin32ネイティブに移行していると思われ。
382 :
380 :2005/08/17(水) 01:21:17 ID:???
>>381 大変参考になります。
ありがとうございます
ML見てると、それで運用してる人 まだまだいそうだけどね。 すでにデメリットしか見えないけどな
複数テーブルを結合して\copyでテキストファイルに書き出す方法はありますか?
begin; create temp table WORK as (select 〜 from 〜 ); copy WORK to WORK_FILE; rollback; じゃダメかい
ログに実行した全てのswlコマンドを記録するようには出来ませんか?
swlじゃないsqlです・・
できるよ
環境によっては膨大な量になるけどね postgresql.conf の log_statement を true に。 syslog回りは自分の環境に合わせて
/usrのディスクの容量が足りなくなって来たんですが、 /usr/local/pgsql/dataを、空きがいっぱいある/home以下に移動して シンボリックリンクを張っての運用って問題ないでしょうか?
何も問題ない。
シンボリックじゃなくても設定を少し変えれば他のディレクトリでも問題ないんだけどね
393 :
NAME IS NULL :2005/09/02(金) 05:26:33 ID:tvZu4i8z
Mac OS X v.10.3.5にPostgreSQLをインストールする予定ですが、一番安定 しているバージョンは何でしょうか? それと手始めに何をしたらよいですか?(Linux・unix初心者なのです…)
>>393 安定してるバージョンって言うか
8系と7系のどちらで行くかによるんですけど
将来的な事を考えると PostgreSQL8.0.3
互換や、他のソフト等で相性とかえて考えたくないなら PostgreSQL7.4.8でいいと思う
>>393 FinkとかDarwinportsを使うのが楽だにょ
データベースの容量で困っています。 本番環境で # du -b -s -k /usr/local/pgsql/data/ すると約5Gあるのですが、 このデータをdumpして、テスト環境にリストアすると、1Gくらいしかありません。 $ vacuumdb -f -a もやってみたのですが、容量は減りません。 このままではディスクが溢れてしまいます。 どなたか原因に心あたりのあるかたはいませんでしょうか。 バージョンは7.2.7です。
398 :
393 :2005/09/07(水) 03:41:53 ID:Ew4HgFdN
394,395さんありがとうございます。 PostgreSQL7.4.8でやってみようと思います。ちなみにPostgreSQL専用のアカウント の作成方法がわかりません(><) いちおー、CUIでやりたいと思うのですが…
>>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系と呼ぼう、
ってだけの話だ。
400 :
NAME IS NULL :2005/09/07(水) 22:02:54 ID:h4DOps4+
windows版 8.0.0で、日本語の単語(名詞動詞形容詞副詞etc)をつっこんでるんですが、 varchar(20)のカラムにインデックスをcreateしようとすると6時間とか掛かるんですが、 これって正常な動作なんでしょうか? Win2000 豚2500+ 512MEMORY 、work_memはやけくそで524228にしてまつ@postgres.conf (ただ、create実行中のタスクマネジャでは使用メモリが2400KBで仮想メモリが17000KBくらいでつ)
>>401 ×使用メモリが2400KBで仮想メモリが17000KB
○使用メモリが24000KBで仮想メモリが17000KB
403 :
401 :2005/09/17(土) 11:59:27 ID:???
行書くの忘れたorz 行は38万行くらいです
CREATE INDEX が使うのは maintenance_work_mem。
もしかしてpostgresql.confをpostmasterがちゃんと読んでないんでしょうか? dataディレクトリにあるpostgresql.confを編集しているんですが。。。(pgAdminIIIで編集)
>>406 再起動なり、設定ファイルのリロードなりは当然必要。
あと、WARNING系のログが出ていないかとか、スワップが起きてないかとか、
確認すべきことは山ほどある。
バカの一つ覚えのように許可メモリ量だけ増やしても逆効果。
もちろん再起動はしています。 異常な動作ということで、いろいろ調べてみます。どうも。
>>396-397 解決しました。
REINDEXしてもダメで悩んでいましたが、
max_fsm_pagesを大きく設定し直してvacuum fullすることで領域が開放されました。
ありがとうございました。
すみませんが、質問です。 PostgreSQL 7.3.4 を RedHat上で利用しているのですが、VACUUM FULL を実行 するのに気をつけなければならないことは何でしょうか? VACUUM FULL の実行中に他のユーザからのDBアクセスがあると、最悪DBがクラッ シュするという話を聞いたような記憶があるのですが、事実でしょうか?
PostgreSQL7.3.4で、例えば create table example ( a int, c int ); というテーブルがあって、これの a と c の間に b という列を追加したい場合、 mysql だったら alter table example add b int after a; でいけますが、Postgers では after という構文は使えないようです。 どうすればええんでしょうか?
>>410 クラッシュするなんてことは無い。当方は、十数人のユーザが接続していると
きに何度もVACUUM FULLを実行しているが、障害が起こったことは無い。
VACUUM FULL を行うと、場合によっては長時間、テーブルロックがかかるから、
アクセスが集中しているときには問題になる。気をつけなければならない点は
それだけ。
VACUUM についてはいろいろ間違った情報が流布しているようなので、公式の
マニュアルとメーリングリスト以外は、あんまり信じない方が良い。
>>411 方法は無い。テーブルのデータを保存して(一時テーブルに収めるのが楽)、
テーブル定義を DROP → CREATE し直し、データを書き戻すしかない。これは
最新の 8.03でも同じ。
※そもそもDB理論では、こういうカラム定義の順番を気にするような使い方は
いけない、ということになっているが、現実的にはそうも行かないね。
414 :
NAME IS NULL :2005/09/21(水) 15:00:02 ID:VfNnd0+f
jpugって複数のメールアドレスとかフリーの(Gmail)アドレスを登録してもOK? 理事の審査がいるって書いてあるので少し身構えてる俺ガイル
>>415 jpugのMLはjpug会員の交流用MLだよ。
postgresqlの質問などはpgsql-jpへ。
わかってたらスマソ。jpugのMLではフリーメールは
見かけないなぁ。
SQL の質問です。 x|y -+- 1|a 1|b 1|c 2|a 3|a 3|b という時、y に c を含まない x を抽出したいんです。 つまり x - 2 3 としたいんです。y != 'c' では複数行なのでダメで…。
>>417 あまり自身はないが。。。これでいいのかな?
select distinct x from test
where x not in (select x from test where y = 'c');
419 :
418 :2005/10/12(水) 19:36:11 ID:???
きゃあ。s/自身/自信/g 過疎スレで何やってんだか。。。orz
きゃあ。早速ありがとう。OK でした!
422 :
417 :2005/10/14(金) 17:11:42 ID:???
>>421 417じゃないけどそのURLは勉強になった。サンクス。
PostgreSQLには通じない内容もある。 勉強がてらに検証するのもいいがな。
確かに。参考にしつつもexplainじゅーよーだな。 6 の count(pkey) は MySQL だと遅いらしいし。
>>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になってる、なんてのはよくあることだ。
427 :
421 :2005/10/15(土) 02:19:28 ID:???
>>426 素晴らしい!大変参考になった。ありがとう。
しかし、私が今のプロジェクトで使っている PostgreSQL は 7.3 なのだ。
喜んだらいいのか悲しんだらいいのか。
429 :
322 :2005/10/15(土) 18:46:05 ID:???
運良く、手元に例のサンプルコードがありました。貼らせていただきます。 -- ------------------------- CREATE TABLE Table1 (column1 int2, column2 varchar(20)); CREATE TABLE Table2 (column1 int2, column2 varchar(20)); /* Table1 と Table2 をまとめて表示するView を作成 */ CREATE VIEW View1 AS SELECT * FROM Table1 UNION ALL SELECT * FROM Table2; /* column1 の新規入力値が負なら、Table1に挿入 */ CREATE RULE RULE1 AS ON INSERT TO View1 WHERE NEW.column1 < 0 DO INSTEAD INSERT INTO Table1 (column1, column2) VALUES (NEW.column1, NEW.column2);
430 :
322 :2005/10/15(土) 18:46:53 ID:???
/* column1 の新規入力値がゼロ以上なら、Table2に挿入 */ CREATE RULE RULE2 AS ON INSERT TO View1 WHERE NEW.column1 >= 0 DO INSTEAD INSERT INTO Table2 (column1, column2) VALUES (NEW.column1, NEW.column2); /* それ以外は無視 */ CREATE RULE RULE3 AS ON INSERT TO View1 DO INSTEAD NOTHING; /* Table1 に挿入されたら成功 */ INSERT INTO View1 VALUES(-1, 'ふがふが'); /* Table2 に挿入されたら成功 */ INSERT INTO View1 VALUES(1, 'ほげほげ');
431 :
322 :2005/10/15(土) 18:52:09 ID:???
>>428 以上です。
半年近く経ってからお求めになる方がおられるとは、大変うれしいです。
432 :
428 :2005/10/17(月) 08:49:28 ID:???
>>431 大変参考になりました。
自分が今抱えている問題を解決する糸口がつかめました。
本当にありがとうございました。
[pgsql-jp: 36186] 宮内の物言いムカつくんだけど。
>>433 みんなで相手にするからつけ上がるのに。
「お前にはどうやっても無理だ」とちゃんと言ってあげようよ。
それに比べると、16191は丁寧だよな。そこまで卑屈にならんでもいいのに
[36206] Fってホントどうしようもないな。
>>436 PowerGress Plus使えばいいのにね
[pgsql-jp: 36215] --no-localeしていない時の典型的な症状なんだが… 最近、MLのレベル落ちてる?
もうこれはアレやね
宮内、まだやってるのか。
宮内、都合の悪い忠告は全部無視しやがるな。 これだけ時間使ってたら他のことできるだろうに、馬鹿な奴。
宮内、ぐちゃぐちゃ言われた後のレスは明らかに口調が違うんだが。
重複を削除した 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 で欲しい結果が出るのですが、もっといい正攻法のようなやり方はありますか?
>>443 それでいいんじゃね。
DISTINCT ON は重複削除の時にソートを必要とするので、
そのソートされたときの頭だしをおまけ的にやっているわけで、
別の列でソートするなら結局再ソートが必要なんで、結局
貴方が書いたSQL(サブクエリ内で重複削除後に外のクエリでソート)になる。
停電で電源が落ちた後再起動し 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です
Is the postmaster running ? Is the postmaster running ? Is the postmaster running ?
447 :
445 :2005/10/26(水) 21:15:07 ID:???
/usr/bin/postmaster -S を実行してみたところ /usr/bin/postmaster does not know where to find the database system data. You must specify the directory that contains the database system either by specifying the -D invocation option or by setting the PGDATA environment variable. でした、、確認方法まちがってますか???
448 :
445 :2005/10/26(水) 21:32:23 ID:???
すみません、自己解決しました
449 :
445 :2005/10/26(水) 21:39:27 ID:???
まだしてないんです・・・
> specifying the -D invocation option or by setting the PGDATA environment variable. PostgreSQLのエラーメッセージはとても親切だなぁ。
451 :
445 :2005/10/26(水) 21:47:08 ID:???
すみません、自己解決しました
452 :
445 :2005/10/26(水) 22:38:51 ID:???
すいません、どうなおしていいか、わからないです・・・
>>445 簡単なエラーメッセージも読めないようではあんたには無理だ。サポートを買え。
454 :
NAME IS NULL :2005/11/01(火) 12:31:05 ID:Ni/Y0pQt
ポスグレで固定長ファイルをテーブルに読み込む方法ってありますか?
まるちうざ
[pgsql-jp: 36351] 社内でpostgresql、Slonyの知識がある部署に協力していただき まだ解析中です。 本当、実績のないツールはイレギュラーが出ると辛いです。 ---- だそうで。。
Slony-I は日本語の資料が少ないのは確かだなあ。 試行錯誤でだいぶわかってきたが、解説サイト作って 協力すべきかなぁ
> 社内でpostgresql、Slonyの知識がある部署に協力していただき 社内に”いただき”というのは間違ってるな。
>459 おお、素晴らしいですね。
>>458 じぶんのところで実績がない、って言いたいんだろうけどな
[pgsql-jp: 36318] configureのエラー [pgsql-jp: 36372] PostgreSQLのスタート とことん、エラーメッセージを読まない奴だな…
英語が出ると、 「あーあーみえないきこえなーい」 なやつなんだろうw
[pgsql-jp: 36388] Re: PostgreSQLのスタート もはや存在が迷惑
だいたいnakayosi.jpってなんやねん
俺は、やつのメールおよびそれへの返信をスパムとして処理するようにした。 なので、すっきり。
[pgsql-jp: 36394] Re: PostgreSQLのスタート まだまだ続くよnakayosi.jp マシン名himawariはチト受けた
>>466 ドメイン名(nakayosi.jp)がカッコよくて覚えやすい。
という無料のメールサービスみたいですよ。
man su
あー、やっぱりコンパイル段階での問題なのかな。
まずgoogle教えてやればよかったのにw
474 :
NAME IS NULL :2005/11/17(木) 06:28:51 ID:029n4mvn
もう彼の存在そのものがネタ扱いですか
宮尾とか宮内とかわかりにくい。
476 :
NAME IS NULL :2005/11/17(木) 20:31:21 ID:WPWQyDgh
質問です. テーブルにARRAY型のフィールドがあって、そこにinsertを行うJavaのプログラムを書いたのですが, org.postgresql.util.PSQLException: Unsupported Types value: 2,003 at org.postgresql.jdbc2.AbstractJdbc2Statement.setObject(AbstractJdbc2Statement.java:1630) at org.postgresql.jdbc3.AbstractJdbc3Statement.setObject(AbstractJdbc3Statement.java:1436) at org.postgresql.jdbc2.AbstractJdbc2Statement.setObject(AbstractJdbc2Statement.java:1636) にて落ちてしまいます. PreparedStatement.setArray(int,Array)を利用しようと思いましたが,Arrayがインタフェースで 直接利用できないため PreparedStatement.setObject(int,Object,int); を利用しました.3番目の引数に(Types.ARRAY)を渡し,2番目の引数にはint[]を 渡しています. 解決策として何かわかる方いらっしゃれば教えてください. Postgresql8.10 JDBC WindowsXP です
>>477 テーブルパーティショニングは結構CPU使うね。
やっぱAthlon 1.3GHzはきついか。
>477 合ってるよ。確かに面倒だね。 これから改善されていくんじゃないかな。
480 :
NAME IS NULL :2005/11/30(水) 13:49:57 ID:jT0vELWM
postgres8.1 win32 のインストールができず困っております。 インストールエラー インストールされたファイルの権限設定に失敗しました 'cacls' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 権限設定とはどういう意味なのでしょうか?環境はXPなのですがうまくインストールできないのですが Linuxに比べてWin上での留意点などありますでしょうか?
481 :
NAME IS NULL :2005/11/30(水) 14:06:05 ID:jT0vELWM
インストーラを使って、無理でした
postgresを起動するOSのユーザーを作ってないのでは
インストールはadministrators グループであること postgres ユーザーを administrators に入れないで作成すること インストールの前にこれやっとけばいい。 インストール中にユーザー作ったりもするが前もって やっといたほうがめんどくさくなくていい
インストール中にユーザー作るほうがらくだと思う・・・ ただユーザー管理が頭にないhomeエディションでこれはきついんだよね
>>482-484 レス有難うございます。cygwin上でcygIPCを入れてやってみたいと思います
cygwinいらないでしょ、まあやってもいいけど
cygwin使ったほうがトラブル多いようだが
ネイティブ版を使えばいいのにねぇ。日本語インストーラもあるし。
cygwinまじいらね
アカウントアカウントってわずらわしいし、サービスに登録されたがろうとするから、 おいらはcygwinのままでいいや。
べつにわずらわしくないよ postgresってユーザー作ります、よろしいですか?ときかれるだけだし
upgradeじゃなくて、新規のPCに一からインストールしてみた。 何の問題もなかった、、、引っかかる人はどこでひっかかるのか。 postgresユーザーに権限与えすぎるとまずかったり、サービスを 実行するユーザーになれないとかみたいだが、、、 ファイヤウォールとかがわるさしてんのかねえ
おまえら、助けてください。 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; どうなおせば良いかヒントください。エロイ人。
>>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での動作確認は、全く行なっていません。また、行なうことも出来ません。
NT!
496 :
493 :2005/12/02(金) 19:34:00 ID:???
(ノ_・。)
粘着カキコキター(・∀・)
ファイヤウォールとかがわるさしてんのかねえ
500 :
493 :2005/12/02(金) 23:48:12 ID:???
d楠。 Accessから更新できるレコードと更新できないレコードのダンプを比較して解決しました。 Perlからの更新内容はフラグ立てとタイムスタンプの記録だったんだけど、 UPDATEクエリだとわかりゃ良いと思って質問にはフラグ立ての部分しか書いてなかったのです。(;´Д`) 実際のクエリは UPDATE foo SET flag = 1, update_timestamp = current_timestamp WHERE code='foo'; みたいになってて、これを UPDATE foo SET flag = 1, update_timestamp = date_trunc('second',current_timestamp) WHERE code='foo'; に修正したらなおりました。 「PostgreSQLのタイムスタンプ型」と「Accessの日付/時刻型」の精度の差が原因だったみたいです。
>>497 エンドユーザーなりに
せめてその場の空気くらいは読めるようになろうぜ
current_timestamp::timestamp(0)
過去のアーカバイブから
最近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'; 長文になり申し訳ないのですが、よろしくお願いします。
| 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してるのは理解できが その条件がキーっぽいと言うかコードでは意味がない気がするが
>>505 有り難うございます。これで動きました。
> つーか、sumしたいだけなら関数書く必要性を感じない
これは sum に対して、もう少し計算を加えたいとのと、私は
あまりタイピングが早くないので。かっこわるいのですが。
カラムに設定したuniqueの制約を削除する方法を教えてくださいませ。 カラムを消して、カラムを追加しなおしてもいいのかと思いますが削除の方法が分かりません。
509 :
508 :2006/02/16(木) 16:44:01 ID:???
CREATE TABLE 時に unique指定したやつはDROPだめだね ALTER TABLE table DROP CONSTRAINT key名 でいけないかな
>>509 ありがとうございます
adminuser というテーブルのhyoujiカラムの制約を解除したいのですが。
下記のようにしても駄目でした・・
ALTER TABLE adminuser DROP CONSTRAINT hyouji;
ちなみに
hyouji varchar(2) not null
で作ったカラムなので not nullも付いております。
ちなみにバージョンは 7.4.7-6sarge1 であります。
すいませんkey名という意味が理解出来ていませんでした。 \d adminuser してkey名を表示して ALTER TABLE adminuser DROP CONSTRAINT adminuser_hyouji_key; で出来ました! ありがとうございます >509さんは神です、いわゆるゴッドです
アホなこと聞くけど、ご勘弁を。 psql を起動させたときに表示されるバージョン名が、 インストールされている postgres のバージョン名にあたるの? もしそうじゃない場合、 インストールされている postgresのバージョン名を調べるには、どうしたらいいの?
psql --version
それはpsqlのバージョンになるね SELECT version(); とか dataの下のPG_VERSION とか postmaster --version
515 :
514 :2006/03/02(木) 00:12:20 ID:???
っと、先客がいた。 ローカルのpsqlで別ホストのDBにつないだ場合は、SELECT version()しかないかな
SELECT VERSION(); なんてのがありましたか。どうもありがとうございます。とっても助かりました。
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のクエリーエラーの一覧があるサイトや書籍がありましたらご紹介ください。
エラーメッセージに関してまとまったことを書いたとこがみつからないねえ ソース探したら、英語以外は po ファイルにまとまってんだね。 中国語や韓国語もあるけど日本語無いんだね。 まあエラーメッセージが文字コード違いの日本語で出ると 面倒だからなあ。Oracleで????ばっかりのメッセージをよく見るしな
519 :
NAME IS NULL :2006/03/19(日) 18:55:12 ID:gv0TLlVc
[pgsql-jp: 36898] のような $body$ って一般的? 普通は '' でくくると思うんだけど、初めて見たよ。
520 :
NAME IS NULL :2006/03/21(火) 01:04:57 ID:kfspap6q
日本語をキーにしてテーブルを検索してもレコードが引っかからないんですけど何ででしょうか? PostgreSQL 8.0.1 を Windows で動かしています。データベースは UTF-8 で作りました。 foo=# CREATE TABLE A(T VARCHAR(256)); CREATE TABLE foo=# INSERT INTO A VALUES('ABCDEFG'); INSERT 56373 1 foo=# INSERT INTO A VALUES('あいうえお'); INSERT 56374 1 foo=# SELECT * FROM A; t ------------ ABCDEFG あいうえお (2 行) foo=# SELECT * FROM A WHERE T='ABCDEFG'; t --------- ABCDEFG (1 行) foo=# SELECT * FROM A WHERE T='あいうえお'; t --- (0 行) foo=# select version(); version ------------------------------------------------------------------------------------------ PostgreSQL 8.0.1 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)
521 :
NAME IS NULL :2006/03/21(火) 10:59:24 ID:kfspap6q
>>520 ですが 7.4 (Linux) だと日本語でもちゃんと検索に引っかかりました。
8.0 (Win) の設定が何かおかしいのでしょうか??? 両方ともデータベースは
UNICODE で作ってあります。また両方とも psql と JDBC 経由とでこういう
動きです。
foo=# select version();
version
--------------------------------------------------------------------------------------------------------------------------
PostgreSQL 7.4.11 on i386-redhat-linux-gnu, compiled by GCC i386-redhat-linux-gcc (GCC) 3.4.4 20050721 (Red Hat 3.4.4-2) (1 row)
Windowsの8.0でUnicodeをにすると、インストールの時、なんかメッセージでなかったか?
インストール時はちょっと覚えてないですけど 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 でデータベース作るとちゃんと日本語も引っかかるのになぁ。
Winの8.0ではUnicodeは使うな
了解しますた (゚∀゚)ノ
DBのエンコードにunicode+winで8.0ずっと使ってるけど問題は出てないな セットアップの話ならそっちはunicodeは使っちゃ駄目だったけど そっちの話のことか
8.0のインストーラ腐ってたよな。 unicodeにしたら失敗、インストール先変えたら失敗、○○したら失敗、だらけだったよ。 結局allデフォルトで入れるしかなかった。
インストール先は問題無かった。
データベースを EUC_JP で作り直してしばらくはうまい事動いてたんだが いつの間にかまた日本語で検索できなくなってた。インストールした時って 文字セット選べたんだっけか? 一年位前に入れてほったらかしだったから すっかり忘れてる。ちょっと入れなおしてみるか…
インストール時にinitdbするから選べたはず。
とりあえず 8.1.3 (Win) 持ってきて入れてみました。インストール時の文字セットは デフォルトで選択されてる EUC_JP で。CREATE DATABASE も無指定で。 今のところ順調に動いています。そういえば initdb する時に文字セット選べましたね。 Linux に入れるときもやってたわ。
質問なのですが、dumpファイルから特定のテーブル部分だけを抽出することって可能でしょうか? ご存知の方いましたら教えてください。 リストアすると、特定のテーブルでエラーが起こってしまいますので、そこの部分を調べたいと思います。 よろしくお願いいたします
スクリプトでうまく切り出すしかないんじゃないかああ むちゃくちゃでかいと面倒だよね。 元のDBがあるなら、schemaだけダンプさせて、 どこからどこまでって文字列設定する参考になるけどね。 まあ勘でやってもうまくいく
535 :
NAME IS NULL :2006/03/23(木) 15:15:22 ID:MoU5m8xf
PostgreSQL に JDBC で接続してます。BYTEA 型のカラムに InputStream 指定で LOB を突っ込んでるんですが、ストリームのデータ量が多い (数十MBくらい) と OutOfMemoryError が発生します。ひょっとして PostgreSQL の JDBC ドライバって バイナリデータを全部メモリに展開してから SQL 発行してんの?
いまいちinitdbとCreateDBのエンコード指定の違いがよくわからん
initdbはtemplateのエンコードを指定するんじゃないか createdbの省略時のエンコードでもあるが
createdbってデフォUNICODEあたりになってなかったっけ?
>>519 8.0 以降で PL/pgSQL 書くなら使うよ
'' の中で ' 書くときエスケープしなくて済むからね
まあ、$body$ じゃなくて $$ でも $foo$ でもいいんだけど
540 :
NAME IS NULL :2006/03/26(日) 05:22:38 ID:pka3dqSR
>> 533 pg_dump でカスタム形式 ( -Fc ) を指定してれば できるんだけどね
postgresユーザのパスワードってどうやってつけるの? alter user で何回やってもできないんだけど。。
>>541 ALTER USER が失敗するの?だったら権限。
ALTER USER で設定してるのにパスワード聞いてこない?だったらpg_hba.conf
>>542 サンクス、pg_hba.confでtrustになってました。
こんにちは FreeBSD 5.4, PostgreSQL 7.4 データベースの設置場所を個別に変更(リンクで)しようと、 /usr/local/pgsql/data/base を確認してみたのですが、 17451といった数字のディレクトリしか存在せず、 template1や、テストで作成したデータベース名が見あたりません データベース名で保存されるには、設定等が必要なのでしょうか
何でPostgreSQLのスレって分かれてるの?
>>544 pg_database の内容を見てみよう。
>>545 そういえば何でだっけ。
ここは元はMLヲチがメインだったかも。
547 :
544 :2006/04/20(木) 01:21:34 ID:???
548 :
NAME IS NULL :2006/04/20(木) 18:32:27 ID:gTr1CKh8
質問させて下さい。 プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。 感覚的には文字列比較のvarchar(n)より、数値比較のnumeric(n)のほうが 速くていいのではないかと思うのですが。 うちの昔のシステムはなぜかvarchar(n)で0詰めなんですが、何か意味があるんでしょうか。
既に無視されてるかとw
このスレは雰囲気悪いな。
どうみても548=551=553=554です。どうもありがとうございましたw
どうみても550=552=555です。何か必死ですねw
どうみても548=549=551=553=554=556=557です。 レスを一度にまとめられず必ず二回続けてレスする癖から見ても同一人物に間違いありませんw
560 :
550 :2006/04/21(金) 20:22:33 ID:???
いや、まじで、漏れ
>>550 しか書いてないんだけどw
事実、無視されてたわけでwww
>>548 の質問内容があまりに・・・(ry
まぁ雰囲気悪く感じたなら、正直スマンかったよ。
>>560 何が「まじで」だwww
はっきりいって、どれが同一人物かなんてどうでもいいんだよ。
>>550 は空気の読めない基地外だから氏ね。
追加
>
>>548 の質問内容があまりに・・・(ry
こんなことを書くくらいだから、
>>560 はよっぽどすばらしい質問ができるんだろうなwww
期待は出来ないけどw
564 :
NAME IS NULL :2006/04/21(金) 21:00:41 ID:HfZIsICF
>>563 こういうことにはちゃんとレスがつくんだな。基地外スレにはお似合いだ。
質問者転じて荒らしか… 救いようのねェバカだな (w
質問があります。 プライマリ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)のどちらのほうがいいでしょうか。
ハエがたかるのを嘆くより、自分が糞だということに早く気付こう。
このスレの住人が糞なだけですよ。
>>565 よくある事ですよ。馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。
>>570 そのレス、面白いからもう一方のスレに貼っといたw
馬鹿なうえに師匠も友達も居ないから2chで質問に対するレスをするわけで。
>>550 が余計な一言を書いたお陰で荒れまくりwww
>>575 君も荒らしているんだよ。。。
・・・以下繰り返しw
しかし
>>570 は効いたようだ。
荒らしが双方ともぴたっと止んだ。
やっぱり心当たりがあるのかねw
彼はこのスレから逃げ出しての質問スレで暴れてるようだ。
コピペで暴れているのはお前じゃんw
___ . |(・∀・)| . | ̄ ̄ ̄ △ △l | __△|_.田 |△_____ |__|__門_|__|_____|_____
8.x から正規表現で置換する regexp_replace() が用意されましたが、 7.x で同じことをする場合、何か方法はありませんか?
PostgreSQLを使って、下記のような処理を作ろうと考えています。 現在「特定テーブルのCSV出力」に何を使うかで悩んでいます。 ストアドプロシージャか、PHPを使うかの二択から選んでくれと言われたのですが、 クライアントアプリがこれらをキックすることを考えるとどちらが簡単でしょうか。 ---------- クライアント:Windows(.NETで開発) サーバ:RedHat Linux + PostgreSQL やりたいこと。 1.通信はhttpのみ。 2.クライアントはサーバにアクセスして、 「特定テーブルのCSV出力」を命令する。<--------------(・ω・) 3.クライアントは処理の終了を待つ。 4.クライアントは出力されたCSVファイルをダウンロードする。
>>582 クライアントがストアドプロシージャを直接キックするん?
>>583 「そのようにせよ」と指示を受けました。
自分としてはADO.NETを介しても問題ないとは思うのですが...。
>>582 もしストアードプロシージャを使うとして、クライアントから来たHTTP通信を受けるのは
誰なんだ? postmasterにそんな機能はないぞ。
>>582 CSV出力するphpを作り、クライアントからそいつにアクセスする。
phpじゃなくてもいいけど。
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
いつも PostGreSQL って書いてるけど何か言いたいことある?
グレないでください。
590 :
NAME IS NULL :2006/05/25(木) 21:19:56 ID:rseeNcuL
PostgreSQL 8.1.4にageたらエラーでまくりなんだけど。地雷踏んじゃったかなorz
>>590 かなり込み入ったシステムでばーうpしたけど、無問題。
どんなエラーか知らんけど、おまいの作ったモノの方がおかしいんでないか?
592 :
590 :2006/05/26(金) 00:06:36 ID:???
>>591 一応原因がわかった
エラーは文字変換ができないことが原因で
ERROR: character 0xacf1 of encoding "EUC_JP" has no equivalent in "UTF8"
ってのが頻発してたんだけど8.1.3まではwarningですんでたのが8.1.4では問答無用でERRORになってるためでした。
つまり俺のコードとDBが腐ってたと。orz
今からデータの掃除に逝ってきます
593 :
NAME IS NULL :2006/05/26(金) 18:50:57 ID:4SSfJU7w
すいません、3日前程にサーバがクラッシュしちゃって、データ復旧に出したのですが ポスグレのデータを取り出す方法とかありますか? データのみ復旧されて帰ってきたのですが、どうにかならないですか? 試した事 8.14をインストールしてデータをコピーしてみた。 ↓バージョンが違います。 cygwinで7.4.1を入れてデータをコピーして起動してみた。 ↓ 立ち上がりすらしません。 このデータというのは postgres/date の中のものです。 どうかよろしくお願いします。
594 :
NAME IS NULL :2006/05/26(金) 19:05:37 ID:4SSfJU7w
>>593 窓から身を投げて一から人生をやり直すというのはどうでしょうか?
596 :
593 :2006/05/27(土) 16:20:47 ID:/QEoXRkU
>>597 > 少し前から、ODBCドライバ(psqlodbc)のページが閉鎖されているのかつながりませんが、
> 移転先とかその辺の事情がわかる方はいますか?
書いた人が転職したから。ページの移転先は聞いてない。
まだODBCを使っ(ry
みんな例のセキュリティホール対策ってもう終わった? 余り話題に上ってないって事は、DBエンコーディングにShiftJIS使うとか、クライアントとバックエンドのエンコーディングが違っているとかってあんまいなかったって事なのかね。
対応してませんが、何か?
604 :
NAME IS NULL :2006/06/06(火) 14:44:18 ID:h5kZihCT
すみません.こちらの方が質問するには適切と思いますので, 再度投稿します. 以下の点について悩んでいますので,ご教示お願いします. ダンプファイルよりリストアを行おうと思いまして、 以下のコマンドを実行したところ、 psql testdb < dump.testdb 何度やってみても cannot allocate memory for output buffer のメッセージが出て途中で止まってしまいます。 原因がお分かりの方がいらっしゃればご教授願いたく思います。 OS:CentOS バージョン:PostgreSQL 8.1.3 以上です。よろしくお願いいたします。
窃盗OSを使ってるような奴は、質問するときもマルチ。
よそのスレから移動したんだからいいんじゃね?
というか、pgsql-jp: 37115への返信はしないのか?
608 :
604 :2006/06/06(火) 16:18:04 ID:???
>>607 的外れなレスに返信する必要があるとは思えませんでしたので。
さすが盗人クオリティw
>>601 オレまだ7.2系使ってるんだけど、どうしたらいいの・・・?
今年中くらいにリプレイスの予定だったんだけどなぁ。
はぁ。。。
SJIS使わなきゃいいだけ。 プレースホルダー使えばいいだけ。
SJISを使いたがるPG自体がセキュリティホールみたいなもんだよなぁ
SJIS使ってる奴は
「わからないから」とか「出来ないから」とか「知らないから」
なんて理由で使いつづけている池沼がほとんど。
そのあげくに指摘されると
>>614 みたいに逆切れ。
糞尿みたいな連中だよ。
616 :
610 :2006/06/06(火) 17:29:53 ID:???
携帯向けなのでSJISなんです。 プレースホルダーって言ってもプログラムレベルの話なので 運用側にはどうすることもできませんし、修正の予算もありません。 困った。。。
携帯向けとか(絵文字含)、SJISで取り扱うべきものたーくさんあるのだけど。
SJISでも問題なく運用できることを「知らない」、する方法が「わからない」のは
>>615 だと思うのだけど。
逆切れしてる池沼は、どちら?w
>>616 気にすることない。放っとけ。
どうせその腐れPGどもは自分達のアプリに穴があっても絶対に修正しないだろう。
おまえが気に病んでもしょうがない。
いたずらされたらカカクコムメソッドがあるさ。
運営側の自衛策としてこっそりアプリを監査して穴の所在を掴んでおくといい。 穴は必ず見付かる。どいつもこいつも馬鹿ばかりだからな。 問題が起きたら「調べたら穴が空いてました」という事にして知らん顔すればいい。 穴を見つけても黙ってろよ。間違っても穴を修正させようとするな。 奴らはあーだこーだと理由をつけて修正を渋るうえ、 運営側になんとかしてくれと泣き付いてきて面倒が増えるだけ。 それどころか問題があった事を以前から知っていたという事がわかったら こちらのほうが責任とらされかねない。
>>165 うちの場合は、客からの支持
合理的な理由が存在するとは思えんが仕方ない
そういった内容を、いちいちメーリングリスト宛てにメールしないで 欲しいのですが?
622 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/07/01(土) 01:32:44 ID:8EUWdSXu
質問です ーーーーーーーーーーーーーーーーーーーーーーーーー コネクションAオープン トランザクション開始 表Aの書き換え トランザクション終了 コネクションAクローズ コネクションBオープン SELECT XX FROM 表A (ロックなし FOR UPDATEなし) コネクションBクローズ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー これでさっき書き換えたものを正しく取得できるでしょうか? おいらはできないと思うのですが
ココ電逝ったああああああああああああああああああ
624 :
NAME IS NULL :2006/07/01(土) 02:03:07 ID:cSX6hSFp
ココ電逝ったああああああああああああああああああ FROM 市況1より愛をこめて
おいおいなんでココ電がこんなとこに
626 :
NAME IS NULL :2006/07/01(土) 02:03:39 ID:GrSHDerV
ココ電いったぁ? 市況版より
ココ電逝ったあああああああああああああああああああああああああああああああ
629 :
NAME IS NULL :2006/07/01(土) 02:04:03 ID:Qe/njGR0
ココ電逝ったああああああああああああああああああああああああああああああああああ阿
630 :
NAME IS NULL :2006/07/01(土) 02:04:11 ID:RlbL4Q/Q
ココ電だたら、舌かんで死ぬ ↓
631 :
NAME IS NULL :2006/07/01(土) 02:04:38 ID:Q9DHHByP
ココ電球さんですか? ココ電逝ったぁぁぁぁぁぁぁぁぁぁ!ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁっ
632 :
NAME IS NULL :2006/07/01(土) 02:04:39 ID:+PB+de8g
633 :
なつ☆ていおう ◆RWBX3nIyKs :2006/07/01(土) 02:04:42 ID:9HiShuQP
ココ電逝ったああああああああああああああああああああああああああああああああああ
ココ電逝ったああああああああああああああああああああああ!
ココ電逝ったぁぁぁぁああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
636 :
NAME IS NULL :2006/07/01(土) 02:05:29 ID:GrSHDerV
おいおい。 起こっているぞ 278 ココ電球(∩T∀T) ◆tIS/.aX84. New! 2006/07/01(土) 02:04:51 ID:7nlUZFjU てめえら 書き込むなつうのに
ココ電逝ったああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ阿
ココ電逝ったぁぁぁぁああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
誰か
>>622 の質問分かる人答えてやって下さい
ココ電は株で大損した不幸な女子高生です
640 :
NAME IS NULL :2006/07/01(土) 02:09:08 ID:Q9DHHByP
53歳の女子高生ですがw
641 :
NAME IS NULL :2006/07/01(土) 02:12:42 ID:RLoIh/h1
ココ電は看板に名前がのってる有名な市況1板のマスコット的な存在です。 ココちゃんをよろすく。。。
ココ電逝ったあああああああああああああ!!!!!!
644 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/07/01(土) 02:16:29 ID:8EUWdSXu
書き換えは当然commitを含みます。 MVCCを考慮してみてください。
645 :
NAME IS NULL :2006/07/01(土) 02:17:22 ID:Q9DHHByP
ココ電球は当然入金を含みます。 再就職を考慮してみてください。
ココ電逝ったああああ!
647 :
NAME IS NULL :2006/07/01(土) 02:20:09 ID:cSX6hSFp
株で大損物故板ココ電さんがフリーのデータベースを物色中とな 救ってやれよ
648 :
NAME IS NULL :2006/07/01(土) 02:24:57 ID:Q9DHHByP
しかし、ココ電球は相変わらず人気あるな。 どなたかココちゃんに教えてやってください。おながいします。
649 :
NAME IS NULL :2006/07/01(土) 02:26:33 ID:1BXR4Dua
>>622 DBだけで普通に考えると更新後の結果が取得できて当然
650 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/07/01(土) 02:37:20 ID:8EUWdSXu
じゃあこれは? ーーーーーーーーーーーーーーーーーーーーーーーーー クライアント1 コネクションAオープン トランザクション開始 表Aの書き換え トランザクション終了 コネクションAクローズ クライアントB コネクションAでcommitしたのを電話連絡を受けて以下を開始 コネクションBオープン SELECT XX FROM 表A (ロックなし FOR UPDATEなし) コネクションBクローズ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
>>650 同じサーバなら取れるけど
違うサーバならメタデータなんなりでサーバ更新かけないと反映されない
652 :
NAME IS NULL :2006/07/01(土) 03:06:39 ID:9lelxAwe
>>650 素人ですが、
2つ目のクライアントは「クライアントB」じゃなくて、「クライアント2」なんじゃないの?
流れからすれば。
そんな感じで、クライアント名とかコネクション名とか記号を間違うような、
タイポの問題で止まってたりしてない?
653 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/07/01(土) 03:12:20 ID:8EUWdSXu
ーーーーーーーーーーーーーーーーーーーーーーーーー クライアント1 コネクションAオープン トランザクション開始 表Aの書き換え トランザクション終了 コネクションAクローズ クライアント2 コネクションAでcommitしたのを電話連絡を受けて以下を開始 コネクションBオープン SELECT XX FROM 表A (ロックなし FOR UPDATEなし) コネクションBクローズ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 修正しました
ここ、データベースの基本的な話でなく、PostgreSQL についての話題を扱うとこだよね? commit したら更新したものが取得できるのは当たり前の話じゃないか。 コネクションがどうとか、全然関係ないんですけど。
655 :
NAME IS NULL :2006/07/01(土) 06:49:10 ID:l/0TGnCJ
ここの住人のレベルがうんざりするくらいアレだからw
656 :
NAME IS NULL :2006/07/01(土) 10:48:47 ID:Q9DHHByP
俺なんてココ電球がいるから書いてるがDBの意味もわからんかったw ハイラベルwww
>>653 OracleであればDBMS_FLASHBACクエリーでできる。権限が必要だが。
訂正 ×DBMS_FLASHBAC ○フラッシュバック 他にもsysdba権限や、import database権限があり、直前のバックアップをもっていれば可能であろう。 そもそもsysdbaを監視設定していないシステムであれば、根本的な問題はシステムではない。
659 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/07/02(日) 00:48:55 ID:xNO4Anq7
一つわかったぞ PGClusterを使ってる場合 コネクションAのcommitを見てほかのコネクションでSELECTしても コネクションAでの更新が反映されているとは限らないつうことだ
661 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/07/02(日) 01:39:13 ID:xNO4Anq7
おまい日本語話せないの? それとも論理的に説明すんの苦手なん?
>>661 自分で何言ってるか分かってるの? 失笑ものだよ。
PGClusterというのはSERIALIZABLEな一貫性、分離性が保証されている動作モードが 存在するのではないか。ファントム読み取りが発生しうる状況はクラスターじゃなくても ありうるからそこから調べたらどうだろうか?
664 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/07/02(日) 02:34:00 ID:xNO4Anq7
お答えありがとうございます。 このテーブルを書き換えるのはコネクションAだけなので ファントムリードはないと理解していましたが合ってますでしょうか? よろしくお願いします
665 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/07/02(日) 02:40:45 ID:xNO4Anq7
検索条件は idの一致のみの単純な検索です
PGCluster環境を使用していると仮定して、読み取り一貫性が 保証されているならそうでしょう。今回の件は単純にPGClusterの レプリケーションが上手く機能していないのではないかと思われますが いかがでしょうか?
667 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/07/02(日) 18:01:59 ID:IkqVEBqE
お返事ありがとうございます。 PGクラスターのデフォルト設定では他のクラスタへのレプリケーションを確認しないで 直接受けたクラスタDBが成功したタイミングでクライアントに返事を返すらしいのです。 もう少し調査してみます。
668 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/07/03(月) 21:50:55 ID:q+kqhE6y
usogresつかってますた・・・・ 覚悟を決めます
669 :
ココ電球(∩T∀T) ◆Olz.C.gJ3k :2006/07/04(火) 21:13:47 ID:nOXv9efA
ココ電逝ったああああああああああああああああああああああああああああああああああ
670 :
& ◆u7PlsZ7.G6 :2006/07/05(水) 16:42:04 ID:e24Z99Oj
!!!!!!っあああああああああああああああああああぁぁぁぁぁぁぁたっ逝電ココ
671 :
NAME IS NULL :2006/07/06(木) 03:06:17 ID:TPN99xcc
>>668 usogresですか・・・クラスターやレプリケーションの目的というより、
大幅に速度を犠牲にして(1/2以下)バックアップをリアルタイムで
とる機能といっていますが、正常なDBの区別さえあいまいになる
ソフトウェアですね・・・2002.8.28以降、更新もされていないようで。
usogres.ccそのものはsocketの複製をしてwriteしているだけです
から、サーバを2つ立てて運用する意味が、まったくわかりません。
もちろんご存知だと思いますが、現在のPostgreSQLではWALも改良
されてリカバリーにほとんど問題はありませんし、ロック中のホットバックアップ
も以前よりかなり良くなっているはずなのですが・・・費用面等での7.4以前
の古いバージョンをPostgreSQL8.0以降にバージョンアップできない理由でも
あるのでしょうか?このような問題は、運用に踏み切れない部長なり次長なり
の責任者が不安定な既存システムを抱えるすべての人間を不安にしている
だけでなく、問題が何度も起こってからやっと重い腰をあげるケースが多いよう
に思われます。もちろん責任は一人のSEやPGレベルにはありませんから、そう
悲観なさることもないでしょう。ただ本当にそういった責任者は事実を知らない
のでしょうか・・・知っていて何ら手を打てないのであれば復旧にかかる工数と
導入にかかる工数の天秤にかけるより、より堅牢なシステム構成にしたほうが
望ましいと私は思います。PostgreSQLとは関係ありませんが同じ業界に携わる
ものとして御健闘お祈り致しております。
672 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/07/06(木) 22:27:18 ID:f5exc1gI
どもです。 ぜってー二重化して双方使ってると思う。 乱数叩き込んでチェックしたいけど、叩き込んだ途端にハングしそうでこわい・・・
ココ電逝ったあああああああああああああああああああああ
674 :
NAME IS NULL :2006/07/09(日) 01:14:45 ID:jxHzBWxU
今posgresqlの勉強しているんだけど 1個のテーブルにデータ量で100万件あるとして その中から5件を選び出したりするぐらいだったら oracleもpostgresqlも速度的にはかわらないものなのでしょうか?
変わる場合もあるし、変わらない場合もある。 PostgreSQLを勉強というよりも、もう少し根本的なところから勉強したほうがよろしい。
676 :
NAME IS NULL :2006/07/09(日) 01:41:08 ID:jxHzBWxU
>>675 始めたばかりでとんちんかんな質問してしまいもうしわけないです
最近oracleも個人の使用だと安いと聞きましたので
全く同じデータを
同じセレクト文で検索したときはどちらの方が何%速いかっていう
ということなどは出ているのでしょうか?
もしそんなに変化ないようでしたらoracleって個人では意味のない商品ですね
簡潔に。 同じ(ような)条件でのベンチマーク結果は、探せば見つかるはず。 ただし、繰り返し言われているとおり、それが「意味」を持つかどうかは・・・(ry RDBMSは、速度だけで語られるべきでもない。 Oracle利用〜個人でも意味がある場合もあれば、無い場合もある。 とりあえず、PostgreSQLなりで色々やってみては? もう少し、自分なりに調べて勉強してみたほうがよろしい。
>>677 Oracle はそういったベンチの公開を禁止しているんじゃなかったっけ?
ポストグレスではMySQLについてるAES関数のような暗号化関数は無いのでしょうか?
680 :
NAME IS NULL :2006/07/18(火) 15:56:58 ID:7etx55f4
初歩的な質問ですみません 項目名「hogetime」の値は↓ 2005-08-21 01:20:00+09 2005-08-27 12:30:00+09 2005-09-01 10:05:00+09 2005-09-02 08:51:00+09 2005-09-03 04:51:00+09 のようになっています。 これを日付のみの期間を指定してselectで抽出したいのですが、 どのようなSQL文を打てばよいでしょうか? 例えば2005年8月25日〜2005年9月2日のデータを取り出したい場合、 「hogetime」から↓が抽出されるようにしたいのです。 2005-08-27 12:30:00+09 2005-09-01 10:05:00+09 2005-09-02 08:51:00+09
>>680 「SQL BETWEEN」なりで検索するといいよ。
682 :
NAME IS NULL :2006/07/18(火) 16:46:27 ID:7etx55f4
>>681 お答えありがとうございます。
分からないのはBETWEENでは無く、日付なんです。
SELECT pubtime FROM article WHERE ?? BETWEEN 2005-08-27 AND 2005-08-28 ;
??の部分と日付の指定の仕方がよく分かりません。
もしお分かりでしたら、教えてください。
ヒントや解説のぺージでもけっこうです。
>>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 のものしか含まれないけど。
684 :
NAME IS NULL :2006/07/18(火) 17:04:48 ID:7etx55f4
>>683 ありがとうございます。
「'」単純にが抜けてましたorz...
お手数おかけしました。
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) になりインデックスを使ってくれません ( 数秒が十数秒です )。 インデックスを使うようにするにはどうすればいいでしょうか?
↑の5ページ目な
689 :
NAME IS NULL :2006/07/22(土) 10:29:47 ID:8HTjVA0W
すんません、質問があります。 ポスグレのDBサーバーにJSPでデータを入れたいのですが SDKとJDBCドライバはwebサーバー側に入れればいいのでしょうか。 それともpostgresのDBサーバー側に入れて設定するのでしょうか。 ネットでJDBCのインストール手順を見ても、自宅サーバーの構築手順 ばかりで、webサーバーとDBサーバーが一緒に一台のPCに入っている場合 の手順ばかりでどちらのサーバー側でインストール&設定すればよいのか よく分かりません。どなたか教えていただけませんでしょうか。
自分で実験してみろ。
SDKやJDBCドライバは何が使うんだよ 少し考えれば分かるだろ
DBサーバ側は5432で口あけて待ってるだけでいい
693 :
NAME IS NULL :2006/07/27(木) 04:35:38 ID:M7LKVme/
はじめまして。 最近postgresの勉強を始めたんですが、試しに一つテーブルをつくってみようと したら「ERROR: parser: parse error at or near "{"」というエラーがでてきます。 今つかってるpostgresのバージョンは7.2.3です。 なんで古いバージョンを使っているのかというと、本に書いてあるのがそのバージョンなんです
>>693 その SQL を書かないと誰も分からん。
しかし、なんで { なんて文字が出てくるんだ?
695 :
NAME IS NULL :2006/07/27(木) 05:08:03 ID:M7LKVme/
めちゃくちゃ短いんですけど create table passwd{ id varchar(8) not null, passwd varchar(8) not null, primary key(id) }; な具合ですorz
697 :
NAME IS NULL :2006/07/27(木) 05:28:29 ID:M7LKVme/
すみません。。。。。 今度からちゃんと眼鏡かけて本よみます
まぁCとかperlとかやってると{}で囲みたくなる気持ちはわからんでもない。
トリガについて質問です ・注文(日付, 注文数合計) ・注文詳細(日付, 商品番号, 注文数) みたいなテーブルがあって、注文詳細テーブルに変更があったときに トリガで注文テーブルの注文数合計を更新したいのですが、 注文詳細テーブルは一括して数行更新されることが多いので まとまった更新の最後に1回だけトリガで計算したいのです。 こういった処理を実現するにはどうすればいいでしょうか?
700 :
NAME IS NULL :2006/08/01(火) 13:44:54 ID:8LI5yT2A
order byで並び替えて、順番が10の倍数だけを抽出した結果を求めたいのですが、SQL一文で出来るでしょうか?
>>700 テンポラリシーケンスでも作ったらいいんじゃない。
>>701 そんなものがあるのか。
っていうか、このスレに書いてあったorz
postgres 7.3.4 Red Hat Linux release 7.3 (Valhalla) 特定のレコードにアクセスしようとすると次のエラーがでます。 ERROR: missing chunk number 0 for toast value 8902358 "REINDEX TABLE"で該当のテーブルのインデックスの修復を試みましたが 状況は変わりませんでした。 何か復元する方法は無いでしょうか?
704 :
NAME IS NULL :2006/08/10(木) 11:31:54 ID:c9RdWyBD
なんでポストグレスキューエルはMySQLより人気無いの?
安定してないから。 実績がないから。 MySQLで充分だから。 グレスケはBSD厨と間違われそうで嫌だから。 グレスケは一時Red Hatが後押ししてたから。
読みにくいから。
708 :
NAME IS NULL :2006/08/13(日) 02:15:23 ID:MsUUCrjU
PL/PGSQLの質問です。 仕事でPL/PGSQLで他人が作った関数をスピードアップしなければなりません。 CREATE FUNCTION fun () RETURNS SETOF record .. DECLARE ret record; BEGIN FOR ret INTO SELECT * FROM (SELECT * FROM t_a LEFT JOIN t_b ON .....) AS z LEFT JOIN t_c ON .... LOOP ... RETURN NEXT ret; END LOOP; RETURN; END; .... で、検索SQL "SELECT * FROM (SELECT * FROM t_a LEFT JOIN t_b ON .....) AS z LEFT JOIN t_c ON ...." は3つのテーブルt_a t_b t_cをLEFT JOINしている複雑なんですが、 500行くらいかえすときはなんとか200msecくらいで処理します。 問題は関数を実行したときに6000msecから10000msecかかることです。10秒くらいかかります。 なかのSELECTが複雑だと500行くらいの処理でも PL/PGSQLのFORループってものすごく遅いのでしょうか。 カーソルに書き直してみましたがものすごく遅いのでやめました。 あと、もう運用しているのでテーブル設計はやりなおせません。
そもそもなんで関数になってんのか意味不明 とりあえずexplainの結果をだせ
710 :
NAME IS NULL :2006/08/13(日) 02:45:33 ID:MsUUCrjU
他人が関数にしたんです。私じゃありません。 なかのSELECTだけでEXPLAINすると Nested Loop Left Join (cost=0.01..4167.91 rows=471 width=41) -> Nested Loop Left Join (cost=0.00..1393.46 rows=471 width=37) -> Index Scan using t_a_idx2 on t_a (cost=0.00..52.51 rows=230 width=33) Index Cond: ((date >= '2006-08-10'::date) AND (date <= '2006-08-12'::date)) -> Index Scan using t_b_idx on t_b (cost=0.00..5.81 rows=1 width=23) Index Cond: (("outer".cid = t_b.cid) AND (("outer".code)::text = (t_b.code)::text) AND (("outer".cid)::text = (t_b.cid)::text) AND ("outer".date = t_b.date)) -> Index Scan using t_c_idx3 on t_c (cost=0.01..5.87 rows=1 width=23) Index Cond: (("outer".cid = t_c.cid) AND (("outer".code)::text = (t_c.code)::text) AND (("outer".cid)::text = t_c.id AND (c.pid = 0) AND ("outer".date = t_c.date)) で実行すると190msecくらい。結果は502行。 EXPLAIN SELECT * FROM fun() を実行すると Function Scan on fun (cost=0.00..12.50 rows=1000 width=96) で 9630msecかかる こんなかんじです。
>>710 他人が関数にしたのは分かった。
で、関数にしないといけない処理をやっている訳ではないから
関数にしなけりゃいいじゃんって話でしょ?
712 :
NAME IS NULL :2006/08/13(日) 03:05:18 ID:MsUUCrjU
この関数はいろんなところで呼ばれていて、 その先々でまたまた複雑なSELECT文がかかれている、めんどうなシステムです。 このシステムをスピードアップしろといわれて関数がボトルネックとまではつきとめて なんとか関数の中身を7000msecくらいから200msecくらいまではやめたまではよかったけれども関数を実行したらぜんぜん早くなってなかったのでこまっているところです。
713 :
NAME IS NULL :2006/08/13(日) 03:08:42 ID:OMR6/0y3
>>711 解決策はないですか?
またはPL/PGSQLのことはわかんないんですか?
>>713 712 と ID が違うが、お前は誰だ?
PL/pgSQL のことは分かっているが、風呂くらい入らせろ。
ボランティアで即答を要求するのか?
そもそも、情報少なすぎ。
実際に SELECT * FROM fun() なんて SQL になってるのか?
何にせよ、気分悪いな。
釣りにマジレスするなよ。質問者を装った荒らしだろ。
716 :
NAME IS NULL :2006/08/13(日) 10:12:52 ID:Iw16Wg/m
>>714 結局わかんないんですか?
都合悪くなるとボランティアですか?
postgre厨房はレベル低いんですね
それにしても長い風呂ですね
718 :
NAME IS NULL :2006/08/19(土) 14:18:52 ID:tjESA4/I
>>714 そんなに長くはいっててだいじょうぶか、
はやく風呂からでろよw
減らず口叩くと一週間に延びるぞ
720 :
NAME IS NULL :2006/08/20(日) 22:10:19 ID:+/ksKYrM
バックアップについて教えてください。 pg_dumpを実行すると schema with OID 5118787 does not exist こんなエラーが出てバックアップできなくなってしまいました。 パラメータ変えても同じエラーがでます。 vacuumdbしてもかわりません。 バックアップできないだけで、その他は正常に動いているようなのですけど。 同じ症状でDB崩壊の予兆なんていう不気味な書き込みもありましたが、 直し方ご存知の方おりましたら教えてください。
>>720 schema だけと、データだけをダンプするとどうなる?
--schema-only と --data-only ね。
722 :
720 :2006/08/21(月) 12:17:29 ID:iNhabLLZ
>>721 レスありがとうございます。
早速やってみましたところ、
pg_dump --schema-only
schema with OID 5118787 does not exist
pg_dump --data-only
schema with OID 5118787 does not exist
となりました。
自分の操作でエラーの原因に思い当たるのが、
既存のスキーマ名AをBに変えたらアクセスできなくなったので
Aに戻してからおかしくなった気がします。
スキーマ名の名前変更はPgAdminIIIからやりました。
723 :
720 :2006/08/21(月) 12:30:56 ID:iNhabLLZ
Postgresqlのバージョンは7.4です。
724 :
720 :2006/08/21(月) 12:49:04 ID:iNhabLLZ
720
連続の書き込みごめんなさい。
レンサバの管理者に連絡したら、3日前のバックアップが
あるということなので、被害が広がらないうちにこれで
復旧することにしました。
本当は今の状態から復旧できるのがありがたいのですが、
>>721 番さん、助けてくれてありがとうございました。
あらら、けっこう切羽詰ってたんですね。
>>722 それ、スキーマの大文字、小文字を区別してることに気が付かなかったとかじゃ…。
皆様 おはようございます 最近、会社に行く前に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の間の売り上げが一番よかった日を探すことなども可能でしょうか? 使えそうな関数など教えていただけないでしょうか よろしくお願いいたします
>>727 # SELECT '2006-09-11'::DATE + '-1 days'::INTERVAL AS from_date;
from_date
---------------------
2006-09-10 00:00:00
(1 row)
あとは副問い合わせと組み合わせてどうぞ。
>>728 ありがとうございます
とても参考になります
早速いろいろ実験してみます
731 :
NAME IS NULL :2006/09/12(火) 19:43:59 ID:HfcoGY8n
PostgreSQL 7.3.4で、文字列型と日付型の範囲指定を混在してselectをかけると激遅になります。 文字列型、日付型の両方のカラムにもインデックスは作成しています。 原因か対処方法をご存知の方がいらっしゃいましたらご教授願います。 SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 >= '2005-01-01' => これは速い(300万件のテーブルから数件を取り出すのに3秒程度) SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 BETWEEN '2005-01-01' AND '2006-01-01' => これは激遅(300万件のテーブルから数件を取り出すのに、数分待っても応答無し) SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 >= '2005-01-01' AND date1 <= '2006-01-01' => これも激遅(300万件のテーブルから数件を取り出すのに、数分待っても応答無し)
>>731 ANALYZE はしたか? EXPLAIN も晒せ。
733 :
731 :2006/09/13(水) 13:34:07 ID:???
>>732 ANALYZEで高速になりました。という事は、ANALYZE前は
SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 >= '2005-01-01'
と
SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 BETWEEN '2005-01-01' AND '2006-01-01'
で違うインデックスが使われていたという事なんですね。
今はEXPLAINしても両者とも全く同じです。
スレ汚しすいませんでした。
ANALYZE前にEXPLAINすれば違いがわかったのにw
おそらく >違うインデックスが使われていた んじゃなくて、seq scan だったんだろう
DB内の全てのテーブルにまとめて同じ権限を与えたりする方法って無いですか? GRANT ALL ON * TO user; の様なことが出来れば良いんですけど・・・
737 :
NAME IS NULL :2006/11/24(金) 17:49:29 ID:HZFCZlio
>>737 日本語でおk
投げているクエリの文字コードが
EUC以外の”ある文字コード”で統一されているのなら、
set client_encoding to 'ある文字コード'
を事前に投げる。これでだめか?
取得時も同じことすれば、元に戻る。
そういうことを言ってるんじゃないなら、スルーよろ。
質問です。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とかになりますよね?)
>>739 >例えばAさんが4つのデータ、Bさんが6つのデータを同時に入力しよう
PHP5ってことだから、Webサイト(HTTP)で一度のリクエストでそれぞれ4つ/6つってことだろうか?
それなら、テーブルロックなりファイルロックなりで排他的に処理すれば済む。
しかし、serialで連番を維持しようとするのはどうかなと。トランザクションをROLLBACK
させた場合でもシーケンスは元に戻らないし、削除すると当然空き番になる。
>>740 返事が遅くなりましたが、書かれた事を調べました。
なるほど、PHPで適当なファイルを作成して
ファイルロックを使えば良いというわけですね。
ちょっとスレ違いですがこんな感じでよろしいですかね?
$filep = 〜/lock.txt;
$fp = @fopen( $filep, "r+" );
@flock($fp,LOCK_EX);
=======================
sql関連の処理
=======================
flock($fp,LOCK_UN);
fclose( $fp );
・・・で後はlock.txtが存在するかどうかといった条件を
作ればよいというわけですね。
連番の維持に関しては入力後に変更や削除するようなデータではないですし、
番号も処理毎にまとまっていれば問題ないので大丈夫だと思います。
色々とありがとうございます。勉強になりました。
742 :
NAME IS NULL :2006/11/25(土) 16:34:17 ID:eQzXrEm9
>>738 EUC以外の”ある文字コード”で統一されて「いない」
カラムなのです・・・
(たとえば掲示板の書き込みのように URLぺたっと
張られるようなイメージ)
なので、入れるときも、出すときもEUCで放りこみたいんですが・・
無理なんですかねぇ・・・
PostgreSQL側でのチェックとか外せないのかな・・・?
posgresのことまったく知らんが、 Binary型みたいのに放りこめばいいんじゃねぇ?
744 :
NAME IS NULL :2006/11/27(月) 23:42:45 ID:s994NHnA
PostgreSQL 8.2 RC
>>742 それはテキスト型とは言えないだろう。
入れたものをそのまま取り出したいなら、BYTEA型にしとけ。
>>742 INSERTするときプログラムで文字コード判定して
EUCにエンコードしてから
いれりゃいいんじゃね?
1000万件のレコードからselectをかけるか検討しているの ですが、結構運用的に無理があったりしますかね。
ダメったときのこと考えたらoracleにしておいた方が サポ逃げできるけどなぁ・・・ 運用してるとこもあるだろうが、専門タスクチームとか あるんじゃねぇかなぁ・・・ ちなみに俺が今やってるのはレン鯖なこともあり高々15万件だが PHPのレスポンスは2秒強掛かってる
おっとポスグレ74でな。
どういうテーブルだと15万件で2秒もかかるんだ……? フルスキャンにしては速いし。 うちは初代Mac miniと8.1.3で300万件に50ms。
>>751 まてまてポスグレのselectではなく、
phpからのレスポンスだぜ。
あと糞サーバーはPenIII
そりゃOracleにしたって変わらん サポ逃げ無理でしょ
754 :
NAME IS NULL :2006/12/03(日) 18:13:24 ID:htuJP6z1
postgresqlって、DB全体を一時的に参照のみにすることって可能?
755 :
NAME IS NULL :2006/12/04(月) 23:02:25 ID:z1fFmR6L
PostgreSQL 8.2.0
>>754 とりあえず create temp tabme したら
>>757 FTPサーバにはあるみたいだね。とりあえず、configure;makeまでやった。
ふうむ、、ベータ1のデータディレクトリそのままだと移行できなかった まあダンプして無いけどテストで作ったやつだけだし、このまま続けてみるか。
xmlのファイルをlarge objectを用いてデータベース(postgresql)に格納したいんですけど いいやり方などないでしょうか?
DBを使ったサイトを作ろうと思っていろいろ勉強してるのですが、 最近、DBの設計の本を読んでいてふと思ったことがあります。 私の会社(ウェブ系)のDBは文字コードにEUCを使っていて、最終的なページの出力をShiftJISでやっています。 出力のアプリケーションはPHPで作ってあるのですが、 PHPの内部エンコーディングがEUCで、出力がShiftJISだと、 テンプレートの文字コードはEUCで 宣言がShiftJISにするという、非常に分かりづらい仕様になっております で、自分のサイトはそんな面倒なことにならないよう、モバイル以外は文字コードをUTF-8に統一しちゃおう思っていたのですが UTF-8にすると、日本語のレコードを大量に登録すると、EUCなどを使った時と比べて、容量が1.5倍 (数字は微妙に違うかな?あんまり自身ありません)になりますよね? ということは、メモリにキャッシュできる量も、減ると… どうなんでしょう? なるべく変換しないですむようにしたいのですが みなさん、文字コードはどうしていますか? UTF-8でも実際は気にするほど容量は増えないのでしょうか? 現実問題として、携帯も含めShiftJISが主流なので、全部ShiftJISに統一しちゃうのはどうなのでしょうか? なんか、理由は良く分かりませんが「ShiftJISはやめれ」みたいな意見を見たことがあるのですが… アドバイスお願い致します。 長文失礼しました
>>761 性愛の快楽に胎内を晒したノワールは、その余韻に身体を預け、リオスの上に馬乗りになったままじっとしていたが。
リオスの性欲は、まだ衰えない。今や性欲に正直になったリオスは、火照った顔で大きく息をするだけのノワールごと、身を回転させた。
「あ…」
ノワールが、やっと、そう声を絞り出した時には、立場は逆になっていた。今度上になっているのは、リオスだ。
リオスはノワールに覆いかぶさるようにして、ノワールの性愛に潤んだ瞳を見入っている。
「ノワールさん、いや、ノワール…今度は僕が、君を気持ちよくさせてあげたい…」
「リオスさ…」
ノワールが何か言おうとしたが、その唾液でてらてら光る桜色の唇をリオスは奪い、言葉をも奪ってしまう。
積極的に舌を入れてくるリオス、その舌の動きはぎこちなかったが、ノワールは彼を必死に持ち上げるように、助けるように、舌を絡めてあげる。
「ん…にゅ…んむ…」
じゅるじゅると唾液の絡み合う、淫靡な水音を漏らす二人。そうしながらリオスはノワールの胸を服の上からまさぐりながら、腰を動かし始めた。
「ん…! んん…!」
胸と陰部の性感を当てられるノワールは、舌でふさがれた口から、桃色の喘ぎをもらす。その可愛らしい声にリオスは更に欲情し、貪るように唇を触れ合わせる。
長い長いディープキスを終えた二人は、静かに糸引く唇を引き離した。
はぁはぁと豊かな胸を思い切り揺らしながら呼吸するノワール、その瞳がまだまだ潤んでいるのをみると、リオスはたまらなくなった。
ノワールの服のボタンを外し、彼女の上半身を露にしてゆく。やがて黒いブラジャーが現れると、その谷間に顔を埋め、滑らかな皮膚に口付けした。
「ぁん…」
感じて声をあげるノワール。その一方でリオスの腰の動きが、次第に激しくなってゆく。
優しく噛み付くように乳房の皮膚を味わうリオス。ノワールの中でも性に盛るサキュバスの本能に次第に炎がともっていった。
「ぁん…リオスぅ…もっと、もっと、頂戴、もっと、もっとぉ…」
すっかり雌の喘ぎを上げるノワール。それを耳にしたリオスは彼女の願いをかなえようと、状態を起こし、彼女の形のよい豊かな双丘を優しく掴んだ。
そしてもみもみと弄り回しながら、腰を大きく動かしてゆく。
「いい、いい、いいの、リオスさぁん…」
リオスの動きはぎこちなかったが、ノワールは自分の腰も揺り動かして、彼を助ける。
再び淫靡なじゅぷじゅぷという水音が接合面から響いてゆく。その一方でリオスは勃起したノワールのピンクの乳房を弄り、つねあげた。
「ぁ…そこ、だめぇ…」
すっかり上気した艶やかで可愛らしい顔が、心にもない拒否の声をあげる。リオスは何をしてほしいか悟り…口を乳房に近づけ、優しく噛んだ。
「ひゃんっ!」
望む行為を手に入れたノワールは唾液が行く筋も糸を引く口を大きく開いて、叫んだ。
リオスは腰を更に強く動かしながら、貪るように乳房を含み、噛み、舌でちろちろと嘗め回す。その動作はだんだん激しさを増してゆき…
「いやぁあああああんっ!」
ノワールが、達した。膣がさらにぎゅぅっと痙攣するように男根をしめつけ、生暖かい愛液をぶちかける。
びくびくびく、とノワールの腰は大きく動き、リオスの男根を刺激する。
リオスはこの快楽を余さず味わおうと、素早く乳房から口を離すと、完全にノワールに馬乗りになり、大きく男根の抜き差しを始めた。
まで読んだ
>>762 種馬ディープインパクトが羨ましい
まで読んだ
>>761 UTF-8が使えるならいかなる犠牲を払ってでも使うべし。
シフトJISは悪魔のコード系。
>>761 容量なんて気にしない。半年もすれば改善される。
UTF で Mac と Win と UNIX の違いを吸収してくれるライブラリがほしい
UTF-8の使用に支障があるOSは排除
EUCでいいじゃん。
EUCに固執する奴は修正主義者のブルジョア反革命分子
770 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/12/11(月) 23:07:59 ID:3tBKtZRs
UTFは不具合あるから使っちゃだめよ。 ユニコード問題でぐぐれ
771 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/12/11(月) 23:10:06 ID:3tBKtZRs
>>766 コネクションで変換してクライアントもサーバーも内部は勝手なコーディングで組むのが普通。
なんでごっちゃになるのか判らん
UTFを嫌う奴はたいていキチガイ コテハンもたいていキチガイ
>>761 の質問はDB関係無いとしか思えん
Webprogの板でもいけば
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;";』の部分が 正しくないのかなと考えているのですが… 長文ですみませんが、アドバイスお願い致します。
>>774 どんなエラーが出たのかぐらい書いたら?
あぁ、シングルクォーテーションが抜けてるのか、 $sql = "SELECT * FROM meibo WHERE id='$id';"; まぁ、SQLインジェクションされ放題なのは黙っておく。
>>776 ありがとうございます!そこを直しただけで上手くいきました!
期待した動作をしないと思ったら、まずプログラムが作ったSQLを見えるようにして それをpsql等で直打ちしてみるといいよ
774の作っているサイトでユーザ名を求められたら、とりあえずヲレは 「'; DELETE from meibo A='A」というユーザ名でログインを試みてみよう。
780 :
NAME IS NULL :2006/12/14(木) 22:20:43 ID:xF0YDAWZ
以前、1000万件のレコードを持つテーブルの運用の件で質問させて いただいたものです。 正確には900万件となり、下記のようなシンプルなテーブルを構築 いたしました。 no | flag -------------- 12345 | 1 67890 | 0 11111 | 1 : create index table_idx on table(no); でインデックスをはり、selectで実行速度を測ってみたのですが、where 指定で1件のnoを抽出するまでにおよそ1分を要してしまいました。 これはもうチューニング等を行ってパフォーマンスを高めるしか方法は ないのでしょうか。 テーブルを10分割くらいにし、分散化されるのであればそうしてみようか とも考慮しておりますが、何か一番効率的な方法があればどうかご教示ください。 すみませんが宜しくお願いいたします。
>>780 インデックスを張った後に ANALYZE した?
>>780 PostgreSQLのバージョンとテーブル定義のデータ型は?
EUC-JP で使っていても、UTF-8 でデータが来るから困るよなぁ。 あと、今度の Vista とか。諸兄はどう対応する?
784 :
774 :2006/12/14(木) 23:31:09 ID:???
>>781 vacuumdbは1日に1回行ってましたが、私はてっきりこの中に
analyzeオプションが含まれているものだと思ってました。。
これからオプション付きで実行し、追って結果をご連絡させて
いただきます。
また、今後は vacuumdb --analyze db としてcronに設定する
ことにいたします。ご教示有難うございます。
>>782 バージョンは7.4.10で、データ型は、noが桁数可変のためtext、
flagがchar(1)です。
早急なご返答感謝いたします。
>>785 where no = 12345 とかやってない?
where no = '12345' とか where no = '12345'::text
とすると速くなったり
どうしてもなおんなかったら EXPLAIN してみ
788 :
780 :2006/12/15(金) 17:21:43 ID:???
皆様のおかげで速度の改善ができました。 原因は、私がvacuumdbのデフォルトをvacuumdb --fullと同義であると 勘違いしていたため、analyzeされていなかったという馬鹿さ加減でござ いますが、一つ勉強になり、本当に感謝しております。 最後に経過報告といたしまして、EXPLAINの結果を以下に記載させて いただきます。 この場をお借りし御礼申し上げます。 db1=> EXPLAIN select count(*) from no where no='12345678'; QUERY PLAN --------------------------------------------------------------- Aggregate (cost=0.01..0.01 rows=1 width=0) -> Seq Scan on no (cost=0.00..0.00 rows=1 width=0) Filter: ("no" = '12345678'::text) (3 rows) ↓ ↓ ↓ db1=> EXPLAIN select count(*) from no where no='12345678'; QUERY PLAN ------------------------------------------------------------------------- Aggregate (cost=6.02..6.02 rows=1 width=0) -> Index Scan using no_idx1 on no (cost=0.00..6.01 rows=2 width=0) Index Cond: ("no" = '12345678'::text) (3 rows)
んで、SELECTの時間はどれくらいになりました?
790 :
780 :2006/12/16(土) 13:35:25 ID:???
>>789 1分以上かかってたのが、1秒かからなくなりました。
indexの偉大さを実感できました。。
おまいらの中でautovacuumを「最適に」使いこなせている奴はいますか? あのパラメータ設定が正直謎すぎる。
ログにクライアントのIPアドレスを残す事ってできるんでしょうか? 一応postgresql.confのlog_line_prefix = '%r'にしてIPアドレスを出力させるようにしたんですけれど SSHからのpsqlコマンドによるセッション、 WebアプリからのTCP/IPによるセッションともにlocalhostもしくは127.0.0.1表示になってしまって IPアドレスを出力させる意味があまりない・・・ 実際のユーザのIPアドレスを残したいんですが、Postgresqlの機能では無理なんですかね。 Webアプリ側からユーザのIPアドレスをDBに渡すとかしないとダメ?
WebアプリからのアドレスはWebアプリが動いてるWebサーバのアドレスだしな
sshでもpsqlを実行したサーバのアドレスだしな
796 :
NAME IS NULL :2006/12/21(木) 18:13:29 ID:6ZyxnkZ3
すいません。どうしても解決しないので、もし誰かご存知でしたら教えてください。 今、postgres8.2.0とpgpool2 1.0.1の環境で、普通の処理はまったく問題ないのですが、フィールドtextに対して、かなり長い値を設定し、insertやupdateを発行するとうまく更新されないのです。 こんな現象がおきているのは私だけなんでしょうか?
797 :
NAME IS NULL :2006/12/21(木) 18:14:40 ID:6ZyxnkZ3
796です。 ちなみに、pgpoolを経由しないと、問題なく登録、更新はできました。
長さが問題なのか、特定の文字列が問題なのかは調べた?
799 :
NAME IS NULL :2006/12/21(木) 20:21:02 ID:6ZyxnkZ3
796です。 調べましたが、どんな文字でもダメでした。。。 すごく長くすると、エラーさえも起きずに固まります。 unexpected EOF on client connection とエラーがでているので、pgpoolでつかんだままなのかも知れないのですが、なにか解決方法はあるのでしょうか?
varcharとかだと問題ねーの? あとはpgpoolのログってとれない?
これ何? [pgsql-jp: 37852] Re: LIKE句による前方一致検索のエラー(invalid memory alloc request size)
知らんけど、日本で使うのにロケールをC以外にしてるやつがいるのか
>>802 勝手な思い込みで設定する輩が
たまにいるみたいよwww
「グレスケはロケールをCにしないと動かない欠陥DBM」とチラシの裏に書いておこう
ここで聞くのがいいのか解らないけど。 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のオプションはどんなのつければいいの?
>>806 /usr/local/pgsql/lib とか include/ のディレクトリにあるファイルを必要とするから
動かすどころかインストールする必要はないけど、Bサーバでビルドする必要はある。
バイナリパッケージでpostgresql-libなんてのだけ入れる手もある。
そんときは指定ディレクトリ先が変わるけど、ひょっとしたら--with-pgsql だけで
見つけてくれるかもしれない。(やったこと無い)
よくワカランかったら、インストールまでして今まで通りのオプションをつければいいんじゃね。
808 :
NAME IS NULL :2006/12/31(日) 10:34:06 ID:7k+gGJn4
大晦日に恐縮ですが、質問です。
PostgreSQLで日本語問題を解決しようと
このスレの
>>42-47 を参考にして
initdb --encoding=EUC_JP --no-locale
としましたが、実際にpg_settingsを覗いてみると
クライアント/サーバのエンコーディングはSQL_ASCII、
lc_*はja_JP.eucJPのままとなっています。
initdb実行は正常に行えたと思います。
lc_messages〜lc_timeはpostgresql.confをいじれば良いかと思いますが、
その他のパラメータに関してはどのように設定したら良いのかわかりません。
また、この件(PostgreSQLの日本語問題)について
詳しく記載されているサイトなどありましたら教えて頂けないでしょうか?
よろしくお願いします。
809 :
808 :2006/12/31(日) 10:36:05 ID:7k+gGJn4
補足です。 PostgreSQLのバージョンは7.4.13で CentOSでrpmのものをインストールしました。
810 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/12/31(日) 12:02:16 ID:+YaIr0XC
エンコーディング直せないからDB作り直したけど
initdbする前にDBあったんじゃない? 消してつくり直してみては
>>807 ありした〜
Postgresをインストールする方法で
接続することができました。
,. -ー冖'⌒'ー-、 ,ノ \ / ,r‐へへく⌒'¬、 ヽ {ノ へ.._、 ,,/~` 〉 } ,r=-、 /プ ̄`y'¨Y´ ̄ヽ―}j=く /,ミ=/ ノ /レ'>-〈_ュ`ー‐' リ,イ} 〃 / / _勺 イ;;∵r;==、、∴'∵; シ 〃 / ,/ └' ノ \ こ¨` ノ{ー--、〃__/ 人__/ー┬ 个-、__,,.. ‐'´ 〃`ァーァー\ . / |/ |::::::|、 〃 /:::::/ ヽ / | |::::::|\、_________/' /:::::/〃
814 :
NAME IS NULL :2007/01/05(金) 20:20:48 ID:mthSBstD
すいません、ちょっと質問があります。 CentOSにてPostgreSQL 7.4.13を動かしているのですが、クラッシュしてしまいました。 dataフォルダを 救出することは出来たのですが、これを再構築したサーバに、コピーして 使用することは出来ますでしょうか? /var/lib/pgsql/data を上書きしたのですか 起動することが出来ませんでした。 何か気をつける事とか、ありますでしょうか?
815 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2007/01/05(金) 22:56:40 ID:+zslfGUn
さば缶のことは知らないけどDATAフォルダーをコピーするのは違うと思うな バックアップデーターとってないの?
816 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2007/01/05(金) 22:57:49 ID:+zslfGUn
PostgreSQLのDBバックアップ&復旧方法
http://www.kenti.jp/dat/2005/03/postgresqldb.html PostgresのDBをバックアップし、その後復旧する方法です。
(._.) φ メモメモ
バックアップ方法
(postgresqlは起動した状態にしておく)
% pgdumpall > backup.db
復旧方法
(postgresqlを起動し、initdbだけしておく)
% psql -e template1 < backup.db
復旧時の注意点は、やっぱり -e をつけないとだめなようです。
817 :
814 :2007/01/06(土) 08:38:26 ID:WKYcCNZ9
バージョンが同じならDATAコピーだけでいけるよ OSやCPUもあわせないとならんと思うけど
819 :
NAME IS NULL :2007/01/06(土) 11:55:00 ID:1ae5baRY
話の種提供 1981から1983の間にK谷市H陽中にてM畑44Xの 7某上野家系泰市の子泰和とその仲間たちは 6あらゆる身障者と差別されやすい容姿や身体的特徴 4のある人を化け物呼ばわりし、 0第三者の視線が外れると裏顔をあらわし 2弱者に対しては豹変しキチガイやくそたれなどの人に向けてはいけない 6言葉を交えた恫喝、罵倒を行う 社会的弱者や負組が特に嫌いで死ねばいいと度々発言している こういう類は親族ともども不幸とは無縁の 社会的信用を得たお金持ちの生活をしている
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 で新たに何か設定しないといけないものなのでしょうか?
explain analyze してみたら。
>>821 explain しろってのは分かるのですが、この程度の簡単な SQL が
バージョンアップすると劇遅になるのが不可解なのです。
この程度の SQL でチューンが必要な DB になりましたか。
うんこだから、あきらめろ。
>>814 >起動することが出来ませんでした。
サーバから、何かメッセージなり、ログなり出てませんか?
うんこすぎ
>>822 なったっつうか、Postgresは昔っからそうだよ。
商用製品じゃないからOracleみたいに互換モード用意しろとは言わないけど、
いまだにプランナの特性がころころ変わるから困ったもんだ。
プランナが最適な実行計画を選択しくれないケースではたいがいHashJoinを
選択しているから、enable_hashjoinをon/offしてコストを求めてみて、IndexScan+
NestedLoopの方がHashJoinよりコストが低くなるよう、*_costを調整しろ。
#デフォルト値はディスク能力の高いサーバー機向きではないっぽい。
そうやって最適値を求めても、場合によってはバージョンアップでまた求めなおす
必要があったりするわけだけどね。
うんこっこだねw
使い出したらバージョンは変えないほうがいいでFA?
おまえには無理でFA
とりあえず 8.1.5 にバージョンダウンして元の速度(瞬時)に戻りました。
>>828 ありがとうございました。
ちなみに 8.2.0 では Hash IN Join で 8.1.5 では Nested Loop になってました。
他にもパフォーマンスが劇的に劣化している例があるようなので 8.2.1 を待ってみます。
833 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2007/01/08(月) 00:20:54 ID:bQTUi6zK
ああ、postgresはプランナーにバグあるよ。 誰か直して
834 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2007/01/08(月) 00:22:38 ID:bQTUi6zK
JOINにして JOINの順番変える事でプランナーをある程度制御できるって書いてある。
いつのまにか8.2.1あるけど、8.2.0で問題あった人、どうですか? * Fix planner mistakes for outer join queries (Tom) * Fix several problems in queries involving sub-SELECTs (Tom) ってあるけど
>>835 お、まじですか。昨日はなかったはずなんだけど。
早速試して報告します。
駄目だった。また遅くなった… 8.1.5 に戻ります。
だーみだこりゃ
ちなみに 8.1.6 も試してみましたが問題なしだった。これは当然か。 本家 ML では同様の報告を見掛けるのに 日本の ML でパフォーマンス劣化の話は見たことありませんね。 皆さん 8.2 系使ってないのかな? 今回の問題を開発者に出来れば日本語でフィードバックしたいんだけど どうすれば良いものでしょうかね。 ML 等の不特定多数宛に情報を流すのは避けたいのですが。 せめて Bugzilla レベルのものはないのでしょうか?
おめーのフィードバックなんかイラネ
>>839 日本のMLに投げれ。きっと誰かが英訳してくれる。
842 :
ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84. :2007/01/09(火) 20:10:27 ID:EnJ2TtdZ
日本postgres協会の人が2ちゃんを巡回しているl事を祈ってここに書こう
843 :
ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84. :2007/01/09(火) 20:12:54 ID:EnJ2TtdZ
30分でおわたのか はえーなー アナライズかけたん?
844 :
NAME IS NULL :2007/01/09(火) 21:50:23 ID:NMxA2CQg
8.2系、8.2.1出たので試そうかと思ってましたが、まだ駄目っぽいですね、、、
バグじゃなくて8.2としての仕様だな。 8.3が出るまで待てってことだ。
846 :
NAME IS NULL :2007/01/10(水) 00:31:30 ID:T8inmjPD
>>845 ま、あと半年くらいで8.3出てくるからなあ
847 :
NAME IS NULL :2007/01/15(月) 09:00:24 ID:tMwB6TgS
DBの項目に存在する値の種類を調べたいのですが、どのようなSQL文を打てばよいのでしょうか? 結果としては次のようなものを期待しています。 データ id name ---------- 1 hoge 2 hogehoge 3 hoge 4 saitama SQL文の結果 name ----------- hoge (1) hogehoge (2) saitama (1) 件数はあってもなくてもかまわないです。 以上よろしくお願いします。
>>847 これなら分かるんだが。。。
hoge (2)
hogehoge (1)
saitama (1)
>件数はあってもなくてもかまわないです。
゚Д゚)ハッ!
select name,count(*) from table group by name
件数無くてもいいなら、select distinct name from table でもいいかも。
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の規格からして関係なかったように思いますが・・・ やっぱり、カラムも大文字小文字意識しないといけないのでしょうか?
>>850 > tb_sampleテーブルのカラム名に
> DATA_NO
> data_no
> というのがあり
これ、大小が違うだけなんだよね?
>>851 2バイト文字ではないです
あくまで半角英数のみになっています。
その上で大小が違うということです。
>>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
//ここまで修正
すいません、同一テーブルに同名のカラムが存在しているように見られていたことに今気づきました。
>>853 create tableんときに"DATA_NO"ってくくったんじゃない?
くくると大小を区別し、くくらないと小文字と同じになるような
>>854 やっぱそういうことになりますよね?
で、問題は確か準拠してるSQLの規格がカラムの大文字小文字を問わない奴だったようなきがしたから聞いてみたかったんです。
まぁ、大文字小文字を区別するのであればソフトからの利便性考えて小文字にしようかなと・・・
大文字小文字を問わないのはSQLキーワードだべ
>>856 アーーーッ orz
ありがとう、めちゃくちゃその一言で救われた
858 :
NAME IS NULL :2007/01/22(月) 07:29:51 ID:aHLhnF6z
8.1.5を導入してみました。configureオプションに UNICODEをつけてもインストール後の初期のDBはEUCになってしまいます。 initdbのときもオプションつけないとEUCに。。 (-E UNICODEつけるとUNICODEにはなる) なんでですかね?デフォルトロケールをUNICODEにしたい。
もしかしてデータ型のvarchar(n)のnって最大バイト数でなく最大文字数ですか? 文字コードによるバイト差とか気にしなくてOKですか?
860 :
859 :2007/01/28(日) 01:02:05 ID:94XmzyhW
あともうひとつ^^; 「text は最大文字数を指定する必要がありません。また、char、varchar に比べて効率が良いので、文字列を扱う場合は text の使用が勧められています。」 と書いてあるサイトを見つけたのですが、これってあってます? 文字列型は全部textでつくちゃって何か問題ないのでしょうか? たとえばよけいな容量をくうとか、遅くなるとか・・・(根拠は何もないけど)
>>859 文字数。バイト差は気にしなくて桶
>>860 文字数チェックとかパディングとか余計なことしなくていい分
text型の方が速いんじゃね。
また、バイト数じゃなくて文字数なんだから、charにしろvarcharにしろ
INSERTされるまで何バイトか判らないので、text型に比べ容量効率がいいとも思えない。
結局
varvhar = 文字数チェック付きtext
char = 文字数チェック+パディング付きtext
って俺の中で結論つけて、検証すらやってねぇ。
863 :
859 :2007/01/29(月) 23:47:47 ID:JCUg+EpF
>>861 >>862 遅くなりましたが
レスどうもありがとうございます。
考えるの面倒だから^^;
TEXTにして、もし必要なら後で入力のバリデートで文字数制限してみます。
まあ、後でデータ型の変更も8以降ならわりと簡単にできそうですけど
864 :
NAME IS NULL :2007/01/31(水) 13:42:19 ID:EuNAQDjk
こんにちは プログラム版から誘導されてきました。 店テーブルと商品テーブルとお互いのIDを主キーにしたラインナップテーブルがあったとして 例えば商品4を扱っている店とその店が扱っている全ての商品を下のような形の配列で取得したいです。 [0]=> [shop_id] => 1 [shop_name] => 店1 [item] => Array [0] => Array [item_id] => 1 [item_name] => 商品1 [2] => Array [item_id] => 3 [item_name] => 商品3 [3] => Array [item_id] => 4 [item_name] => 商品4 [1]=> [shop_id] => 3 [shop_name] => 店3 [item] => Array [0] => Array [item_id] => 4 [item_name] => 商品4 [2]=> [shop_id] => 6 [shop_name] => 店6 [item] => Array [0] => Array [item_id] => 1 [item_name] => 商品1 [1] => Array [item_id] => 4 [item_name] => 商品4 こんな感じの多重配列を取り出したいのですが、 今のところ、一回、店テーブルから商品4を扱っている店の列を取り出した後 その配列をまわしてもう一度ラインナップテーブルにSELECTを発行して 上のような配列を得ています。 プログラム版で「内部的なSELECT回数は別としてSQL一発でいける」といわれたのですが どのようなSQLでいけるのでしょうか? GROUP_CONCAT()という関数を使うという話もありましたがこの関数postgreにはないですよね? postgreでは一発で取り出せないのでしょうか? お願いいたします。
865 :
864 :2007/01/31(水) 13:47:39 ID:???
あ、頭のスペース消されて見づらくなってるOTZ 店データの中に商品の配列がある状態です。 [shop_id] => 1 [shop_name] => 店1 [item] => Array [0] => Array [item_id] => 1 [item_name] => 商品1 [2] => Array [item_id] => 4 [item_name] => 商品4 こんな感じです。すいません
>>865 店テーブルと商品テーブルの関連がDB上でリレーションが
貼られているという前提で、
店テーブルと商品テーブルを結合してshop_idで並べ替えたSQLで
全部のデータを一回のSQLで取ってきてプログラム側で順番に
取り出して配列にする
とかじゃだめ?
867 :
865 :2007/01/31(水) 23:12:03 ID:???
>>866 レスありがとうです
ふむ〜
なるほどそれなら一回ですがちと強引な気が・・・
やっぱりpostgreでは厳しいのかな
SQL板に行ってみます。
うろうろすいません^^;
この板勢いなさ過ぎ・・・
postgreSQLはあんまり人気無いのかな?TT
おじゃましました〜
868 :
ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84. :2007/02/01(木) 00:51:05 ID:up3HpEho
テーブル名、カラム名が書いて無いので判りにくいんだけど JOIN とIN を使うのかな? あれ?Arrayなんて使ってええの? 使っちゃいけない気がするのだが・・・
869 :
ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84. :2007/02/01(木) 00:52:04 ID:up3HpEho
ARRAYやめよう。 使用禁止。
870 :
NAME IS NULL :2007/02/01(木) 01:55:12 ID:fAFpWpWL
>>867 オブジェクトデータベースとかになるのかな?
まあ、セオリーは全部の情報を表として取って来て
ぐるぐる回しながら格納していくんだと思う
ところで、札幌市の市場の入札システム(水産、たことか貝とかかすべとか)は
PostgreSQL使ってるよ
俺が作っただよ
すみません、どこで聞いていいか分らなかったのでここで聞かせてもらいます。 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
872 :
NAME IS NULL :2007/02/01(木) 08:28:48 ID:fAFpWpWL
>>871 接続は出来るの?
列の値を取って来れるの?
先ず話はそれから?
873 :
871 :2007/02/01(木) 09:08:51 ID:???
>>872 SQLへの接続とSQL構文での値の抽出とかですか?
本に書いてあるのは、実際にしてみたりはしましたけど・・・。
というか、
>>871 でやろうとしているのは
postgresqlに組み込んだデータを資源として
Cでの二分探索木を行う試みなんですが。
>>871 定番中の定番であるシーラカンス本にlibpqを使った例が書いてあると思うが?
今のままだと全然PostgreSQLの話題じゃない。
>本に書いてあるのは、実際にしてみたりはしましたけど・・・。 したけど、どうなんだ。 Cで2分探索木ならスレ違いだろ。
876 :
871 :2007/02/01(木) 09:53:02 ID:???
>>874 あれ? そうでした?
見落としたかな?、ちょっと見直してきます。
ちなみにシーラカンス本は・・・
技術評論社
石井達夫 著
PostgreSQL完全攻略ガイド
ですよね?
>>875 871のところでどういう手法でやればいいのか
具体的なところが分らなくなって途方に暮れてたので・・。
スレ違いですいませんm(_ _)m
877 :
ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84. :2007/02/01(木) 18:45:50 ID:BE/MXAwv
Cか どうしてもCなのか? STLコンテナのMAPとかVECTORじゃだめなのか? 自作するんか?
878 :
871 :2007/02/02(金) 02:09:47 ID:???
>>877 はい、どうしてもCです・・or2
Cのソース上にデータ書けば済むところではありますが
それをするとpostgreを使わなくなってしまいますし
libpqもあるのでC&postgreでやりたいのですが。
メタコマンド\copyでCでの取り込み用に中間ファイルを作ってからやればいいんだろうか?
出来れば中間ファイルを作らずに行いたいですが・・・うーん。
>>878 とりあえず、全角半角混ざったのと、Postgreっていう略称は知能障害としか思えんからやめろ
880 :
871 :2007/02/02(金) 02:59:26 ID:???
m(_ _)m
日本語でポストグレス、というのを考慮してね Postgre で寸止めされると気色悪いw
883 :
ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84. :2007/02/03(土) 00:23:15 ID:eaIOV6qU
いっそのことデーターベースにやらせたらどうだろう。 インデックス張って検索やらせるんだ。 突拍子も無いアイデアだとは思うが
さすがにDBにやらせるのは無理があんべ connect byなんかもロクにパフォーマンスでないしニガテな処理の類でそ
885 :
ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84. :2007/02/03(土) 02:06:06 ID:eaIOV6qU
皮肉で書いてるのだが なんのためのリレーショナルDBなのやら
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以降を手打ちすると文字化けしません。 なぜですか?誰かエロ居人教えてください
887 :
NAME IS NULL :2007/02/05(月) 09:30:06 ID:HV6WuwW4
8.2.2, 8.1.7, ..., 7.3.X
888 :
NAME IS NULL :2007/02/05(月) 23:00:39 ID:gpmdvzrY
本家のページでもアナウンスし始めたな。>8.2.2その他 今回はセキュリティパッチ。
あるカラムにT155B80(B)W55H78という感じのデータが入ってるんですけど selectするときに〜 as t , 〜 as b , 〜 as w , 〜 as hとかって別々に分解して取り出すのって無理ですか? 読み出してから配列まわしてプログラムでやらないとだめでしょうか? お願いいたします
890 :
889 :2007/02/06(火) 14:10:21 ID:GHmM0Kaz
またjaneで下げてしまいました。 sageにチェックが、デフォルトではいってるのやめてもらいたいですねOTZ すれ汚しすいません。一応IDだしとこうと思いまして お願い致します
892 :
889 :2007/02/06(火) 16:59:17 ID:GHmM0Kaz
>>891 ありがとうございます
ほぼ出来ました。
えーと
取り出したいのはT155B85(D)W57H84でたとえるなら
155
85
D
の三つなのですが
153は substring(three_size from 2 for 3) as t で
Dは substring(three_size from position('(' in t_girl.three_size)+1 for 1) で
で取り出せました。
問題は85で、ここは3桁の可能性もあります。
POSIXで
substring(three_size from 'B.*\(') as b
とかしてみたのですが
ERROR: invalid regular expression: parentheses () not balanced
と怒られました。エスケープの仕方が違うっぽいし
そもそも、これじゃあ、"B85("がマッチしちゃうから違うんですけど。
なんか良い案があったらお願いします。
そもそも、全部の数字が別カラムに入ってない時点で、設計に問題があるのですが・・・
893 :
889 :2007/02/06(火) 17:21:02 ID:???
なんどもすいません substring(three_size from 'B[1-9][0-9]|B[1][0-9][0-9]')で B85 まで取り出せました。 Bはどうにか出来ませんでしょうか?
>>893 "B85"の2文字目から後ろを取り出すの?
もっかいsubstringすれば?
895 :
893 :2007/02/06(火) 20:00:51 ID:GHmM0Kaz
ありがとうございます substring(substring(three_size from 'B[1-9][0-9]|B[1][0-9][0-9]') from 2) で出来ました。 お世話になりました。 結構処理早いですね。 スリーサイズと身長とバストとヒップと全部、この処理で別項目に分けたけど ほとんど処理する前と時間かわらなった。対象は6000件くらい。
896 :
NAME IS NULL :2007/02/07(水) 19:10:55 ID:6/it0EpA
Wait before applying 8.1, 8.2 security release.
897 :
NAME IS NULL :2007/02/07(水) 23:59:50 ID:MkuIhqmm
date_from - date_to で interval が帰ってきますが、 この interval を 分 に変換するにはどうすればよいでしょうか。 extract でごりごり書くのでしょうか。
>>897 select (extract(epoch from timestamp date_to) - extract(epoch from timestamp date_from))/60
でどうよ。
899 :
NAME IS NULL :2007/02/08(木) 13:07:44 ID:Ecl3eExm
Reviced Security Releas available for 8.2, 8.1, 8.0
900 :
NAME IS NULL :2007/02/09(金) 17:27:57 ID:eSr0Uf1/
お世話になっております。 order by 〜 descでソートすると nullが入ってる項目が最初に出てきちゃうのですが ascの時もdescの時も後ろに出すことは出来るでしょうか? ソートした時はnullのものは検索に引っ掛けない、という風にしていたのですが nullのものが後ろに出た方が自然だ、という意見もありまして。 もう一度nullのものだけ検索かけて合体とか・・・イヤイヤ 簡単な方法ありましたらお願いします。
>>900 ソート対象のフィールドが数値で最小値が 0 以上なら
>>901 でいいけど、
そうでないなら、
order by case when [xxx] is null then 1 else 0 end desc, [xxx] asc;
でいいんじゃないか。
環境無いから試せてないけど。
903 :
900 :2007/02/12(月) 01:25:39 ID:6lvwoyZe
>>901 >>902 レスありがとうございます
遅くなってすいません。
そうか、普通にorder byにもcaseかけるんですね。
ふ〜む。結構柔軟に出来てるんだなあ。
>>903 俺も一瞬、おおとか思ったけど、
考えてみりゃ、CASEやら関数やらをかました
列の別名をorder byに書けるんだから、
そりゃそうか、と思った。
ながいこと再起動とかvacuumとかやらずに頻繁にupdate,insertしてるんですけど とうとうディスク容量があと2%ぐらいになってしまいましたぁ>< これは再起動とかvacuumとかでかなり容量減りそうですか?
再起動してもかわらんだろ。 vacuum fullなら減るが、一時領域が必要じゃないかな。 これはもうダメかもわからんね。
vacuum full出来なけりゃ ダンプ→削除→リストア
> vacuum full する前に一旦、vacuumのみを行なったら その後に行なうvacuum fullは少しは短時間で完了できるものですか?
910 :
NAME IS NULL :2007/02/14(水) 13:45:07 ID:yJifxSet
正規表現で()をエスケープするにはどうするのでしょうか? 例えば文字列の中から (0)とか(8)とか取り出したいとき substring(hoge from '\([0-9]\)') とかやってみたんですけど、駄目みたいです。 お願いいたします。
911 :
NAME IS NULL :2007/02/14(水) 14:19:51 ID:7NlKu+Xn
SQL SERVERで言う所のTimeStampみたいなものはないでしょうか? Serialとは挙動が違うし・・・・ SQL鯖のTimeStampは行IDのようなものらしく 自動的に更新されたりする 行をユニークに保つための型っぽいんですが・・・ 何に使うかというと、頻繁に同時更新が行われそうなシステムの楽観的更新に使用したいと考えています。 なので精度が極力高いようにしたいんです。
>>910 substring(hoge from '\\([0-9]\\)')
913 :
912 :2007/02/14(水) 14:45:02 ID:???
途中で送ってしまった。
>>912 の書式はpsqlを使った場合ね。というかほとんどの言語でもそのような書き方になるが、
一つ目の\はpsql(シェル)に対してエスケープさせているってことで。
916 :
NAME IS NULL :2007/02/14(水) 15:17:54 ID:7NlKu+Xn
>>914 >>915 レスサンクスです
Windows上のPostgresで処理を行うんですが
今まではSQLサーバでやっていたんです。
その時SQLサーバのTimeStampの挙動は一意になる事が保障されているようなものでした。
TimeStampだと時間になるのでWindowsの分解能に依存し、ものすごい低確率で、起きないかもしれませんが
最悪2箇所からの同時更新の際にかぶってしまう可能性が出てきますよね?
(確かLinuxだとマイクロ秒まで取得できていたかと・・・)
実際にかぶったわけではないですが、出来る限りの可能性は取り除きたくて調べていたんです。
ぶっちゃけた話、更新の時に絶対かぶらない保障があればそれこそなんでもいいということなんです。
>>916 Serialなら裏でSequence使ってるから、
セッション毎に個別のシーケンス値が
割り当てられる事が保証されているはずだが。
918 :
NAME IS NULL :2007/02/14(水) 15:40:06 ID:7NlKu+Xn
>>917 レスありがとうございます。
今一歩理解力なくてすません
ってことは・・・
楽観的更新の時、 参照した時の元の値=現在のDBの値 ならば
NextValをセット でOK?って事でしょうか?
>>916 あ〜、意味をはき違えてたかもしんないwww
SerialじゃなくてSequenceで良いと思うよ。
で、SQL ServerでいうTimeStamp型の代わりに、
bigint型の列を定義して、
その列の値について
> 参照した時の元の値=現在のDBの値 ならば
> NextValをセット
すると同時に更新用の値をそれぞれの列にセットで良いと思われ。
920 :
NAME IS NULL :2007/02/14(水) 15:58:05 ID:7NlKu+Xn
>>919 把握!!1111111
色々回りくどく聞いて済ませんでした(;´∀`)
やってきます!ノシ
921 :
910 :2007/02/16(金) 00:25:28 ID:JCviIvwK
>>912 超遅いレスですがありがとうがとうございました。
無事出来ました。
スクリプト(PHP)内から使うと
〜 and substring(hoge from '\\\([0-9]\\\)')
になるんですね。
気づくまでちょっと時間かかりました。OTZ
922 :
NAME IS NULL :2007/02/16(金) 00:30:54 ID:JCviIvwK
すいません 立て続けですんません もう一つ質問です^^; prepareしてSQLを実行するときORDER BYはプレイスフォルダに出来ないのでしょうか? SELECT * from test order by ? でprepareして、カラム名をバインド後実行してもソートされません。 やり方が違うのでしょうか?それとも出来ないのでしょうか? (PHPのPDOで試してます。psqlでは試してません・・・) お願い致します
PDOのプレースホルダーは?じゃ無かったような
?も使えるんだな。俺の思い込みか。
>>922 PHPのPDOがどういう実装になっているか分からないけど
SQLのPREPARE文に対応している形に変換されているなら
PREPARE文で出来ないから出来ない。
そんなのPHP側で?の部分に変数埋め込んで展開すれば良いだけじゃんか。
SQL injection が、とか言うなよ。そもそもカラム名だろ。
そこに injection 可能なパラメータが来ることがあるかもしれないなら
それは設計が間違っているんじゃないかと。
926 :
912 :2007/02/16(金) 02:50:24 ID:???
>>921 そりゃ違うぞ。間違いではないがちゃんと理解してない。
$sql = "SELECT substring(hoge from '\\([0-9]\\)') FROM Table";
もしくは
$sql = 'SELECT substring(hoge from \'\([0-9]\)\') FROM Table';
これで$sqlの中身は
SELECT substring(hoge from '\([0-9]\)') FROM Table
になってバックエンドに渡される。
>>922 たぶん
SELECT * FROM test ORDER BY 'カラム名'
となってて、'カラム名'という文字列でソートしてる。
この文字列は当然不変だから意味を成さない。
基本的に"データタイプ"を指定するので、カラム名そのものを
渡すのは無理じゃないかな?
試したことないのであれだが、そのあたりは
>>925 に同意
927 :
NAME IS NULL :2007/02/16(金) 08:38:02 ID:LbPZpHQw
>>922 列名ではなく列番号なら出来るかも。
やったことないけど。
928 :
NAME IS NULL :2007/02/16(金) 10:18:33 ID:Fn+4HLpK
>>925 >>926 レスありがとう御座います。
>>925 確かに、カラム名をフォームでテキスト入力させることはないだろうし
メソッドもPOSTにするだろうしインジェクションの心配はないですよね。
また値じゃないからできないのかなあ、とも思ったんですけど
出来ないじゃなくて、必要ないって感じですか。
すっきりしました。ありがとうございます。
>>956 >$sql = "SELECT substring(hoge from '\\([0-9]\\)') FROM Table";
>もしくは
>$sql = 'SELECT substring(hoge from \'\([0-9]\)\') FROM Table';
そうですよね?最初そうだろうと思って、上の例のようにしたんですけど
エラーは出ませんでしたが意図した結果が得られなかったんです。
しかも、デバッグのために発行したSQLを画面に出してるんですけど
'SELECT substring(hoge from '\([0-9]\)') FROM Table'
と表示されました。
SQL上の正規表現の()のエスケープ自体\\(2コ)にしなきゃならないのかと思って
921の例のようにしたら、意図した結果が得られたんですけど・・・
なんか勘違いしてるかな〜
時間があったらもう一度試して見ますね。
929 :
NAME IS NULL :2007/02/16(金) 11:25:10 ID:KW5uPsrG
作成(create等)専用ユーザと、閲覧(select)専用のユーザを作成したいんだけど、 テーブルを作成するごとに GRANT SELECT ON createdtable TO viewonlyuser するのが面倒で困ってるんだけど、なんとかならない?
>>928 > メソッドもPOSTにするだろうしインジェクションの心配はないですよね。
POST とインジェクションってなんか関係あるのか?
> 出来ないじゃなくて、必要ないって感じですか。
カラム名を動的に指定することはあるけど、カラム名はシステム側で持って
るんだからから不正なカラム名ははじいておけばいいだけだ。
>>929 そんなことが面倒になるほどテーブルを頻繁に作成すると言う設計を見直す。
インジェクションとCSRFの区別がついてないと思われ。 そしてPOSTにしてもCSRFは防げない。
少なくとも
>>929 が望んでるもののためではないな。
GRANT SELECT ON TABLE ALL TO viewonlyuser; とかできないから無理なんだよね。
>>934 ストアドで動的SQLを使えばいいんじゃね?
936 :
NAME IS NULL :2007/02/20(火) 02:11:35 ID:sgIFKsE/
7.4を使っとります。 ODBCでAccessから操作してるんですが、PostgresqlにどのようなSQLが送られたか 知るにはどうしたらよいでしょうか。どこかのLogに残ってたりするでしょうか。 具体的には、レコードの1カラムを変更したときにレコードまるごとUpdateしてるかどうかを 知りたいのです。たぶんしてないと思うんですが、CSEってまるごとだった気がしたので。 違ったらすみません。 よろしくお願いします。
>>936 server側でもODBC側でもログは取れるよ。
設定すればだけど。
わぉ、ちょっぱやレスありがとうございます! ちょっと頭悪い質問だったんで自己フォロー入れようと思ったら遅かった・・ 設定を調べてみます
できました!ありがとうございます! とりあえず、ODBC側でログがはけましたが、サーバ側のほうが便利なので調べてみます。 ちなみにupdateは変更箇所のみでしたが、何故かwhere句で抜き打ち的に 主キー以外のいくつかのカラムをチェックしていました。
941 :
NAME IS NULL :2007/02/21(水) 07:33:30 ID:if9xwFYZ
制作環境を全面的にUTF-8に移行させようと思っているのですが、psqlってUTF-8に対応してますか? (今はMac/WinのSJIS+LinuxのEUC-JP) 今はLinux環境がVine3.2なのでPostgreSQLは7.4なのですが、 7.1対応の改訂第3版のシーラカンス本では、psqlはEUCなら日本語を受け付ける、とあります。 UTF-8については言及がなく、そもそも7.1ではUTF-8ではなくUNICODEという名称ですね。 $ psql hoge_db < fuga.sql なんてやるときに、fuga.sqlがUTF-8で書かれていてhoge_dbもUTF-8で作成しているとき、 $psql --encoding UTF-8 hoge_db < fuga.sql という感じにできればと思うんですが。(7.4ではできないみたい)
テーブルを数十万行ほど定期的に消しては入れてを繰り返したら、 だんだんクエリが遅くなっていくんだけども、テーブル削除以外で直す方法ないの? VACUUMしても全然元に戻らない。。
945 :
NAME IS NULL :2007/02/21(水) 15:39:42 ID:mnbRGN6m
windows のポストグレス(現在の最新版(8.21?))へLinux上(バージョンは7.43)のデータを復元したいいのですがうまくコマンドが使えません。 Linuxでpg_dumpを使ってバックアップしたファイル"a.out"を Windows上のc:\に配置した場合 psql コマンドで psql -e testdb > c:\a.out としてもバックアップが復元されません・・・ ググってもコレでよさそうだし・・・・ 上記のコマンド実行結果は なぜかテーブル空間の一覧が表示されてしまいます。 もう訳ワカメラーメン
947 :
NAME IS NULL :2007/02/21(水) 16:28:49 ID:mnbRGN6m
>>946 トンクス
ごめ、こっちに書き込んだ奴の不等号間違えただけだた
psql -e testdb < c:\a.out
これは
psql -e testdb < "c:\a.out"
こうするべきなんだろうか?
むしろ""でパスくくらないと \aがコマンドに間違えられてしまって怒られるんだが・・・
画面では
postgres=# キャレット
てなってて
キャレットの位置から上にあるコマンドを打ち込んだ結果(psql -e testdb < "c:\a.out")
結果も何も出ずにまた
postgres=# キャレット
という状態です。
なにか俺カンペキに勘違いしている????
>>947 >postgres=# キャレット
これはすでにpsql実行中だろ
コマンドプロンプトから実行しなさい
>>947 つか
>>948 の指摘を解消した上で、
まだパスの問題が出るなら、
カレントドライブ、カレントディレクトリをC:\にしてから、
パラメタにドライブレターや\マークを使わないようにすれば良さ気だが?
C:\>C:
C:\>CD \
C:\>psql -e testdb < a.out
950 :
NAME IS NULL :2007/02/21(水) 17:24:52 ID:mnbRGN6m
>>948-
>>949 サンクス!でけた〜!!!
コマンドライン引数に入れてやったらでけたよ
パスは"D:\a.out"
としました。
しっかしこうやってコマンドライン引数に入れるのであれば・・・・Postgresインスコした時に一緒に入ってくる
'オーナー名'へのpsql
のショートカットの使い道がわからんっす(;´∀`)
ほとんどはPgAdminでやっちゃってたから・・・・・
ともかく勘違いしてたんでスッゴイ助かりました!
>>950 > 'オーナー名'へのpsql
DB管理には便利だと思うがなwww
952 :
NAME IS NULL :2007/02/21(水) 17:31:03 ID:mnbRGN6m
ん〜 やっぱりGUIツール使うよりコマンド覚えたほうが色々早いし融通もきくの・・・かな?
>>952 とりあえず、このスレは知能の足りないお前のボヤキを書くスレではない
954 :
ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84. :2007/02/24(土) 23:32:34 ID:ocVpsDw0
前はコマンドだったけど今はアド民3どっぷり
コマンドラインを使うのなら、psql だけは cygwin で make したのを使った方が良い。 mingw の psql はタブ補間も効かないし、使い物にならん。
>>955 俺もWindows版のpsqlは補完が効かなくて、一時期cygwinを入れてたが、
結局pgAdmin3になっちゃった。
でも、テスト的にSQLを書くなら補完の効くpsqlは便利なんだよなぁ。
まぁ、LAN内に常時稼動しているLinux機があるから、そこにあるpsqlから
Windows機のpgsqlに接続することも可能なんだけどね。
CURRENT_TIMESTAMPの時間が20分程度ずれるのですが、これはDBが稼動しているサーバの問題なのでしょうか。
>>957 わかってるならサーバを時刻校正しろよwww
>>958 や、サーバそのものは触れないのです。
確認のお願いをする前に確認しておこうかな..と(・ω・`)
960 :
NAME IS NULL :2007/02/27(火) 11:13:18 ID:eiuGLXcr
外部参照について質問です。 例えば、 テーブルA id | name --+------ 1 | ほげお 2 | ほげこ テーブルB id | name_id | item --+---------+----- 1 | 1 | えんぴつ 2 | 1 | ノート 3 | 2 | 消しゴム の二つのテーブルから、 id | name | item --+--------+----- 1 | ほげお | えんぴつ 2 | ほげお | ノート 3 | ほげこ | 消しゴム のような結果を取得したい場合に、テーブルBの name_id には外部参照の制約を つけるとパフォーマンスが上がるものなのでしょうか? それとも単にデータ整合性が保たれるというだけのものなのでしょうか? 現在、上記の例のようなテーブルで、テーブルAのレコードのみ非同期で削除 したいという案件がありまして、外部参照の有り無しがパフォーマンスに影響 するのかしないのかちょっと不安になったので質問させてもらいました。
>>957 \! でサーバ側の日時を確認すれば分かるでしょ。
アデレードにサーバがあるとか
>>960 上がらない。
外部参照制約をつけた状態でAのレコードを削除すると、
つけない場合より遅くなる。
B.name_idにindexをつけてやれば解決。
964 :
NAME IS NULL :2007/02/28(水) 00:30:15 ID:Xrd/4ZND
>>960 >>963 えっ?FKにしないとJOIN出来ないんじゃないの?
勘違いしてたっぽい?
ということはFKは何のためにあるの?
登録しようとしたときエラーを出すためだけ?
966 :
960 :2007/02/28(水) 09:10:06 ID:???
>>963 レスありがとうございます。
なんとなくそうじゃないかなぁと思ってたんですがこれですっきりしました。
>>964 登録のときと削除のときに、整合性がないデータはエラー判定するための
ものですかね。
そもそも数年前のバージョンでは外部参照制約使えませんでしたし。
MLネタですが、色々なところで有名なhasiru.netの人はなんと言うか… ODBCドライバのメインメンテナを相手になんてことを書いているのか。
正直、あのドライバの出来なら言いたくもなる
>>966 > 登録のときと削除のときに、整合性がないデータはエラー判定するための
> ものですかね。
削除の時に関連するデータを削除することもできるよ。
ようは、整合性をデータベース側で維持するための仕組みだよ。
夜分失礼します。 vacuum analyzeをかけようかと思っているのですが、このオプションは 「vacuum+analyze」という認識でかけてよろしいのでしょうか。 それともvacuumはvacuumで別にかけなければならないものなのでしょ うか。 初心者的な質問で恐れ入りますが、ご教示いただけますと幸いです。