PostgreSQLについて語ろう where OID=2::oid

このエントリーをはてなブックマークに追加
1NAME IS NULL
オープンソースRDBMS、 PostgreSQL について語りましょう。 詳しくは >>2 で。
2NAME IS NULL:2006/01/09(月) 20:19:36 ID:vvjz6A3Z
スレ立て日時点での最新 Ver は 8.1.2 です。

前スレ
http://pc8.2ch.net/test/read.cgi/db/1056992724/

本家 http://www.postgresql.org/
日本 http://www.postgresql.jp/
3NAME IS NULL:2006/01/09(月) 20:29:53 ID:???
>>1
4NAME IS NULL:2006/01/09(月) 22:04:38 ID:tjWnA9u0
JPUG広報担当blog http://blog.postgresql.jp/
5NAME IS NULL:2006/01/10(火) 23:45:28 ID:???
なんだ、このスマートな前スレ1000はw

PostgresSQLについて語ろう
http://pc8.2ch.net/test/read.cgi/db/1056992724/1000
6NAME IS NULL:2006/01/11(水) 16:23:48 ID:???
7NAME IS NULL:2006/01/11(水) 19:01:54 ID:???
8.1.1→8.1.2 の場合ってDBの移行は不要だよね??
8NAME IS NULL:2006/01/11(水) 19:05:09 ID:???
>>7
ですね
9NAME IS NULL:2006/01/20(金) 07:47:02 ID:83Rl49Vz
Slony1って8.1.2に対応してないですよね?
使えるからいらっしゃいますか
10NAME IS NULL:2006/01/20(金) 10:55:29 ID:???
8.1以降は最新のRC版(現在のところ)じゃないと無理
cvsで開発版もってきてもいいけど
11NAME IS NULL:2006/01/20(金) 16:31:34 ID:???
すまない、教えてくれ。

今うちのPCのFedoraCore4にPostgre8.0.1をインストールしたのだが、
WinXPPCのCSEで全然ログインできないんだ。
ちなみにログなんだが、
「connectDB() -- connect() failed: No error
Is the postmaster running (with -i) at '10.0.0.104'
and accepting connection on TCP/IP port'5432'」
pg_ctlはちゃんと-iオプションで再起動したし、pg_hba.confは
0.0.0.0/0(ローカルだからな)でやったし・・・。
何がいけないのかもうワケワカメorz誰かhelpme
12NAME IS NULL:2006/01/20(金) 16:38:58 ID:???
デフォルトでファイアウォールが有効になってるから切れ。
1311:2006/01/20(金) 16:48:13 ID:???
>>12
でけた!!!!!!!!!!
ありがとう!!!!!!!!!!!
これでまくーらを高くして寝れますyp
14NAME IS NULL:2006/01/20(金) 17:25:42 ID:lHKPwhjp
改行コードを含むデータをCOPYでインポートしようとしているのですが、うまくいかず困っています。
データはタブ区切りで、改行コードを含むデータ部は全て二重引用符("")で囲まれています。

どうやら改行コードが行の終わりと判断されてしまい、エラーが発生しているようです。
どうすればインポートできるでしょうか?
15NAME IS NULL:2006/01/20(金) 18:48:23 ID:???
>>14
COPYのコマンドのマニュアル読んだ?
ちゃんと詳しく書いてるけど?
16NAME IS NULL:2006/01/21(土) 15:31:53 ID:???
詳しく書いてあるけど分かりやすくはないよな
17NAME IS NULL:2006/01/21(土) 15:32:39 ID:???
普通に日本語だし分かりやすいと思うよ
18NAME IS NULL:2006/01/21(土) 16:54:58 ID:???
ちしょーちしょー♪
ちしょーちしょー♪
ぺしゅーぺしゅーしゅー♪
ちしょーちしょーしょー♪
19NAME IS NULL:2006/01/22(日) 20:39:00 ID:AJjCZWTh
postgreSQLを導入している政府団体、教育団体ってどういうのがあるのでしょうか?
20NAME IS NULL:2006/01/23(月) 03:01:49 ID:dul+jVCK
21NAME IS NULL:2006/01/23(月) 11:20:26 ID:bE1Zg05v
postgreSQLを導入している宗教団体、自称市民団体ってどういうのがあるのでしょうか?
22NAME IS NULL:2006/01/24(火) 15:46:32 ID:???
う〜む、8.1.2-jaでPL/Pythonを入れようと思って
createlang -W -U postgres plpythonu postgres してみたら

createlang: 言語のインストールに失敗しました: ERROR: could not load library
"C:/Program Files/PostgreSQL/8.1/lib/plpython.dll": 指定されたモジュールが
見つかりません。
と怒られる…。んで、pgAdmin IIIからやっても同様で、他の言語もplpgsql以外同様。

「信頼されない言語」はことごとくはねつけるって事?
23NAME IS NULL:2006/01/24(火) 15:47:27 ID:???
あ、PATH名からもわかるようにWindows版です。
24NAME IS NULL:2006/01/24(火) 16:54:47 ID:???
>>22
単にPythonをインストールしていないだけに1000カノッサ
25NAME IS NULL:2006/01/24(火) 17:52:25 ID:???
ついてるDLLだけじゃあねえ
26NAME IS NULL:2006/01/24(火) 17:57:21 ID:???
>>24
Thanks。その通りでした。
27NAME IS NULL:2006/01/25(水) 10:21:47 ID:4RYGdBr9
19990212
19990508
20000119
20010203
20010930
20020322
20031210

というような6桁の数字がありますが、
たまに末尾に半角スペースが紛れているデータがあります。
これらを検索し、一括で
[20010203 ]→[20010203]と変換するにはどのようにしたらよいでしょうか?
28NAME IS NULL:2006/01/25(水) 11:35:37 ID:???
>>27
trim()
29NAME IS NULL:2006/01/26(木) 17:50:16 ID:???
Table A
  支払い区分 | 金額
-----------------------
     1    |1000
     2    |500
     2    |1500
     1    |1300

というテーブルAから、

  支払い区分 | 合計金額
-----------------------
     1    |2300
     2    |2000

というように、支払い区分毎で金額の集計をした結果を取得したいのですが、
支払い区分のパターンは不特定でTable Aの検索時に動的に決まるものとして、
一つのSELECTで取得することは可能でしょうか?
30NAME IS NULL:2006/01/26(木) 18:52:57 ID:???
こんなんどうでしょう?
select min(支払い区分),sum(金額) as 合計金額 from A group by 支払い区分;
31NAME IS NULL:2006/01/26(木) 18:59:37 ID:znF3M60R
半角英数字のみを使っているものはただしいのですが、
たまに半角英数字以外のものが混じっている場合があります。
「m199」
「a20」
「r674」
「2234」
「r674」←中に全角の6が含まれるのエラー
「77 」←語尾に半角スペースがあるのでエラー

これらを抽出するにはどのようにしたらよいでしょう
3229:2006/01/26(木) 19:02:11 ID:???
>>30
レスありがとうございます。解決いたしました。
恥ずかしながら、group by句の使い方等をよく理解していなかったようです。
ありがとうございました。
33NAME IS NULL:2006/01/26(木) 19:13:52 ID:???
>>31
少々荒っぽいやり方ですが、

SELECT * FROM テーブル名 WHERE octet_length(検証対象カラム) <> char_length(trim(検証対象カラム))

てな感じに、バイト数≠前後空白除去後の文字数、の行を抽出するってのはどうでしょうか。
3431:2006/01/26(木) 20:43:30 ID:znF3M60R
自己解決しました
35NAME IS NULL:2006/01/26(木) 21:41:44 ID:K6TFUKHU
MIN関数にする必要ないだろ


LIKEで半角英数かしらべろ
36NAME IS NULL:2006/01/27(金) 00:27:53 ID:???
minとかわろす
37NAME IS NULL:2006/01/27(金) 00:31:56 ID:y3y92JGu
このようなテーブル

id  | connect_id | date
-------------------------------
 100  | NULL     | 10/10
 101  | 100     | 10/15
 200  | NULL     | 10/12
 300  | NULL     | 10/13
 301  | 300     | 10/18
 302  | 300     | 10/20

から

id  | date1  |   date2
-----------------------------------------------
 100  | 10/10    | 10/15
 200  | 10/12    | 10/12
 300  | 10/13     | 10/20

とIDを重複させずに出力するにはどういうSQL文を書いたらよいのでしょうか?
38NAME IS NULL:2006/01/27(金) 00:39:30 ID:???
>>37
エスパー募集するな
39NAME IS NULL:2006/01/27(金) 01:39:49 ID:???
出力はとりあえずあってると思うが、狙いとは違うかもなー。

SELECT CASE WHEN connect_id IS NULL THEN id ELSE connect_id END AS id,
min(date) AS date1,max(date) AS date2 FROM Table GROUP BY 1;
40NAME IS NULL:2006/01/27(金) 07:10:56 ID:ccq9hxN8
>>37
階層問い合わせ
41NAME IS NULL:2006/01/27(金) 08:26:08 ID:???
>>35
>MIN関数にする必要ないだろ
どうすれば?
42NAME IS NULL:2006/01/27(金) 09:52:26 ID:???
>>41
select /*min(*/支払い区分/*)*/,sum(金額) as 合計金額 from A group by 支払い区分;
43NAME IS NULL:2006/01/27(金) 10:49:18 ID:???
>>41
GROUP BY でまとめた項目はそのまま出力できる
44NAME IS NULL:2006/01/27(金) 11:03:09 ID:???

>>42
>>43
アホでした。出直してきます。
45NAME IS NULL:2006/01/30(月) 11:28:33 ID:???
Slony-I 1.1.5 Released

At long last, here is version 1.1.5,
which now supports PostgreSQL version 8.1.

人柱キボンヌ
46NAME IS NULL:2006/01/30(月) 17:27:14 ID:???
やっとRCとれたかあ
早速ためしてみるよ
47NAME IS NULL:2006/01/31(火) 23:19:44 ID:AXCSt9ym
max_fsm_pagesで指定する値が十分でないとvacuumで不要領域を
回収できない場合があるとの説明を見ますが、
ここでいうvacuumはconcurrent、full、どちらでも同じでしょうか?
vacuum fullの場合はmax_fsm_pagesの値に関係なく、全ての不要領域を
回収してくれるということはありませんでしょうか?
ちなみにWindows版 PostgreSQL 7.2.1を使ってます。
48NAME IS NULL:2006/02/01(水) 06:19:16 ID:???
>>47
VACUUM FULL でも一応 FSM は使われる。
ただし、FULL は詰め合わせるので、FreeSpace の量は少ないと思われる。
49NAME IS NULL:2006/02/01(水) 12:03:47 ID:???
>>47
>>Windows版 PostgreSQL 7.2.1
何それ?
50NAME IS NULL:2006/02/01(水) 13:36:03 ID:???
新システムに思い切って8.1.2をいれてみました。
INDEXがなくても充分に速いクエリが増えた。やっぱ高速化されてるんだな。
autovacuumは普通に便利だ。

51NAME IS NULL:2006/02/01(水) 21:22:09 ID:pJ8T7YoI
ちょっと聞きたい。

αっていうサーバで動いている「A」というDBの「a」というテーブルと、
βっていうサーバで動いている「B」というDBの「b」というテーブルを結合させて
表示するなんてことはできるもんでしょうか。
52NAME IS NULL:2006/02/01(水) 21:38:34 ID:???
>>51
contrib/dblink
53NAME IS NULL:2006/02/01(水) 21:58:39 ID:???
>>52
ありがとう。
一つ賢くなれたよ。
54NAME IS NULL:2006/02/01(水) 23:26:14 ID:???
遅くなりましたが、

>>48
レスありがとうございます。
毎日ほぼ一定量のinsert/deleteのあるシステムで、
毎日行っていたvacuumをfullからconcurrentに変えた以降、
どうにもディスク使用率が増え続けて困ってました。
データ量からいえば明らかにmax_fsm_pagesの設定が小さいのですが、
過去に適切と思われる値を入れたらPostgreSQLが落ちてしまったことがあり、
チキンになってました。とりあえずfullに戻して様子を見てみます。

>>49
いちおselect version()すると「PostgreSQL 7.2.1」と出ます。
ある製品にバンドルされているもので、好んで使っているわけではないのですが。
55NAME IS NULL:2006/02/02(木) 01:42:48 ID:???
昔なつかしの独自のマルチスレッド対応版のことかな
56NAME IS NULL:2006/02/02(木) 12:37:35 ID:???
あるいはPowerGresで select version()すると「PostgreSQL …」ってでるかもね。
57NAME IS NULL:2006/02/02(木) 13:08:55 ID:???
cygwin+postgresとか
58NAME IS NULL:2006/02/02(木) 17:20:19 ID:???
LinuxにとWinに8.1.1を入れてたんだけど、
複数のビューを結合してselectすると、条件によっては
当てはまらないはずの結果が返ってくるという現象があった。
(詳細な条件は失念)
同じ条件で、8.1.2に入れ替えたら直った。
59NAME IS NULL:2006/02/03(金) 11:39:10 ID:???
詳細な条件が無いと検証できません・・・
60NAME IS NULL:2006/02/03(金) 22:23:37 ID:ug/mwVC7
自分でコンパイルするメリットってなんですか?
61NAME IS NULL:2006/02/03(金) 22:44:42 ID:???
ありません。
62NAME IS NULL:2006/02/04(土) 13:13:03 ID:???
達成感
63NAME IS NULL:2006/02/04(土) 13:24:40 ID:???
>>60
改造とか
64NAME IS NULL:2006/02/04(土) 13:38:17 ID:???
射精感
65NAME IS NULL:2006/02/04(土) 13:52:35 ID:???
改造→射精感→ とくれば次は「ふたなり」ですか?
66NAME IS NULL:2006/02/04(土) 23:08:12 ID:???
以下のコードでresにNULLが返ってきます
なぜだかさっぱりわかりません。
考えられる原因が少しでもわかる方おられましたら教えてやってください。

if( PQstatus( m_PGconn ) == CONNECTION_OK ){
PGresult* res = PQexec( m_PGconn, "select * from tbl_abon );
}
67NAME IS NULL:2006/02/05(日) 00:18:56 ID:???
"が閉じてないからだろうか?
68NAME IS NULL:2006/02/05(日) 09:58:22 ID:???
>>66
エラーはでないのか?

>>67
それだとコンパイルエラーじゃないのか?
6966:2006/02/05(日) 10:25:43 ID:???
しまった・・テーブル名かえるたときに消しちゃった
ぬるぽが返ってきたときはちゃんと"で閉じてました
70NAME IS NULL:2006/02/05(日) 12:35:03 ID:???
>>66
データが入ってないとか。
配列でデータが返ってきてるのに取り出し方間違ってるとか
7166:2006/02/05(日) 13:59:47 ID:???
お前らレスありがとう。
データが壊れてるのかと思い、リストアしたり、
Apacheが入ってたのでなんかわるさしてるのかと思って消したりしてたら
うまくいきました。
なにが原因だったのかよくわかりませんでしたが・・。
72NAME IS NULL:2006/02/06(月) 10:26:56 ID:???
自分でコンパイルするとオプション変えたいとき自由にできるし
コンパイルするしか手が無かった時からやってるので苦じゃないというのもあるかな。

オプションは、Slony-I入れるのにsafety-thread 使ったのと、
64bit でコンパイルするために、インストール先変えたのくらいだけどね。
Solarisだからってのもあるけどな。
73NAME IS NULL:2006/02/06(月) 10:30:09 ID:???
>>60
・バイナリが提供されてない環境へも(頑張れば)インストールできる(かもしれない)。
・コンパイルオプション等を最適化できる(かもしれない)。
・問題が起きたとき、動作が不明なときデバッガで追えば何かわかる(かもしれない)。
74初心者:2006/02/08(水) 12:20:02 ID:8gf8kpEe
POSTGRESを勉強中の初心者です。
表1と表2の2つの表が在り、顧客IDとして
「表1ID」「表2ID」の項目を作ってある物とします。
表1IDに存在しないIDは表2からも削除したい場合
どのようなクエリを発行すれば良いのでしょうか
75NAME IS NULL:2006/02/08(水) 12:36:10 ID:???
DELETE FROM 表2 WHERE 表2ID IN (
SELECT 表2ID FROM 表2 EXCEPT SELECT 表1ID FROM 表1)

とかでどうか
76NAME IS NULL:2006/02/08(水) 13:08:58 ID:???
DELETE FROM 表2 WHERE
  (SELECT count(*) FROM 表1 WHERE 表1ID = 表2ID) <= 0
77初心者:2006/02/08(水) 15:49:41 ID:8gf8kpEe
素早いご回答ありがとうございました。

色々な方法があるのですね。EXCEPTが手元の資料では見つからないようなので
勉強して出直します。とりあえず
DELETE FROM 表2 WHERE 表2ID NOT IN (SELECT 表1ID FROM 表1)
とかしても動いたっぽいのですが、POSTGRESのバージョンも
古い様なのでバージョンアップして、実行時間を計測しながらじっくり動かして見ようと思います。
78NAME IS NULL:2006/02/09(木) 14:25:22 ID:???
PGSQL-JPのメーリスを読んでるんだが
最近 pgpoolの話題ばっかりだなwww
79NAME IS NULL:2006/02/09(木) 14:45:04 ID:???
メーリスって何かと思った・・・
ここんとこ話題が無いのか、投稿自体少ないですね。
サーバがトラブってんのかと思った。

いちおう、MLのスレはあるよん
PostgreSQL & pgsql-jp ML 3テーブル目
http://pc8.2ch.net/test/read.cgi/db/1079771059/l50
80NAME IS NULL:2006/02/10(金) 17:53:56 ID:mV3E0Zue
少しは高速になりましたか?
81NAME IS NULL:2006/02/10(金) 21:26:15 ID:???
かなり光速に近付きました
82NAME IS NULL:2006/02/10(金) 23:29:57 ID:???
もークエリ出す前に結果が返ってくるほど
83NAME IS NULL:2006/02/10(金) 23:39:29 ID:???
あの世へも近づけました。
84NAME IS NULL:2006/02/11(土) 14:41:55 ID:???
MySQLには及びませんがorz
85NAME IS NULL:2006/02/11(土) 18:26:42 ID:???
>>84
未だにそんなに差があるか?
86NAME IS NULL:2006/02/11(土) 19:11:37 ID:???
サブクエリ&トランザクション使う MySQL5 と比べると
PostgreSQL 8.1 の方が速かったよ。
87NAME IS NULL:2006/02/11(土) 19:14:22 ID:???
参照主体なら十分速いんだが、更新が多いと下手すりゃ半分くらいの速度だなぁ。
88NAME IS NULL:2006/02/12(日) 13:05:37 ID:???
MYSQLのほうが更新遅いけど
Postgresはその分バキュームで後回しになってるだけ
89NAME IS NULL:2006/02/12(日) 13:34:44 ID:???
>>88
autovaccum でその問題もなくなったよ。
90NAME IS NULL:2006/02/12(日) 13:52:50 ID:???
オートも含めて後回しになったのをどうするかというだけだろ
91NAME IS NULL:2006/02/12(日) 13:58:00 ID:???
負荷の変動が予想できるなら、後回しのほうが有利だけどね。
忙しい時には処理をサボって速くして、暇なときにvacuumすればいい。
92NAME IS NULL:2006/02/12(日) 14:04:13 ID:???
でも他のDBはそういうのを自動でやってきただけだから
デフォルトで有効になってなんぼだな
93NAME IS NULL:2006/02/12(日) 16:28:37 ID:???
>>92
はぁ?
94NAME IS NULL:2006/02/12(日) 23:13:00 ID:???
INHERITSまともに使ってる人いますか?

CREATE RULE と CHECK 制約の組み合わせうめぇwwwwwwwwwwwwwww
95NAME IS NULL:2006/02/14(火) 01:06:16 ID:Num5h3qC
libpq使ってバリバリ書いてる猛者いねがー?
ああ、PHPなんてウザくてつかってらんねえ。

96NAME IS NULL:2006/02/14(火) 04:52:55 ID:yUpNwadt
MySQLは4.1以降日本語対応が微妙なのですが
Potgresはそのあたりどうなのでしょうか?
97NAME IS NULL:2006/02/14(火) 08:59:14 ID:???
Cからlibpq使いやすくて( ・∀・)イイ!
SQLiteでも同じようなラッパーかませて使ってる
98NAME IS NULL:2006/02/14(火) 09:25:25 ID:???
libpq 全機能説明したものってあるのかな。
ヘッダファイルからたどってるが、知らないのがけっこうある
まあ一部だけで十分使えてるけど
99NAME IS NULL:2006/02/16(木) 11:52:08 ID:RsH/enz2
なんかPostgreSQLに認定資格あるっぽいけど,受けたやつおるか?
100NAME IS NULL:2006/02/16(木) 11:53:20 ID:???
>>99
【PostgreSQL CE認定試験】ってどう?
http://pc8.2ch.net/test/read.cgi/db/1139801915/

オレはこのスレで初めて知った・・・
101NAME IS NULL:2006/02/16(木) 12:50:25 ID:???
一時資格板にも建った。。。
つーか隔離したんだがな。
100も行かずに落ちたw
102NAME IS NULL:2006/02/16(木) 17:51:01 ID:???
質問です。
DBとユーザをスーパーユーザで作って
ALTERでパスワードを設定したにも関わらず
パスワードなしでDBに接続できてしまいます。
パスワードを入力しないと接続できないようにするには
どうしたらいいのでしょうか?
103NAME IS NULL:2006/02/16(木) 18:17:47 ID:???
>>102
pg_hba.conf を編集。trust だとパスワード関係ないよ
104102:2006/02/16(木) 18:29:48 ID:???
できました!
ありがとうございます!
105NAME IS NULL:2006/02/16(木) 18:52:44 ID:RsH/enz2
PostgreSQL CE認定試験受けた人おる?
106NAME IS NULL:2006/02/16(木) 23:16:13 ID:lmTDu9ZJ
could not load library "/usr/local/pgsql/lib/LIBAAA.so": /usr/local/pgsql/lib/LIBAAA.so: 再配置後にセグメントprotをリストアできません: 許可がありません
とでて、実行できません、ご教授いただけないでしょうか?
107NAME IS NULL:2006/02/17(金) 08:19:48 ID:rC+wyKN3
>>106
板違い。 OSが判らんとな。
108NAME IS NULL:2006/02/17(金) 11:52:17 ID:???
>>105
受けたよ。Silverだけどな。
日常業務で開発・管理をやっている人なら誰でも受かるよ。
109NAME IS NULL:2006/02/21(火) 23:00:07 ID:???
ストアドってアトミックに実行されるんでしょうか?
今「テーブルが空ならtruncateする」という処理を実装しようと思っています。
アプリで実装した場合以下のようになると思うのですが、
ストアドで実装した場合は (1) はいるのか気になってます。

(1) lock xxx in exclusive mode
(2) select * from xxx limit 1
(3) 2 で空なら truncate
110NAME IS NULL:2006/02/21(火) 23:09:48 ID:???
誰かアホな俺に空なのにtruncateする理由を教えてくれ。
111NAME IS NULL:2006/02/22(水) 00:08:30 ID:???
>>110
>テーブルの内容が定期的に完全に削除される場合、DELETEの後にVACUUMを
>使用するよりも、TRUNCATEを使用する方が良いでしょう。
>TRUNCATEはテーブルの全ての内容を即座に削除します。また、その後に
>不要となったディスク容量を回収するためにVACUUMやVACUUM FULL
>を行う必要がありません。
http://www.postgresql.jp/document/current/html/maintenance.html#VACUUM-FOR-SPACE-RECOVERY
112NAME IS NULL:2006/02/22(水) 00:09:19 ID:???
空じゃないのにtruncateしたらデータが消えちゃうから。
113NAME IS NULL:2006/02/22(水) 03:01:09 ID:???
もうさ
満月じゃないのに恋したら魔法が消えちゃうから
でもよくね?
114NAME IS NULL:2006/02/22(水) 09:28:39 ID:???
意味ないことを真剣にやるのも大切だよね
115NAME IS NULL:2006/02/22(水) 10:30:46 ID:???
vacuum full xxxじゃダメなのかな?
116NAME IS NULL:2006/02/22(水) 11:48:33 ID:???
パフォーマンスの問題じゃない?
VACUUM FULLは不要領域を探して回収。
TRUNCATEは無条件に領域を解放。
117NAME IS NULL:2006/02/22(水) 12:34:41 ID:???
0件か確認してまで、ロックしてまでtruncateするぐらいなら
無条件にvacuumのがよっぽどいい
118NAME IS NULL:2006/02/22(水) 14:25:35 ID:???
つヒント:適材適所
119NAME IS NULL:2006/02/26(日) 12:19:26 ID:GgeRVLto
シルバとったよ。問題集一個で取れるよ。
でも7系なんだよね。8系はまだやってないみたいだし。
時期が悪かったかな。
まーちょっとPostgresというものを知ってるよ。使えるよ。
詳しくは調べなきゃわかんないけど ってレベルですね。
私自身もそうです。
Vineでソースからコンパイルしてpsqlでselect までやるってだけで
気持ちいいです。pgpoolも面白いですね。
120NAME IS NULL:2006/02/26(日) 21:33:44 ID:HZDQrYll
select point from table order by point desc;

で現在ランキングを表示させているのですが、ランキングの
順位はプログラム側でカウントアップさせながら出力させる
ようにしております。

これをSQL側(pointの横に新規フィールドを持たせるような方
法)で行うことは可能でしょうか。

このポイントが厄介で、例えば20ポイントが1人、10ポイントが
3人、5ポイントが1人いた場合、順位は

1位:20ポイント
2位:10ポイント
2位:10ポイント
2位:10ポイント
5位:5ポイント

となるため、SQLでは不可能だと判断したわけですが、もしも
できるのであればどうかご教示いただきたい次第です。

恐れ入りますが、宜しくお願いいたします。
121NAME IS NULL:2006/02/26(日) 21:48:51 ID:???
>>120
試してないけど、こんな感じだっけ。
select a.point, (select count(*)+1 from table b where b.point > a.point) as rank from table a order by a.point
122NAME IS NULL:2006/02/26(日) 21:52:25 ID:???
>>121
早急なご返答、誠に有難うございます。

今すぐ試して結果をご報告させていただきます。
123NAME IS NULL:2006/02/26(日) 22:18:50 ID:???
>>121
すごいです。
本当にそのとおり出力されました。
結果を以下に記載させていただきます。(descオプションのみつけました)

select a.point, (select count(*)+1 from table b where b.point > a.point) as rank from table a order by a.point desc;

point | rank
--------+------
20 | 1
10 | 2
10 | 2
10 | 2
5 | 5
0 | 6
0 | 6
0 | 6

重ね重ねの質問で恐縮ですが、これにouter joinをしたい関係で
カラム名にテーブル名をつける場合、

select a.table.point, (select count(*)+1 from table b where b.table.point > a.table.point) as rank from table a order by a.table.point desc;

このようにやってみたのですが、「ERROR: schema "table" does not exist」
と怒られてしまいました。

もしも可能であればご教示いただきたい次第でございます。
すみません。
124NAME IS NULL:2006/02/27(月) 00:19:06 ID:???
a.table.point は a.point じゃないの?
125NAME IS NULL:2006/03/01(水) 11:03:11 ID:7z+ZoZNh
Postgres もSQLも、ど素人なのですが、質問させてください。
最新登録されたエントリ50みたいなものを取得するとき、
全部を取得して、ORDER するんじゃなく、ORDERしてかつ
上位50個だけのRowを取得するようにする命令ってありませんか?
126NAME IS NULL:2006/03/01(水) 11:37:48 ID:???
limit
127NAME IS NULL:2006/03/01(水) 11:58:25 ID:???
>>126
dクスです
128NAME IS NULL:2006/03/01(水) 14:01:17 ID:4jwinoiQ
libpgを使ってちょいっとモノ書いてたんだ。

 PGresult 構造体変数を2個宣言したんだが、
片方を使うと、もいっぽは汚染されてしまって
使えなかったんだ。 あれそういうものなの?
129NAME IS NULL:2006/03/02(木) 12:25:32 ID:KY0UZN2N
postgres8をWindowsで使っているんだけど、これをLinuxに移行するにはどのようにしたらよいでしょうか?
130NAME IS NULL:2006/03/02(木) 12:29:37 ID:???
>>129
移行ってデータのことですか?
コマンドラインに慣れてないなら、pgAdminIIIでバックアップしてリストアすればできますよ
131129:2006/03/02(木) 12:37:12 ID:KY0UZN2N
データの事です。
ありがとうございます。
132NAME IS NULL:2006/03/02(木) 17:27:11 ID:???
コマンドラインなら pg_dump
133NAME IS NULL:2006/03/02(木) 19:53:16 ID:hQwhNbpV
このメッセージってデータ量のオーバーなんですか?
どうすればいいんですか?

WARNING: Some databases have not been vacuumed in over 2 billion transactions.
You may have already suffered transaction-wraparound data loss.
134NAME IS NULL:2006/03/02(木) 19:55:59 ID:???
>>133
読んで字のごとく2百万以上のトランザクション実行したのにバキュームしてないよって
怒られてるんだからバキュームすれば解決するよ
135NAME IS NULL:2006/03/02(木) 21:36:47 ID:vnBQBHjr
perDBI->do()でtext型に?を入力しようとすると
プレースホルダと解釈されてエラー等になるんですが、
どうしたら解決できますか?

psqlコマンドでは?を問題なく入力できたので、
perlDBIの問題だと推測してます。

136NAME IS NULL:2006/03/02(木) 21:54:50 ID:N5vujdH7
>>134
知ったかは市ね!

×2百万以上のトランザクション実行したのにバキュームしてないよ
○2百万以上のトランザクション実行したからバキュームできないよ
137NAME IS NULL:2006/03/02(木) 22:25:33 ID:???
>>136
あんまり興奮しなさんな
138NAME IS NULL:2006/03/02(木) 22:49:03 ID:???
>135
プレースホルダを使ってから、?付きの文字を入れれば?
まさかCGIで使っててプレースホルダ使ってないって事ないだろうな?
139135:2006/03/02(木) 23:04:28 ID:vnBQBHjr
>>138
最初プレースホルダを使っててダメだったので
色々ためしてみましたけど、上手く行きませんでした
140NAME IS NULL:2006/03/03(金) 00:10:49 ID:???
>>134
billionとmillionの違いの分からないマヌケがいるスレはここでつか?
141NAME IS NULL:2006/03/03(金) 07:09:31 ID:???
>139
何をどうやってダメだったか書かないと何も解決しないよ?
俺はPerlCGIでプレースホルダを利用できている。
だからできないとしたら使い方が悪い。
142135:2006/03/03(金) 08:11:18 ID:sybz08G0
普通に
$db->do("INSERT INTO テーブル VALUES(?, ?, ?)", undef, @values) or print ref $this,__LINE__.$db->errstr;
ってやってて
@valuesの中にURL(http://hoge.com?var=1みたいなの)を入れてるとエラーになりました
143NAME IS NULL:2006/03/03(金) 12:13:12 ID:???
>>142
そのエラーを再現する最小のものを上げればみんな追試するだろうし
原因も特定しやすくなるのではないかね

少なくとも、うちで普通に http://hoge.com?var=1 を入れてもエラーにはならない
144143:2006/03/03(金) 12:23:35 ID:???
環境は、
Solaris 9 の x86
PostgreSQL が 8.1.3
perl が 5.8.3
DBI が 1.50
DBD-Pg が 1.45

で、まんま、
$db->do("INSERT INTO テーブル VALUES(?, ?, ?)", undef, @values) or print ref $this,__LINE__.$db->errstr;
を使い、http://hoge.com?var=1を入れて何の問題も出なかった
145NAME IS NULL:2006/03/03(金) 12:49:22 ID:???
警告: いくつかのデータベースは20億以上のトランザクションで掃除機をかけられていません。
あなたは既にトランザクション巻きつけて着るドレスデータの損失を受けたかもしれません。
146NAME IS NULL:2006/03/03(金) 12:49:34 ID:???
>142
エラーはなんて出てるのよ?
147135:2006/03/03(金) 14:59:23 ID:u89Rf0X1
エラーはシンタックスエラーです
MySQLではエラーにならなかったので、推測だとDBD-PgPP0.5?に問題が有りそう
148NAME IS NULL:2006/03/03(金) 15:38:02 ID:???
>>147
だから検証コード出せって。
>>144でDBD-PgPP 0.05 に差し替えたが、問題なく動作したぞ。
変更箇所は、DBI->connect("dbi:Pg: を DBI->connect("dbi:PgPP: にかえただけだが
149NAME IS NULL:2006/03/03(金) 15:46:00 ID:???
シンタックスエラーって・・・
150NAME IS NULL:2006/03/03(金) 16:05:51 ID:???
DBD-PgPPのコード見てみたけどprepared statementはエミュレーションなんだな。
151135:2006/03/03(金) 16:32:47 ID:u89Rf0X1
会社のPCからは2chアクセスできないです
XPのPPMでDBD-Pgがインストールできない
リポジトリ追加したけどそれが死んでるっぽい
簡単なコード作ってみる
152135:2006/03/03(金) 17:26:55 ID:u89Rf0X1
再現するコードできた
帰ったらUPします
153135:2006/03/03(金) 21:12:29 ID:rWRgaIfu
コードです
まずSQL

CREATE USER testuser PASSWORD 'test';

DROP TABLE test;
DROP TABLE review;

CREATE TABLE test (
"発行番号" TEXT NOT NULL
, "社内URL" TEXT NOT NULL
, PRIMARY KEY ("発行番号")
);

CREATE TABLE review (
"発行番号" TEXT NOT NULL
, "社内URL" TEXT NOT NULL
, "販社URL" TEXT NOT NULL
, PRIMARY KEY ("発行番号")
);

GRANT SELECT,INSERT,UPDATE,DELETE
ON test, review TO testuser;
154135:2006/03/03(金) 21:14:00 ID:rWRgaIfu
perlのコードです
tes1(),tes2()ではエラーにならず
tes3()でエラーになりました

use DBI;

$db = DBI->connect("DBI:PgPP:questest:localhost", 'testuser', 'test') or print __LINE__.$DBI::errstr."\n";

srand();
$sw = int(rand(99999999));

print "--- tes1 ---\n";
tes1();

print "--- tes2 ---\n";
tes2();

print "--- tes3 ---\n";
tes3();

$db->disconnect;

sub tes1 {
my @values=($sw, 'http://aaa.cgi?var=1');
$db->do("INSERT INTO test VALUES(?, ?)", undef, @values) or print __LINE__.$db->errstr;
my $rs = $db->selectall_arrayref("SELECT * FROM test") or print __LINE__.$db::errstr;
for (my $i=0; $i<=$#$rs; $i++){
for (my $j=0; $j<=$#{$$rs[$i]}; $j++){
print "$$rs[$i][$j]\t";
}
print "\n";
}
}

sub tes2 {
my @values=($sw, 'http://aaa.cgivar=1', 'aa');
$db->do("INSERT INTO review VALUES(?, ?, ?)", undef, @values) or print __LINE__.$db->errstr;
my $rs = $db->selectall_arrayref("SELECT * FROM review") or print __LINE__.$db::errstr;
for (my $i=0; $i<=$#$rs; $i++){
for (my $j=0; $j<=$#{$$rs[$i]}; $j++){
print "$$rs[$i][$j]\t";
}
print "\n";
}
}

sub tes3 {
my @values=($sw, 'http://aaa.cgi?var=1', 'aa');
$db->do("INSERT INTO review VALUES(?, ?, ?)", undef, @values) or print __LINE__.$db->errstr;
my $rs = $db->selectall_arrayref("SELECT * FROM review") or print __LINE__.$db::errstr;
for (my $i=0; $i<=$#$rs; $i++){
for (my $j=0; $j<=$#{$$rs[$i]}; $j++){
print "$$rs[$i][$j]\t";
}
print "\n";
}
}
155NAME IS NULL:2006/03/04(土) 01:34:24 ID:5lvDcx+z
このメッセージってデータ量のオーバーなんですか?
どうすればいいんですか?

WARNING: Some databases have not been vacuumed in over 2 billion transactions.
You may have already suffered transaction-wraparound data loss.
156NAME IS NULL:2006/03/04(土) 01:41:35 ID:ayXoCSIP
vacuum すれば?
157NAME IS NULL:2006/03/04(土) 01:57:04 ID:???
>154
そりゃお前、ただの主キーの重複じゃねーの?
$swの値がtes2()とtes3()で同じになってないかい?
だからちゃんとエラーコード出せって言ってるの。
158NAME IS NULL:2006/03/04(土) 08:53:16 ID:PWWsdLmu
>>157
ああホントだ orz
でもtes3()に
$sw = int(rand(99999999));
を持ってきても
ERROR: syntax error at or near "a" at character xxx
みたいなエラーが出ますよ

最初は$swは各関数内に置いてテストしてましたから。
それで色々試してるうちに、$swをグローバルにした経緯があります。

159NAME IS NULL:2006/03/04(土) 09:12:29 ID:???
>158
srandも一緒に入れてたんじゃねーの?
160135:2006/03/04(土) 11:58:41 ID:/Aqne4MT
>>159
それは無いですね
それに、主キーが重複した場合は別のエラーになるし
161NAME IS NULL:2006/03/04(土) 12:03:12 ID:5lvDcx+z
>>156
vacuum すると出てくるメッセージ(;_:)
162NAME IS NULL:2006/03/04(土) 12:18:03 ID:???
つーかPgPPのソース読んだほうが早いぞ。
バグ以前にトホホな作りで使いたくなくなる。
163135:2006/03/04(土) 13:23:26 ID:/Aqne4MT
別のLinuxのマシンとかでDBD-Pgを使うようにしてみます

どうしてもPgPPを使う必要がある場合は、?を&ques;みたいに変換して対処しようと思ってます
164NAME IS NULL:2006/03/04(土) 20:26:40 ID:???
>>161
もしかして木曜日からまだ解決してないのかw
このまま使い続けるとどんどんデータが壊れていくから、
さっさとdump/restoreしてDB作り直せ。
165NAME IS NULL:2006/03/04(土) 22:59:52 ID:???
Intel MacにPostgreSQLはインストールできますか?
166NAME IS NULL:2006/03/05(日) 05:15:26 ID:???
cpuはx86と同じなの?
167NAME IS NULL:2006/03/05(日) 05:17:19 ID:???
>>161
今回のに限らず、いつでもどこでも pg_dump(all) とpg_restoreやpsqlで戻すやり方を
使えるようにしとけ
168login:Penguin:2006/03/05(日) 05:46:53 ID:???
>155
何か知らんけど、プログラムで2億行インサートしたんだろ?
プログラム見直して、テーブル再作成しろ。
169NAME IS NULL :2006/03/05(日) 05:48:52 ID:???
スマソ、login:Penguinが直ってなかった。
170NAME IS NULL:2006/03/05(日) 08:41:53 ID:???
>>168
それは的外れ。
171NAME IS NULL:2006/03/05(日) 09:40:35 ID:???
俺は>>161でないけど、>>161みたいなメッセージ出たらどうすればいいのか
知らなかった。結局は>>164>>167の通り、DUMPとRESTOREをすれば
いいみたいだけど、2十億のトランザクションって何なのですか?
データ件数とは違いますよね?
172NAME IS NULL:2006/03/05(日) 12:05:21 ID:???
>>171
ヒント:ループ
173NAME IS NULL:2006/03/05(日) 12:07:42 ID:???
>>170
ループして "over 2billion" insertしたんじゃないの?
「2億行あるけど、vacuumしてねえよ。」って。
174NAME IS NULL:2006/03/05(日) 12:39:56 ID:???
>>172
分からない人は参加しないように(ゲラ
175NAME IS NULL:2006/03/05(日) 12:40:33 ID:???
>>173
"over 2 billion transactions"と書いてあるだろうが。
transaction != row だぞ、わかる?
それに 2 billion は2億じゃなく20億だ。

>>171
マニュアルくらい嫁。
http://www.postgresql.jp/document/pg804doc/html/maintenance.html#VACUUM-FOR-WRAPAROUND
insertやupdateしてから20億トランザクション以上経過した行は、
勝手にどんどん消されていってしまんだよ。
それを防ぐためには、少なくとも10億トランザクション毎に一回以上の間隔で
定期的にvacuumを実行する必要がある。
vacuumを忘れたために消えてしまった行は、たとえDUMP&RESTOREしようと二度と戻らん。
これ以上被害が増えないようにするための応急処置でしかない。

http://www.postgresql.jp/document/pg813doc/html/maintenance.html#VACUUM-FOR-WRAPAROUND
ちなみに、リリース8.1からは20億トランザクションのリミットに近付くと
警告を出したり自動的なトランザクション停止を行ったりするんで、
>155のような致命的ミスはなくなる。
176NAME IS NULL:2006/03/05(日) 12:46:43 ID:???
>transaction != row だぞ、わかる?

>insertやupdateしてから20億トランザクション以上経過した【行】は、
>勝手にどんどん消されていってしまんだよ。

矛盾していないか?
テーブルの状態を表わすのならば、分かり易く行と書いただけだろ。

>マニュアルくらい嫁。
揚げ足にならないようにな。
177NAME IS NULL:2006/03/05(日) 12:47:55 ID:???
>20億トランザクション

金融システムか?
そもそもそんな利用頻度の高いシステムでPostgreなんて使うなよw
178NAME IS NULL:2006/03/05(日) 12:50:33 ID:???
しかし、20億トランザクションもの間DBを放置しつづける香具師が管理者やっちゃダメだろ。
PostgreSQLってのは、vacuumが何のためにあるのか全く知らずに
扱えるような代物じゃないぞ。
# 8.1以降は autovacuum があるから一応大丈夫なのか?
179NAME IS NULL:2006/03/05(日) 12:52:21 ID:???
>insertやupdateしてから20億トランザクション以上経過した行は、
>勝手にどんどん消されていってしまんだよ。
>それを防ぐためには、少なくとも10億トランザクション毎に一回以上の間隔で
>定期的にvacuumを実行する必要がある

だから、168, 172, 173は「プログラムがループして不要行を書き出したんじゃないの?」
と書いているわけだから

ロジックミスじゃねえの?

2億でも、20億でも良いけど、個人的にインサートする行数じゃねえし
「テスト」と書いてあるからね。
180NAME IS NULL:2006/03/05(日) 12:52:39 ID:???
vacuumに失敗しているのにvacuumしないのが原因だって・・プププ
181NAME IS NULL:2006/03/05(日) 12:53:48 ID:???
>>179
致命的なヴァカ
182NAME IS NULL:2006/03/05(日) 12:57:58 ID:???
>>177
賛成。オラクルにしなさい。
183175:2006/03/05(日) 13:04:51 ID:???
>>176
> >transaction != row だぞ、わかる?
>
> >insertやupdateしてから20億トランザクション以上経過した【行】は、
> >勝手にどんどん消されていってしまんだよ。
>
> 矛盾していないか?
> テーブルの状態を表わすのならば、分かり易く行と書いただけだろ。

何も矛盾していないが?
begin transaction のあといろいろ操作して最後に commit すれば、
その間に何万行insertしても1トランザクションだ。
逆に、1行しかないテーブルでも、その行への update & commit を
20億回繰り返せば、20億トランザクションになる。

> 「2億行あるけど、vacuumしてねえよ。」

この発言こそ、トランザクションと行を混同している証拠。
184NAME IS NULL:2006/03/05(日) 13:10:22 ID:???
まあ、あれだ。「みんな仲良くしなさい」
185NAME IS NULL:2006/03/05(日) 13:55:55 ID:???
>183
トランザクションと行の概念はみんな知ってる。
突っ込み所が違う。
186NAME IS NULL:2006/03/05(日) 14:10:55 ID:???
みんな知ってるけど>>168だけ知らなかったw
そもそも他のDBMSで問題になることがない「トランザクション数」が
なんでpostgresで問題になるのか、原理をわかってないだろ。
187NAME IS NULL:2006/03/05(日) 16:25:03 ID:???
何が原因でどう対処すべきかを明確に回答できる香具師は誰もいない(w
188NAME IS NULL:2006/03/05(日) 16:43:54 ID:???
20億のトランザクションなんて有名サイトのサーバ以外にあるのかなぁ?
10万トラン/日でも、3,650万/年だから50年以上かかるんだがw

189NAME IS NULL:2006/03/05(日) 16:47:58 ID:???
スゲー
自分のアフォさ加減をここまで堂々とカミングアウトできる度胸に脱帽
190189:2006/03/05(日) 16:49:33 ID:???
あ、スマン。>>187ね。
191NAME IS NULL:2006/03/05(日) 16:50:17 ID:???
>>189
今頃必死にトランザクションをググッてるアフォですね!(プププ
192NAME IS NULL:2006/03/05(日) 16:51:48 ID:???
>>189
ageとsageの違いくらい覚えようね!(プププ
193189:2006/03/05(日) 16:52:48 ID:???
だから、トランザクションが行だって過去レスに書いてあるだろ
194189:2006/03/05(日) 16:53:52 ID:???
20億件以上のテーブルなんて大手サイト以外にも世の中にいくらでもある。
195NAME IS NULL:2006/03/05(日) 16:55:35 ID:???
>>189
芯でくれwww
196NAME IS NULL:2006/03/05(日) 16:56:47 ID:???
initdbすればいいだよね?
197NAME IS NULL:2006/03/05(日) 17:14:13 ID:???
哀れな>>168
成りすましまでして何がしたいんだか。
この先postgresを使うたび、今日のこの屈辱と自分の醜態を思い出すことになるんだよw
198NAME IS NULL:2006/03/05(日) 17:29:27 ID:???
英語を読むくらいできんとね
199NAME IS NULL:2006/03/05(日) 17:33:45 ID:???
煽ってる馬鹿は双方マ板にでもいってくれ
200NAME IS NULL:2006/03/05(日) 18:22:06 ID:???
プログラムで処理する単位はトラザンザクションだが
Vacuumする単位はテーブルだから
行という表現を使ってるだけだろ?
あおってる奴はわけ分からん。
重箱の隅つついても仕方ないだろ。
201NAME IS NULL:2006/03/05(日) 18:27:14 ID:???
>183
Vacuumのときに、Vacuumしろというメッセージが出たら
どういう対処が正しいんだ?

トランザクションと行の講釈は「知ってるからいいよ。」
202NAME IS NULL:2006/03/05(日) 18:35:59 ID:???
哀れだな>>179
203NAME IS NULL:2006/03/05(日) 18:41:09 ID:???
>>179 = >>189
204NAME IS NULL:2006/03/05(日) 18:44:05 ID:???
ヒント:DUMP&RESTORE
205NAME IS NULL:2006/03/05(日) 18:48:25 ID:???
>>155
だからOracleにしておけば良かったのに・・・
206NAME IS NULL:2006/03/05(日) 18:49:14 ID:???
Oracle>MySQL>>>PostgresSQL
207NAME IS NULL:2006/03/05(日) 18:51:44 ID:???
vacuumしろってメッセージが出たらvacuumしたらいいんじゃないの?
>>161がvacuumしようとして見たのは別のメッセージだしw
208NAME IS NULL:2006/03/05(日) 19:00:41 ID:???
179 != 189だぞ。
vacuumdしたら「vacuumしろよ」と出たから困ったんだろ?

155が161で返答している。
209NAME IS NULL:2006/03/05(日) 19:04:06 ID:???
>>206
Oracle > DB2 > SQL Serever(※Windowsのみだが)
210NAME IS NULL:2006/03/05(日) 19:20:29 ID:???
>>208
日本語も英語も、どっちもまず落ち着いて読み直してみれ
211161:2006/03/05(日) 19:23:57 ID:SkO79mVG
http://ml.postgresql.jp/pipermail/pgsql-jp/2005-November/019991.html

このサイトで同じ質問している方がいます。
どうすれば良いのでしょうか。

dump−initdb−restoreを行えば良いのでしょうか?
212175:2006/03/05(日) 19:55:31 ID:???
>>201
> Vacuumのときに、Vacuumしろというメッセージが出たら
> どういう対処が正しいんだ?

「Vacuumしろというメッセージ」なんてどこにあるんだ?
>155 のメッセージは「Vacuumしろ」って意味じゃないぞ。

> トランザクションと行の講釈は「知ってるからいいよ。」

じゃあ、英語の講釈でもしてやろうか?
213NAME IS NULL:2006/03/05(日) 20:53:15 ID:???
>>175
日本語もロクに使えない奴が英語の講釈だってよ( ´,_ゝ`)プッ
214NAME IS NULL:2006/03/05(日) 20:58:50 ID:???
>>213
煽り口調やめれ
215NAME IS NULL:2006/03/05(日) 21:14:29 ID:???
>>211
安全策としてはその通り。
このスレの回答やそのメールに対する返答を読めばある程度わかるはずだが。
216161:2006/03/05(日) 21:51:17 ID:SkO79mVG
>>215
vacuumdb -a -z でも回復しますか?
217NAME IS NULL:2006/03/05(日) 22:07:37 ID:???
>>212
20億のトランザクションが起きたが、未だにvacuumを実行していないという意味だろ。

vacuumしたときのメッセージに出ているwarningが出ているから

意訳すると下で合っている。
>>vacuumしたら「vacuumしろよ」と出たから困ったんだろ?
218NAME IS NULL:2006/03/05(日) 22:09:04 ID:???
>vacuumしたときのメッセージに出ているwarningが出ているから
「vacuumしたときのメッセージにwarningが出ているから」に訂正しておく。
219NAME IS NULL:2006/03/05(日) 22:26:57 ID:???
ちしょーちしょーしょー ちしょーちしょーしょー
220NAME IS NULL:2006/03/06(月) 06:31:43 ID:???
PostgreSQLユーザーの知能もさることながら、PostgreSQLもダメダメじゃん。
221NAME IS NULL:2006/03/06(月) 09:20:03 ID:???
PostgreSQlは、放置するとデータロストするDB。
だが、どんなDBでも放置してよいかというのは、別問題。
222NAME IS NULL:2006/03/06(月) 10:03:57 ID:???
しかし、個人でメンテする規模のDBで20億トランザクションは異常。
いったい、何をどうしたら、どのくらいの期間で達成できるのか。
223NAME IS NULL:2006/03/06(月) 10:43:22 ID:dOuOdfCl
で、回復策はないのか?
224NAME IS NULL:2006/03/06(月) 10:51:31 ID:???
>>223
本人?
もうすでに数日とまってるし業務用じゃないよね?
ないならデータ破棄したら?
225NAME IS NULL:2006/03/06(月) 11:02:52 ID:dOuOdfCl
>>224
本人ではないが、業務使用の管理担当なので、万が一の時の策として知っておきたい
226NAME IS NULL:2006/03/06(月) 11:11:33 ID:VsO9mqmP
話の腰を折ってすみませんが・・・
ちょっと教えてください。。

template0を使ってtemplate1を元に戻すにはどうしたらいいのでしょうか?
(template1は普通にはdrop出来ない?)

バージョンは8.1.3です。

あんまり こういうケースってないのでしょうかね。
ネットや本で調べてみたんですが、、情報が見つけられなかったもので・・・
簡単にはtemplate1を削除、でtemplate0をコピって書いてあるのは見たんですが・・じゃ、それは具体的には?ってことですね。
227161:2006/03/06(月) 19:32:56 ID:mKHNjloC
>>220
禿同!
PostgreってDBもユーザーも駄目だなw
誰一人として、今回の俺様の質問に回答出来ないしw
ちなみに俺様は簡単に解決したが、アフォらしくてこんなDBはとっとと変えてやるwww
228NAME IS NULL:2006/03/06(月) 19:35:31 ID:???
>>227
ありがとう。助かる
229これマジ!!!:2006/03/06(月) 19:42:42 ID:???
大手:Oracle,MS-SQL,DB2
中堅:MySQL,MSDE(MS-SQL2005ExpressEdition)
零細:MS-ACCESS,PostgreSQL,FileMaker
230NAME IS NULL:2006/03/06(月) 20:21:59 ID:???
東大:sybase
早稲田:Oracle
慶應:MS-SQL
中央:MySQL
明治:MSDE
法政:MS-ACCESS
駒沢:FileMaker
独協:PostgreSQL
231NAME IS NULL:2006/03/06(月) 21:51:36 ID:???
>>227

もうほとんど答はでてるだろうが、
o とりあえずpg_dumpでバックアップとる。
o vacuumdb -a -z で運が良ければ回復する。
o 原因は、全てのデータベースに対してvacuumをしていなかったから
(かもしれない)。

あと、トランザクションIDはSELECTでも消費するから。
232NAME IS NULL:2006/03/06(月) 21:57:26 ID:???
>>226
http://www.postgresql.jp/document/current/html/manage-ag-templatedbs.html
この辺で解決しない?なんかエラーとか出たの?
233NAME IS NULL:2006/03/06(月) 22:34:38 ID:fcELk+sR
プログラム板でも書いたんですが、posgreスレがあったので、こちらで質問させていただきます。
postgreSQL7.3で、ユニークキーの削除と、追加をしたいんですが、できません。
データを消さずにやりたいのですが、どうすればいいでしょうか?
alter table でできないでしょうか?
234161:2006/03/06(月) 22:35:19 ID:mKHNjloC
>>231
では、datfrozenxid が未だに20億を超えているがコレは何故?
問題ないの?
235NAME IS NULL:2006/03/06(月) 23:11:07 ID:???
>>233
それでできる
236NAME IS NULL:2006/03/06(月) 23:12:53 ID:fcELk+sR
>>233自己レスだけど、

ALTER TABLE table DROP UNIQUE key;

であってる?あと、Key名ってコンソール上じゃなくてcommonsqlとかで調べることってできますか?
237NAME IS NULL:2006/03/07(火) 00:05:38 ID:???
ALTER TABLE table DROP CONSTRAINT key;
238NAME IS NULL:2006/03/07(火) 01:04:35 ID:???
> >>231
> では、datfrozenxid が未だに20億を超えているがコレは何故?
> 問題ないの?

「では」というのは、
1. バックアップをとってリストアしなおしたが、未だに20億を越えている
2. vacuumdb -a -z を行ったが未だに20億を越えている
3. その他
のうちどれでしょうか。

あと、PostgreSQLのバージョンってもう出てたっけ?
239NAME IS NULL:2006/03/07(火) 01:24:31 ID:???
>>238
>のうちどれでしょうか。

それくらい分かりそうなもんだが。。。
240NAME IS NULL:2006/03/07(火) 01:47:48 ID:???
釣れますか?
241NAME IS NULL:2006/03/07(火) 03:51:02 ID:???
テーブルのパーティショニングってどうやったらできるの?

50万レコードの激重のテーブルがあって、
5万ずつ区切って、検索速度を早くしたいです
242NAME IS NULL:2006/03/07(火) 09:48:33 ID:???
50万程度で重くなるのは作りが悪い。EXPLAIN使え
243NAME IS NULL:2006/03/07(火) 09:59:00 ID:???
50万程度で重くなるのは作りが悪い。BRAIN使え
244NAME IS NULL:2006/03/07(火) 12:40:40 ID:???
50万程度も出せない貧乏が悪い。Oracle買え
245NAME IS NULL:2006/03/07(火) 12:46:50 ID:cAKvatDR
俺ならMySQLにするね
オラコーが目を付けたくらいだし
246NAME IS NULL:2006/03/07(火) 14:11:11 ID:???
空気嫁
247NAME IS NULL:2006/03/07(火) 17:33:54 ID:???
>>244
ネタかわからん微妙なレスしないでくれ
248NAME IS NULL:2006/03/07(火) 20:15:40 ID:???
ポスグレ使いってダサダサ・・・・・・・・・・・
249NAME IS NULL:2006/03/07(火) 20:29:39 ID:???
ポスグレって呼ぶな
250NAME IS NULL:2006/03/07(火) 22:57:38 ID:OclRE+xF
ポスグレ・・・ダサッ( ´,_ゝ`)プッ
251NAME IS NULL:2006/03/07(火) 23:17:34 ID:???
>>248,250
MySQLはカコイイのか?
252NAME IS NULL:2006/03/08(水) 00:04:31 ID:???
ドキュメントにパーティショニングという章があるというのに。
http://www.postgresql.jp/document/current/html/ddl-partitioning.html
253NAME IS NULL:2006/03/08(水) 01:42:44 ID:???
パーティションサポートされたんだ。知らなかった。
254NAME IS NULL:2006/03/08(水) 07:18:20 ID:???
MySQLはストアドプロシージャーが無い、viewが定義できない。
解決したっけ?
255NAME IS NULL:2006/03/08(水) 08:21:06 ID:???
>>254
ストアドもviewも5.0からあったような希ガス

256NAME IS NULL:2006/03/08(水) 22:00:08 ID:bNReUZ1T
パーティションで扱えるテーブル数の上限ってどれ位
257NAME IS NULL:2006/03/08(水) 22:18:46 ID:???
上限気にするより、適切にパーティションにわけろ。
1万とかそんなテーブル数にするつもり??
その場合は使いかた間違えてるよ。
258NAME IS NULL:2006/03/08(水) 22:47:38 ID:bNReUZ1T
50万位のテーブルを使いたいのだけど…やっぱり駄目か
顧客毎のレコード数が不定の上、かなりでかくなる事が予想されるので
顧客毎にテーブルにして、検索、削除の速度を稼ぎたいのだけど…
259NAME IS NULL:2006/03/08(水) 22:49:06 ID:???
DB分ける
260NAME IS NULL:2006/03/08(水) 22:54:34 ID:bNReUZ1T
早っ。ありがとう
DB分けると相互でデーターをやり取りするときに不便では?
例えば、検索結果で更新するとか…
261NAME IS NULL:2006/03/08(水) 22:59:42 ID:???
dblinkとか。

っていうか、かなりでかくなるってよくわからん。
具体的に言えば教えてもらえるかもよ。
262NAME IS NULL:2006/03/08(水) 23:03:27 ID:???
>顧客毎にテーブルにして

おれが不勉強なのかもしれないけど
こんなやり方初めて見た
263NAME IS NULL:2006/03/08(水) 23:06:22 ID:???
>>262
俺は二回目
264NAME IS NULL:2006/03/08(水) 23:18:41 ID:bNReUZ1T
具体的には患者の治療履歴を記録、検索するものと思ってください(ってまんまやん)
患者毎のデーターは来院日毎に所見やら画像やら。画像はもしかしたら別ファイルにするかも。
患者毎のデーター量は最大で数Mバイト。テキストが主です。初診のみの患者も居るので
データー量としては1Gも行かないと思います当面は50〜100Mバイト位
UPDATEは患者を見る毎に更新なので頻度は大したことないのですが
統計を取る時に結構複雑な統計らしいので、検索速度を稼いでおきたいのです。
病名等で患者=テーブルの選択が出来れば早くなるかと考えたのですが…
dblink、調べて見ます。
265NAME IS NULL:2006/03/08(水) 23:25:46 ID:bNReUZ1T
>>262
データーベースは素人な物でもっと良い方法が有るのかもしれません。
元々アセンブラで書いてたプログラムで、患者毎にバイナリファイルにしてたのですが
ブラウザで見たいとの要求が有って移行中です。
他に良い方法が有ったらご教示頂けるとありがたいです。
266NAME IS NULL:2006/03/09(木) 00:01:42 ID:???
まずはリレーショナルDBの基本みたいな本を読むべきでは?
267NAME IS NULL:2006/03/09(木) 00:50:12 ID:UV7gMtNJ
>>266
とりあえず

基礎SQL インプレス
SQL書き方ドリル 技術評論社
SQLポケットリファレンス 技術評論社
先輩に聞くSQLの素朴な疑問 九天社
標準POSTGRESQL ソフトバンク
POSTGRESQL全機能リファレンス 技術評論社

等を買って読み漁ってますが、お勧めの本とか有りますでしょうか?
PEN4 3.4GHz 2GBYTEメインメモリ HDDはSATA10000RPMで
顧客毎の表であれば一人分のTEXTを1m秒前後で検索出来るのですが
表を纏めてしまうと数秒掛かってしまう状況なので、この辺の情報が載ってる本が欲しいのですが…
268NAME IS NULL:2006/03/09(木) 01:12:31 ID:???
おれも組み込みでアセンブラしかないTargetで仕事することもあるので
気持ちは分からんでもないな

まずは
患者名(患者のID?)にインデックスを張ってみるとか
http://www.postgresql.jp/document/pg732doc/reference/sql-createindex.html
269NAME IS NULL:2006/03/09(木) 01:31:00 ID:???
>>267
正規化ってわかるようになった?
それができるならだいたいいいと思うけど。
データが多そうだし経験者にみてもらって助言もらう方がいいと思うよ
ここで全部さらせるならそれでもいいかもだけど
270NAME IS NULL:2006/03/09(木) 04:29:34 ID:UV7gMtNJ
>>268
インデックスは張って見た事が在り半分位にはなりましたが余り改善されませんでした。
ハードディスクのランプを見ていると、表を纏めた時は、忙しなく点滅していて
どうもIOボトルネックの様な感じです。

DOS5+32ビットアセンブラなら、メインメモリをリニアに使えてやりたい放題なのですが
なかなか手こずっておりますw
271NAME IS NULL:2006/03/09(木) 04:38:47 ID:UV7gMtNJ
>>269
正規化は多分理解してます。で、カルテと言う表を作って全患者のTEXT
を入れてしまった所、検索に時間が掛かってしまったしだいです。
少なくても患者の数X来院日数のレコードが必要なのでデーターは確かに多いです。
経験者は僕一人なのですが、特急の仕事という訳ではないので
色々試してみようと思います。
272NAME IS NULL:2006/03/09(木) 05:43:48 ID:???
>>271
>特急の仕事という訳ではないので
>色々試してみようと思います。
メチャウラヤマス
273NAME IS NULL:2006/03/09(木) 07:19:31 ID:???
検索ってもしや karte LIKE '%キーワード%' とかやってないですか?
そうだとしたら遅くて当たり前。
pgestraier, pg_rast, tsearch2 + kakashi (or mecab) 等を使うか、
全文検索用のインデックスを PostgreSQL とは別に持つとかしないと。
274NAME IS NULL:2006/03/09(木) 09:01:58 ID:???
>>271
まず問題の切り分けが大切。
遅いというのが、索引を使っての検索かそうでないのか。
1レコードを呼び出す処理が遅いのか、統計のための処理が遅いのか。
こういうところをすっ飛ばして1ユーザー(患者)1テーブルとか言い出すと電波臭がしてくる。
275NAME IS NULL:2006/03/09(木) 09:39:41 ID:???
これ何でSJISに対応してないの('A`)
一々エンコードするのマンドクセ
276NAME IS NULL:2006/03/09(木) 09:43:47 ID:???
テーブル1つでカード型DBの1レコード、みたいな考えか・・・

「データベース村へ,ようこそ」がお勧めだなあ
277NAME IS NULL:2006/03/09(木) 09:45:02 ID:???
>>275
SET CLIENT_ENCODING TO 'SJIS'
ってやれば、いちいちエンコードしなくてもいいよ
278NAME IS NULL:2006/03/09(木) 11:25:11 ID:TW+6gLHB
>>274
テーブルが沢山あるのは相当でかい基幹システムで、
COBOL系SEが作ったやつとかなあ。
万単位のテーブルは一人でやる仕事じゃない。
俺一人でやった会計システムでも200超えてきたころ
リレーションを覚えきれなくなってやばいかったです。

ISAMとか勉強してから、SQLにくるもんだと思っていたよ。


279NAME IS NULL:2006/03/09(木) 12:07:25 ID:PpmxJvWl
pl/rqlでフェッチしてきた変数をDBに格納したい場合、INSERT INTOで実現可能ですかね?
280NAME IS NULL:2006/03/09(木) 13:59:26 ID:???
>>27
おおdクス
281NAME IS NULL:2006/03/09(木) 17:59:25 ID:???
患者毎にテーブルを分けてしまうと統計取るときに面倒な気がするけど。
患者単位の統計なのか?。。。いや、病名から患者=テーブルを選択するって書いてあるから(>>264)、
そうなると、SQLの外側の処理が面倒な気がするな。SQL呼び出しも多発しそうな気がする。
いや、そのたくさんのテーブルを結合するのか?それはそれで遅そうだが。。。
インメモリDBって選択肢もあるのかもな。
282NAME IS NULL:2006/03/09(木) 18:35:12 ID:???
日本語検索だけ、なまず使うとか。
283NAME IS NULL:2006/03/09(木) 22:54:30 ID:???
ちょっとオーム社のマンガでわかるシリーズ立ち読みしてきたが
思いのほかしっかりしたこと書いてあったよ
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?&ISBN=4-274-06631-2
284NAME IS NULL:2006/03/10(金) 05:45:03 ID:2CfbRVGE
>>272
>メチャウラヤマス
お金にならない仕事なので多分ウラヤマシクないと思いますw
なので、せっかくなら勉強がてらPOSTGRESQLをマスターしたいかと…
285NAME IS NULL:2006/03/10(金) 05:55:29 ID:2CfbRVGE
>>273
LIKE使ってます。ただ、患者毎の処理なので1レコード内の検索で済み全文検索
不要かと考えてたのですが…そちらの方が早いのでしょうか?
全くいじった事が無いので勉強してみます。
構文解析みたいな物なのでインデックスが使えるかどうか…
286NAME IS NULL:2006/03/10(金) 06:09:10 ID:2CfbRVGE
>>274
1レコードを呼び出す時間が遅いです。実データーを入れた時
267に書いたように数秒掛かってしまいます。
唯、 generate_seriesで50000000レコードのテーブルを作成してインデックス
をつけてやると、インデックスを付けるのに200秒程度掛かりますが
1レコードの呼び出し時間は0.4m秒前後と十分高速になるようです
実データーとの差が何なのかは今調査中です。HDDのアクセスランプを見た感じ
データーが飛び飛びに記憶されている為に遅くなっているのでは?との印象ですが
未だほんとの所は不明です。
287NAME IS NULL:2006/03/10(金) 06:11:47 ID:2CfbRVGE
>>276 >>283
本屋で探してみます。ありがとうございます。
288NAME IS NULL:2006/03/10(金) 06:25:40 ID:2CfbRVGE
>>281
最終的にやりたい事は、投薬、治癒等の関係を患者毎に抽出して
数値化した物をカウントするので、患者間のデーターは無関係で
患者一人毎に処理して行きます。
ですので、複数の患者テーブルを同時にセレクトや結合する事は有りません。
患者単位で文書を処理して数値化した物を一つのテーブルにするつもりなのですが…
説明が下手ですみませんorz
289NAME IS NULL:2006/03/10(金) 06:27:26 ID:2CfbRVGE
>>282
良く聞く名前ですが使った事が無いので勉強してみます。
290NAME IS NULL:2006/03/10(金) 07:26:37 ID:???
>>286
カルテ関係のデータ構造を予想で書くとこうなると思うのだが
カルテ番号 プライマリーキー
患者ID、 受診日 副次キー(非ユニーク?)
その他の情報

必ず患者単位の処理をするなら where 患者ID = 'xxx' が問い合わせに含まれ
EXPLAINでプランを見れば最初に副次キーで患者の絞込み(索引の範囲スキャン)
がされているはずだがどうだろうか?
この辺の動作が正しくてなおかつ遅いようなら、OSやメモリ、HDD周りの問題かもしれない。
291NAME IS NULL:2006/03/10(金) 07:48:43 ID:???
データベースアクセスでは、メモリからアクセスすることがあるから
HDDアクセスランプでは確認できないぞ。
一般論としては。。。
292NAME IS NULL:2006/03/10(金) 10:34:15 ID:???
>>286
比較しているgenerate_seriesテーブルも実データテーブルも同じくらいの行数で、
どちらも索引付きの列を条件に絞り込んでいるのですよね?
その時の絞り込みの条件は、等価条件ですか?それとも、Likeや不等号などの非等価条件?
前者であればそんなに時間差が出るものなのかな。
後者であれば、場合によっては索引が役立ってないこともある。
293NAME IS NULL:2006/03/10(金) 10:45:41 ID:???
>>288
「患者単位の処理結果をひとつのテーブルにする」のは、
SQLとは別に行う(SQLの結果をJavaなどの別の言語でまとめる)、ということなのですね。
で、そのまとめる部分の処理時間は問題ない(単純に並べるだけとか)ということかな。

であれば、動的にSQLを生成してテーブル名を変更しながらSQL処理をする、というのもひとつの方法かも。
ただ、投薬や治療などを条件に患者を絞り込む(つまりテーブルを特定する)ことはできなくなるので、
常に全患者を処理対象とすることになりますが、この辺は問題ない?

>>292 でも触れたけど、絞り込みの条件は患者番号による等価条件検索?
それとも、医師所見などの文章中からLike条件でキーワードを検索?
患者毎にテーブル分けするなら、患者番号による検索はできなくなるよね。
患者番号をテーブル名にして直接テーブルを指定することになるかと。
294NAME IS NULL:2006/03/10(金) 11:33:19 ID:jgzwRyRV
静的SQLだけでアプリケーションが書けるケースは稀。
SQL文は当たり前のように動的生成されるもんだよ。
295NAME IS NULL:2006/03/10(金) 12:13:13 ID:???
>>288
>投薬、治癒等の関係を患者毎に抽出して

がどういう処理なのかわからんけど、入力時にカウントできないの?
あと、
・like検索でインデックス使えてる?
・抽出するのが特定の単語で決まってるならそれだけ別テーブルに持ってもいいかも
296NAME IS NULL:2006/03/10(金) 12:25:55 ID:???
PostgreSQLって、管理できるDBの数って制限ありますか?
1000DBとか管理できるんですかね?ディスクの容量は無視したとして。
バージョンは8です。
297NAME IS NULL:2006/03/10(金) 12:48:36 ID:???
>>294
誰も静的SQLだけで出来るとは書いてないと思うぞ
おそらく293に対して勝ち誇りたいのだと思うが、
単に、テーブル名を変更する方法として動的って書いてあるだけに読める
298NAME IS NULL:2006/03/10(金) 15:27:45 ID:???
まぁ、俺はクライアント側でSQL文を組み立てるから、厳密には動的SQLとはいわんけど。
それに、テーブル名を変更するのは、たいていテーブル設計が悪い。

299NAME IS NULL:2006/03/10(金) 18:49:59 ID:???
代案も出せず否定だけか。
300NAME IS NULL:2006/03/10(金) 18:59:54 ID:???
いや、ちょっとしか読んでないから、代案だせん。
301NAME IS NULL:2006/03/11(土) 08:12:30 ID:???
>>286
タプルの物理的な並び順は、インデックススキャンのコストに影響するよ。
generate_seriesしたやつを別テーブルにorder by random()して
いれて比較するといいかもしれない。
302NAME IS NULL:2006/03/11(土) 08:55:11 ID:2HzSNpE4
色々ありがとうございます。非常に参考になります。
昨日は疲れて寝てしまいました。今、出先なので、帰ったら書き込ませて頂きますorz
303NAME IS NULL:2006/03/12(日) 07:09:24 ID:eqZ6XIiC
>>290
予想の通りです。で、EXPLAINは敷居が高くて見てなかったのですが
簡単にする為
select * where 患者ID = 'xxx' from カルテTBL
で検索して数秒掛かっていたので、全患者を処理するにはちょっと
遅すぎる為、せめて2m秒未満に抑えたい所です。
テストに使っていた実データテーブルはDROPしてしまっていたので
再度入れてEXPLAINを見てみます。ただ、実データテーブルは1日がかりで
変換しながら入れたので出来れば>>301にご教示頂いた方法で再現すると良いのですが…

>>291
検索している数秒の間、ランプが激しく点滅していたのと
シーク音がしていたのでキャッシュに収まりきれて無い感じでは有りますが…
確かにそうですね。
304NAME IS NULL:2006/03/12(日) 07:10:27 ID:eqZ6XIiC
>>292
比較しているgenerate_seriesテーブルは実データテーブルよりも
10倍位大きくしてありますがgenerate_seriesテーブルの方が断然早いです。
実際は日付による絞込みとLikeで文書の中から単語検索したいのですが
遅すぎるのでどの辺りに問題があるか調査する為、患者IDで絞り込んで見て
検索時間を実測し使用可能かどうかの検討中です。

>>293
患者単位の処理結果をひとつのテーブルにするのは今の所PHPを予定してます。
本来はSQL一発で出来ると良いのですが、複数の文書から治療期間や副作用の程度等
を数値化しないといけないので、ロジックをプログラムで実装した方が良いとの判断からです。
統計を取る患者は使った薬の名前や病名等で選択する為
投薬や病名等は、診察時に日付などと一緒に別テーブルにもUPDATEして
この別テーブルを元に統計に関する患者を割り出す様にしようと考えてました。
(現状のアセンブラプログラムと同じ作り)患者毎にテーブルを作らなくて済めば
必要なくなるかも知れませんが…
305NAME IS NULL:2006/03/12(日) 07:11:26 ID:eqZ6XIiC
>>295
>投薬、治癒等の関係を患者毎に抽出して

の処理は複数の来院記録からの文書処理な上、検出する単語も薬名等特定の単語だけでは無く文書として
処理しなくてはいけないので、入力時のカウントや別テーブルに持っていく等は難しいと思います。
未だ、文書処理の検討迄進んで無いのですがorz like検索でインデックスって使える物なのですか?
素人目には、文字列が変化するとインデックスも別物が必要になりそうで…

>>301
order by random()なんて方法が使えるのですね(感動
テストテーブル作るのにrandom()使いたいと思ってたのですが
使い方がいまいち良く判らなかったので、外部プログラムでUPDATEしてました。
306NAME IS NULL:2006/03/12(日) 22:33:37 ID:???
>>304
generate_seriesテーブルも実データテーブルも
同じデータ型の単一列(患者ID)の等価検索ですよね?

こちらでは実際に速度を計ってみているわけではないので、あくまでも仕組み上からの推測ですが、
「双方の検索条件が同じ(同じデータ型の単一列に対する等価検索)」
「双方の検索条件列にB-Treeの索引が張られている」
「双方共その索引が使用されている」
「双方共、同じくらいの行数(実際には速い方がより行数が多いらしいですが)」
ということであれば、そんなに速度差はでないような気がしますね。

ちなみに、患者数の想定人数はどのくらいなのでしょうか?
ちなみに、like検索では先頭が固定じゃないと索引は使われません(like '%風邪%' は索引は使われない)。

ちなみに、↓矛盾してません?

304>投薬や病名等は、診察時に日付などと一緒に別テーブルにもUPDATEして
305>処理しなくてはいけないので、入力時のカウントや別テーブルに持っていく等は難しいと思います。

>>305では別テーブルに持っていくのは難しい、とありますが、
>>304では別テーブルにもUPDATEするように考えているらしいですが。
307NAME IS NULL:2006/03/13(月) 04:21:55 ID:kf2AaTFQ
>>304
generate_seriesテーブルと実データテーブルで実は若干の違いがあります。
実データーテーブルでは患者が来院の度にインサートするので同じIDが複数あります
所がSQLに疎いのでgenerate_seriesの方は重複しない番号となっています。
又、実データーテーブルではTEXTの欄は文字数が毎レコード違いますが
generate_seriesの方はTEXTの欄が50バイトのANK文字となっています。

索引が使われているかは>>290でご指摘された様にEXPLAINを
見ておけば良かったですね。未だ実データーテーブルを復旧出来てないので
復旧しだい、実行します。

患者の想定人数=500000人で、カルテテーブルには患者が来る度に
レコードが一つ増えていきます。同じ患者が1000回来院すれば同じIDが
1000レコード存在する事になります。

304と305の違い、説明不足ですみません。
後で統計処理を行う際、患者の選択をする為のテーブルは診察時にUPDATEします。
これは病名、薬名程度の決まった物で済みます。しかし実際の統計処理は
薬の名前や病名だけでは無く、カルテ文書として処理する必要が有り
予めカウント出来ないです(開発の時点で必要な要素が不明)
308NAME IS NULL:2006/03/13(月) 23:06:50 ID:???
お約束だがanalyzeしてる?って話は出たっけ?
309NAME IS NULL:2006/03/13(月) 23:37:19 ID:???
まぁ、パーティション使うにしても、患者毎にパーティションわけるのじゃなくて、
普通はレンジパーティションを使って複数の患者毎にわける。
患者ID1〜10000はこのパーティション、10001〜20000とか、パーティションキーが
この場合患者IDだけど、何をパーティションキーにするかは、データが検索されるときに
もっとも頻繁に使われるキーがベスト。
310NAME IS NULL:2006/03/13(月) 23:49:16 ID:???
>>307がさっさと、テーブル構造と使用しているSQL文をさらせば、
こんなレスが長引くこともないのは事実。
俺も含めてみんなはっきりわかってないから、みんなあーだこーだ、言って、
話に収拾がつかなくなっている。
311NAME IS NULL:2006/03/14(火) 01:02:59 ID:???
確かに
312NAME IS NULL:2006/03/14(火) 13:08:50 ID:???
久々に来たらまだ続いてた
313NAME IS NULL:2006/03/14(火) 17:50:01 ID:???
永遠にループです
314NAME IS NULL:2006/03/14(火) 18:42:24 ID:???
あぼーと
315NAME IS NULL:2006/03/14(火) 19:23:55 ID:???
startup
316NAME IS NULL:2006/03/15(水) 17:18:47 ID:???
>患者の想定人数=500000人で、カルテテーブルには患者が来る度に
>レコードが一つ増えていきます。同じ患者が1000回来院すれば同じIDが
>1000レコード存在する事になります。

原因はこれ。
ストレージの劣化。

一度フルバックアップを取ってからdropdbして書き戻しを行うと驚くほど速度が上がる。
商用DBでは常識なのにPostgresではあまり言及されていないのが不思議。
317NAME IS NULL:2006/03/15(水) 17:27:34 ID:???
>>316
本番運用で遅くなったんじゃなくて、これまでファイルベースでやってたデータをロードしたら遅かったって書いてるじゃないか。
ロードしたてのを一度フルバックアップを取ってからdropdbして書き戻しを行うと驚くほど速度が上がるのか。
318NAME IS NULL:2006/03/15(水) 17:29:21 ID:???
そんなことできるタイミングあるの?
病院の人は開発中だから出来ると思うけど
319NAME IS NULL:2006/03/15(水) 17:55:26 ID:???
auto vacuum でいいだろう
320NAME IS NULL:2006/03/16(木) 21:24:09 ID:3BwNbTx0
Linux板から誘導されてきました。

http://www.a-yu.com/pub/postgres01.html
ここのページを参照しながら設定を行っていました。
Version番号やその他の設定は自分の環境に合わせて実行しています。

ユーザー名postgresでは無事にデータベースを扱えるようになりました。
ところが、新しいユーザーを作ろうと、
% createuser penguin
とすると、

[postgres@localhost pgsql]$ createuser penguin
Shall the new role be a superuser? (y/n) y
createuser: creation of new role failed: ERROR: syntax error at or near "ROLE"at character 8

というようなエラーが発生してしまいます。
「ROLE」の近くでエラーが発生しているというのは読み取れるのですが、
どの設定ファイルのどのあたりで「ROLE」に関するエラーが発生しているのかというのが分かりません。

PostgreSQLで同じようなエラーになった方等いましたら、
エラーを回避するためのアドバイスの方よろしくお願いします。
321NAME IS NULL:2006/03/16(木) 22:16:05 ID:???
>>320
/usr/local/bin/createuser penguin
ならばどうなるか?
322NAME IS NULL:2006/03/16(木) 22:46:58 ID:???
>>321
実は、いろいろ試してたところ、症状が悪化してしまいました…

tarボールでインストールしていたのが原因かなと思ってRPMでインストールし直した所、
[postgres@localhost pgsql]$ /usr/local/pgsql/bin/createuser penguin
Shall the new role be a superuser? (y/n) y
createuser: could not connect to database postgres:
FATAL: could not open file"/var/lib/pgsql/data/global/1262": 許可がありません

というようなパーミッションのエラーが発生してしまうようになってしまいました…
実際に権限は以下のようになっているのですが
[postgres@localhost global]$ ls -l
合計 132
-rw------- 1 postgres postgres 8192 3月 16 22:30 1260
-rw------- 1 postgres postgres 0 3月 16 22:30 1261
-rw------- 1 postgres postgres 8192 3月 16 22:30 1262

RPMをアンインストールしてtarボールでインストールし直しても
同じような症状が発生するようになってしまいました。
ググってみたところ、SELinuxが怪しいかなというところにこぎつけています。
http://ml.postgresql.jp/pipermail/pgsql-jp/2005-April/018745.html

権限について調べてみます。
余計な事しなければ良かったです…
323NAME IS NULL:2006/03/16(木) 23:11:13 ID:???
だいぶ分かってきました。

# /etc/rc.d/init.d/postgres start
としてみたところ、
[root@localhost init.d]# ./postgresql start

An old version of the database format was found.
You need to upgrade the data format before using PostgreSQL.
See /usr/share/doc/postgresql-8.1.3/README.rpm-dist for more information.

postgresのサーバが古かったみたいです。
ドキュメントを読んで調べてみます。
324NAME IS NULL:2006/03/17(金) 00:39:19 ID:???
目隠ししたままアクセル全開だなw
325NAME IS NULL:2006/03/17(金) 01:33:34 ID:???
もうわけ分からなくなったので、片っ端からpostgresと名のつくファイルを削除して
yumでインストールしたら直りました。

ありがとうございました。
326NAME IS NULL:2006/03/17(金) 02:52:07 ID:XgLEg+Wq
tar-ball以外で入れると、どこに何が出来るか追いきれない
と思うのは漏れだけですか。

>>324
まったくそのたうりな飢餓。


327NAME IS NULL:2006/03/17(金) 04:12:15 ID:???
CライブラリのGetValueで文字列を取得して、その文字列の長さを取得する際にPQgetlengthを使うと思うのですが。

マニュアルにはstrlen()と同じと書いてるにも関わらず、フィールドの大きさが返って来るのは何故なんでしょ。
328NAME IS NULL:2006/03/17(金) 09:58:07 ID:???
仕様。
普通にstrlen()でいいじゃん。
329NAME IS NULL:2006/03/17(金) 10:01:41 ID:???
って、ちょっとドキュメント見てみたよ。
フィールドの長さ指定の無いTEXT型においてのみ
strlen()と同一って書いてあるじゃん。
330NAME IS NULL:2006/03/17(金) 10:03:31 ID:???
「のみ」とは書いてないか。
でも>>327の内容みると、事前にフィールドサイズがわかってるってことは
TEXT型じゃないフィールドのことだよね?
331327:2006/03/17(金) 22:55:17 ID:???
char(n)だと空白部分に半角スペースが入るんですねorz
勉強不足でした。text型に変えてみます。
332NAME IS NULL:2006/03/17(金) 23:32:56 ID:???
>>326
それは単なる知識不足か誤解だな。
君の後を引き継ぐ人は君がどこに何を入れたか追いきれず呆然とするだろう。
333NAME IS NULL:2006/03/18(土) 02:13:48 ID:7qplQcUf
>>332
では具体的に論証してください。
334NAME IS NULL:2006/03/18(土) 13:10:53 ID:???
dpkg -l 、 dpkg -L とか。 rpm とか他でも似たようなのあるだろ。
335NAME IS NULL:2006/03/18(土) 21:12:06 ID:???
gif画像をフォームからアップロードして、
ラージオブジェクトに登録し
ブラウザで表示させるスクリプトをつくったのですが
画像が壊れていますという表示がでてうまくいきません。

一応以下の点は確認したので、
どこに原因があるのか、よくわからず、
ずっと悩んでいます

どなたか、エロイ人で心当たりのある方がおられましたら
ご教示よろしくお願いいたします。

select * from pg_largeobject where loid=該当oid;
を行うとデータは入っている

header("Content-type: image/gif");
で出力するmime-typeの指定は行っている.

mb_http_output("pass");
はきちんと行っている.

同じ一連のスクリプトで
画像でなくhtmlをアップロードした場合
はきちんとページが表示される。
336335:2006/03/18(土) 21:14:50 ID:???
PHPで
という言葉がぬけてました スマソ
337NAME IS NULL:2006/03/19(日) 02:20:35 ID:???
>>335
そのアップロードした画像を再度保存してみて、元の画像とMD5ハッシュ値で比較したらきっと違ってるんだよね?
ってことは、本当に壊れている。
入れるときに壊れたのかかもしれないし。
338NAME IS NULL:2006/03/19(日) 09:10:59 ID:???
バイナリモードで出力してないというオチに一票。
339NAME IS NULL:2006/03/19(日) 09:16:41 ID:???
ディレクトリやフォルダみたいな階層構造ってテーブルでどう表現すれば良い?
340NAME IS NULL:2006/03/19(日) 10:40:34 ID:???
CREATE TABLE DIRECTORY_LIST(
  DIRECTORY_NO INTEGER,
  PARENT_DIRECTORY_NO INTEGER,
  DIRECTORY_NAME VARCHAR(256),
  CONSTRAINT "DIRECTORY_LIST_pkey" PRIMARY KEY (DIRECTORY_NO)
);

tu-ka,PostgreSQLと関係ない質問な気もするな。
341NAME IS NULL:2006/03/19(日) 20:27:05 ID:???
PostGIS使ってる人います?
Windows版でポリゴンをtransformすると落ちる
342NAME IS NULL:2006/03/20(月) 18:10:45 ID:???
すみません、質問させてください。
Postgresql8.0.3 + fedora core4 + +Apache2.0.54 +
PHP5.1.2 + PDOで使用しています。

PHP内で、
$DB=new PDO('pgsql:dbname=testdb','testuser','test')

と記述し、fetchを行なうスクリプトを書いています。

コマンドラインから php test.phpを実行すると、
DBへ接続が出来、フィールドの値を取得する事が出来ますが、
ブラウザから127.0.0.1/cgi-bin/test.phpを開くと、

"SQLSTATE[08006][7]could not connect to server:Permission denied is the server running locall and accepting connection on Unix domain socket "/tmp/s.PGSQL.5432"?

と出てしまいます。
ユーザーも存在しますし、ポートもあっているのですが、どこを確認したらよいでしょうか?
343NAME IS NULL:2006/03/20(月) 18:23:52 ID:???
コマンドラインからの実行時は、環境変数が効いてること無いですか?
php のソースで省略無しでサーバ名からポート番号まで入れるとどうでしょう?
344342:2006/03/20(月) 19:19:18 ID:???
>343さん、アドバイスありがとうございます。
ホスト名とポート番号を接続文字列に入れてみたのですが同じでした。
ただ、メッセージは少し変わりました。

"SQLSTATE[08006][7]could not connect to server:Permission denied is the server running on host 127.0.0.1 and accepting TCP/IP connection on Unix domain socket "/tmp/s.PGSQL.5432"?

コマンドラインからの接続自体はhost=localhostでも127.0.0.1でも成功しているようですから、
Apacheに何かPDOの為の設定をしなければならないようですね。
345NAME IS NULL:2006/03/20(月) 20:05:47 ID:???
ldconfigはどうですか
まあコマンドラインで動いてるしエラーもpostgresqlが出してるっぽいので
問題無いとは思いますが
あとSELinuxは邪魔してないですかねえ
346NAME IS NULL:2006/03/21(火) 23:54:26 ID:a1kVAgbN
Oracle の all_tab_columns みたいに
テーブル名称、列名称、型、データ長、NotNull制約有無、デフォルト値
を取得したいのですが、SELECT文はどのようにすればよろしいでしょうか?
\d テーブル名ではなくて、select使う方法で知りたいのですが、、、
347NAME IS NULL:2006/03/22(水) 00:06:12 ID:???
>>346
psql -E で起動して\d table_name 打って見れ。
348346:2006/03/22(水) 09:47:56 ID:9HRcWdXB
>347
お前は文盲か?
349NAME IS NULL:2006/03/22(水) 10:06:07 ID:???
>>348
ヒントだよ。やってみればわかる。
-E オプションが味噌。
350NAME IS NULL:2006/03/22(水) 10:23:22 ID:???
346を騙ってるのかどうか知らんが、やってみもしないで文句言うのではないかと
心配していた。もし本人ならカスだな。
351346:2006/03/22(水) 10:43:43 ID:???
俺、会社やいじめっ子達からよくカスって言われるんだよ。
意味が良く分からないけど、どうやら誉め言葉らしいという事は理解している。
352NAME IS NULL:2006/03/22(水) 11:03:25 ID:???
人は褒められて育つ。
353346:2006/03/22(水) 11:12:29 ID:???
ほほう・・・
354342:2006/03/22(水) 12:35:47 ID:???
>345さん ありがとうございます!
SELinuxビンゴでした!

355NAME IS NULL:2006/03/26(日) 05:20:08 ID:???
>>346
information_schema という解もあるけどね
356NAME IS NULL:2006/03/27(月) 16:03:40 ID:wpZsKoyT
15万行ほどレコードをDELETEしたんだけど、やっぱり元にもどしてほしいと言われました。
UNDELETEするの無理?
357NAME IS NULL:2006/03/27(月) 16:35:47 ID:???
初心者です  potsgres用のユーザー作成のため

@adduser postgres
Auseradd postgres
Bgroupadd postgres
Caddgroup postgres

とコマンドしてみたんですが、4つとも command not found   
になってしまうんですがどうしてでしょうか?
誰か教えてください。
358NAME IS NULL:2006/03/27(月) 16:50:46 ID:???
>>357
なんかpostgres以前の質問のような気がするが。
OSは?
359NAME IS NULL:2006/03/27(月) 16:59:40 ID:???
>>358
fedora core4 です。 

すいません、素人丸出しで。 マニュアル本どうりにやってたらつまづいてしまいました。
360NAME IS NULL:2006/03/27(月) 17:05:32 ID:???
基本的に/sbin や /usr/sbin にはPATH通って無いと思うんで、
/usr/sbin/adduser 以下同様、としなさい。
361NAME IS NULL:2006/03/27(月) 17:59:57 ID:???
>>360
ありがとうございます。 PATHが通ってない・・・

m( )m  恥を承知ですいません、もう一度質問させて下さい。

postgreSQLをインストールするまえに、まずユーザーアカウントを作れ と書いてあったので

adduser postgres

とコマンドを打ったら command not found て出てしまったのですが・・

LINUX歴 1ヶ月 なんでもしかしたら、すげー勘違いをおかしてるのかも・・・ 
362NAME IS NULL:2006/03/27(月) 18:04:48 ID:???
泥縄で質問せずに、入門書読んで出直せ。
363NAME IS NULL:2006/03/27(月) 18:09:40 ID:???
だから
/usr/sbin/adduser postgres
とやれって言ってんだよ。
これが読み取れないようじゃ、>>362の言うとおりにしたほうがいい
364NAME IS NULL:2006/03/27(月) 18:11:41 ID:???
でもまあ Fedora Code4 だと、インストール時に何選択したかにもよるが
すでにユーザーpostgresは作成されてて、インストールもされてる気がするな。
邪魔だから消して自分で入れなおしたほうがいいけど。
365NAME IS NULL:2006/03/27(月) 18:15:13 ID:???
そのようなファイルやディレクトリはありません と出ました。

わかりました。入門書、他に何冊か買ってみて調べてみます。お騒がせしてすいませんでした。
366NAME IS NULL:2006/03/27(月) 18:17:38 ID:???
こんな奴が自分で入れ直そうとしたらそれこそ大惨事だろ。
余計な事言わずにLinux板にでも誘導しろ馬鹿。
Linux板
http://pc8.2ch.net/linux/
367NAME IS NULL:2006/03/27(月) 18:22:03 ID:???
>>365
Linuxではadduserではなくuseraddが標準。
入門書ばかり何冊も買うんじゃなくて、4000円くらいの分厚い奴を買わないと駄目。
368NAME IS NULL:2006/03/27(月) 18:29:33 ID:???
まさかroot以外のユーザがadduserしようとしているのではあるまいな
369NAME IS NULL:2006/03/27(月) 18:33:01 ID:???
>>367
>>357で4つ出しておいて、>>363で言われた内容で4種類試さないところが
向いて無いと思うが・・・
370NAME IS NULL:2006/03/27(月) 18:39:58 ID:???
すいません、やさしそうなかたがいらっしゃるみたいなので、もう一回だけ粘着させてください

>>364
えっととりあえず最初に入っていたやつは remove して消しました。

>>368
root はとっていると思います。 あれですよね su って打ってpassword 打ち込むやつですよね

>>369
いえ、4つともやってみました。

subinディレクトリ内に useradd という実行ファイルがあるのですが、

/user/subin/useradd postgres

というのは、つまり useraddの実行ファイルを起動させて それにpostgresとぶち込めってことを
命令させてるってことでいいんですか?  
371NAME IS NULL:2006/03/27(月) 18:58:29 ID:???
>>356
普段やらない作業で、データの削除を大量に伴う場合
バックアップぐらいとっとくのが普通なんだが・・・運用マニュアル大丈夫か?

とりあえず無理。
372NAME IS NULL:2006/03/27(月) 19:00:06 ID:???
データベース板の人達は慣れてないだろうけど、
これが最近流行中の初心者を装った釣り
373NAME IS NULL:2006/03/27(月) 19:33:58 ID:???
情報を小出しにするのがポイントだよな
374NAME IS NULL:2006/03/27(月) 19:36:11 ID:???
全角アルファベットを混ぜたり、機種依存文字をあえて使うのもそれか。
375NAME IS NULL:2006/03/27(月) 19:49:31 ID:???
su で - 付けてないと予想。
376NAME IS NULL:2006/03/27(月) 20:13:02 ID:???
最後に大どんでん返しが用意されてないと釣りの要件を満たさない。
例:言い忘れましたけどこないだからHDDにエラーが出てました
あっけにとられた面々を後に「自己解決しますた」と言って颯爽と去る。
377NAME IS NULL:2006/03/27(月) 22:03:11 ID:???
ああー なんかオレのレスで盛り上がってるwww  すいません、マジ素人ですよオレ。

一月以内に LINUX(fc4)とPHPとposgreでサーバー立てようと
思ってまして、これから本気モードで勉強します。質問はとりあえず置いておくので
答えてくれるかたがいらっしゃったら答えてください。

ちなみにwindows歴は95から使ってますが、LINUXはまだ1月です。
つい何日か前まで、 cd/usr/  CDって何? みたいな感じでしたwww

空気は嫁ませんが、みなさんのレベルであれば息抜きぐらの程度の質問だと思いますので
気分転換ぐらいで答えてくれたら幸いです。 もしコテハンで答えていただければ僕の企画が
うまくいけば、絶対に借りは返します。 
378NAME IS NULL:2006/03/27(月) 22:07:51 ID:???
>>377
おれはWindows3.0から使ってるよ
379NAME IS NULL:2006/03/27(月) 22:40:28 ID:???
Windows使ってたのにcd知らないとは…
380NAME IS NULL:2006/03/27(月) 22:44:19 ID:???
>>375
すいません、それでした!!

su - ってこれやらんと駄目なんですね。 入門書に書いてねーし。マジつかえねー

本当にありがとうございます。
381NAME IS NULL:2006/03/28(火) 02:09:15 ID:3mxdC1F1
char型とtext型は使い分けた方がいいですかね?
382NAME IS NULL:2006/03/28(火) 02:12:04 ID:???
>>381
全然別物ですよ。
383NAME IS NULL:2006/03/28(火) 03:24:28 ID:???
>>381
postgresのマニュアルには基本的にすべて全部
textでよくて、charとかは互換性維持のためにあるだけ

みたいなことが書いてあったような希ガスるので確認よろ
384NAME IS NULL:2006/03/28(火) 03:28:26 ID:???
>>356

PITR使えばいけるハズだけど、事前に設定が必要。
設定してないならご愁傷様でした。
385NAME IS NULL:2006/03/28(火) 04:21:22 ID:???
>>383
コードなどもtextでOKなんですね?
386NAME IS NULL:2006/03/28(火) 08:53:42 ID:???
>>356
そもそもそれほど大量にDELETEする前にバックアップとか何故取らんの?
387NAME IS NULL:2006/03/28(火) 09:50:00 ID:???
su - なんて使わん。
Postgres関係はすぐpostgresにスイッチするし、
sbinにパス通ってもろくなことがない。


まあ作業はsudo -s ばかりだが・・

/usr/sbin を /usr/subin にタイプミスしたのも素でやったのか
どうせbashなんだろ?TABキーで補間するようにすれば間違わん。
388NAME IS NULL:2006/03/28(火) 09:51:19 ID:???
独り言はブログで
389NAME IS NULL:2006/03/29(水) 21:12:47 ID:3EPL9Zak
誰か postgresql の認定試験受けてたらどんなだったかきかして
390NAME IS NULL:2006/03/29(水) 22:44:19 ID:???
試験内容について第三者に話してはならない、のが受験条件。
391NAME IS NULL:2006/03/30(木) 03:39:18 ID:4WjpxBFJ
>>389
内容に関してでなければ、おけと思われ。
テスト本出てるでしょ。あれ問題と答え見て理解して、
そんで実際にやってみて、7割りぐらい出来たかなと思えば取れます。
落ちたとか難しかったって意見は聞かないです。ま その程度です。
392NAME IS NULL:2006/03/30(木) 12:16:03 ID:iw9+zW9U
おととい、JDLのソフトが入っているマシンを見たら、
postgresql なんてサービスが動いていた。

ふーんデジタル研究所ってそういうところなんだ。

393NAME IS NULL:2006/03/30(木) 22:06:50 ID:???
文作くんが懐かしい。
本社、お城みたいなんだよなあ。
免許更新に行くと前を通る。
394NAME IS NULL:2006/03/31(金) 11:32:07 ID:o2i7u1Xm
>>393
お城かあ、すごいね。この間デ研社長と同僚だった大先生が、トンデモな営業を
?まえて説教していたよ。 世の中って実に怖いねえ。

postgresqlで動いてるってことは、aclをゴニョゴニョすればデータ抜けるね。
いやあ、イイ仕事が出来そうなヨカーン。
395NAME IS NULL:2006/03/31(金) 11:57:01 ID:???
お城はオーバーだった。
でも趣はあります。こんな感じ。
http://www.20works.jp/images/career/anken/J00000000974_sp_interview_img1.jpg

前は真っ白だったと思ったけど、勘違いかな・・・。
東陽町で免許書き換えの人は注目。
396NAME IS NULL:2006/03/31(金) 14:55:27 ID:???
鮫洲も府中も二俣川も行ったことあるけど、JDL知らんなあ
と思ったらそっちか
397NAME IS NULL:2006/03/31(金) 15:04:09 ID:???
上の写真の芝生、合成じゃないんだよ。
23区内だってのに、庭がでかいのなんの。
最初、迎賓館とかそういう建物かと思った。
398NAME IS NULL:2006/03/32(土) 19:26:13 ID:KBpIoo38
ウチの会社、MSアクセスで作ったパッケージソフトを500万で販売してる。
開発の人がいうにはぼったくりらしい。売り物にするならACCESSは有り得ないらしい
俺は営業だけど顧客からそういう不満は聞かない
俺はいつかは独立したいのだけどPostgreSQLは医療向けのソリューションに適しているのですかね?
本で調べてたらこれが一番良さそう。
ちなみに、個人情報保護法の関係でクラサバは不可能で、スタンドアローンな個々のシステムにDBエンジンを持たないといけないのでORACLEは難しいですね
399NAME IS NULL:2006/03/32(土) 20:12:23 ID:???
Access...
1万件超えてくるとダメでしょ。

うちは Oracle だったけど
値段はそのままに PostgreSQL に変更して
利益率を上げてるよ。ウマー。
400NAME IS NULL:2006/03/32(土) 21:22:44 ID:???
OracleをPostgresにしたら、詐欺だろw
401NAME IS NULL:2006/03/32(土) 23:39:39 ID:Gvf7E6wT
>>399
ええっ!そうかなあ。
俺の作らされたシステム、20万レコードも取引データがあるよ。
SEの親父が、COBOL→Accessという頭だから、どうにもならん。
何気に壊れるのが怖いから、毎回最適化して閉じたり、
マスターは別ファイルになっている。

でも、作り直しが入って、俺のプロジェクトになったら、
Postgresql+PHPで直すつもり・・・つか、もう既にいくつかの
テーブルがODBCでサーバへ行ってる。
402NAME IS NULL:2006/03/32(土) 23:41:14 ID:Gvf7E6wT
>>398
Orcaの事を指しているなら、あれは化石の7.2ベースだから、
俺は洟も引っ掛けたくないけど、向こうから迫ってくるんで、
酒用が無いかもしれない。
403NAME IS NULL:2006/03/32(土) 23:46:53 ID:Gvf7E6wT
> 個人情報保護法の関係でクラサバは不可能

は? だれに騙された?

 素人が扱う場合のWindows端末と、クローズド環境LANで
のC/Sで、リスクアセスメントをやってからそういうことを書けつの。
ネットワーク周りが弱いSIのいいそなこった。

これだから、素人は困るよ。
404NAME IS NULL:2006/04/02(日) 00:42:27 ID:???
>>398
http://www.microsoft.com/japan/sql/editions/express/default.mspx
ACCESSから移行するならこっちがいいかも
タダだし
405NAME IS NULL:2006/04/02(日) 00:45:13 ID:???
何で作ろうが私用を満たしていれば問題なし
逆にOracleだろうがpostgresだろうが使用を満たしていなければお話にならぬ
406NAME IS NULL:2006/04/02(日) 00:59:27 ID:???
>404
MSに取り込まれるよりも俺はポスグレかmysqlの方がお勧めだと思うがMSSQLは開発楽なんだろうな〜
でも、データベースはこれからどんどん値段下がるのかね?
ということは、開発者の給料もどんどん下がるのかね?何だか不安になってきたよ・・・・

>405
ふ〜ん

407NAME IS NULL:2006/04/02(日) 01:15:34 ID:???
運用に関しては、まだ商用の方が圧倒的なアドバンテージがある。
408NAME IS NULL:2006/04/02(日) 11:36:49 ID:???
ポスグレって呼ぶなぁ
409NAME IS NULL:2006/04/03(月) 11:27:59 ID:???
ポストグレよりはマシw
410NAME IS NULL:2006/04/03(月) 11:42:46 ID:???
グレテヤル
411NAME IS NULL:2006/04/03(月) 11:43:58 ID:???
ポストグレって言う人いるな〜
俺の「ス」やるから、頼むからちゃんと付けとけと思ってしまう。
412NAME IS NULL:2006/04/03(月) 12:07:40 ID:???
>>411
今日からネオ君て呼びますね
413NAME IS NULL:2006/04/03(月) 12:24:04 ID:???
follow the white rabbit.
414NAME IS NULL:2006/04/03(月) 13:45:01 ID:???
PostgreSQL だから、SQL を省略すると、Postgre でポストグレなんだよな、
FAQには、「ポストグレス」「ポストグレエスキューエル」「ポストグレスキューエル」「ポスグレ」
の例は出てるが・・・
415NAME IS NULL:2006/04/03(月) 13:50:46 ID:???
昔々、postgres95とかあったから、「ポストグレス」って呼ぶ人が多いように思う。
自分は「ポストグレスキューエル」だけど。
「ポストグレ」って呼ぶのは素人さん(お客さん)しか会ったことないかな。
416NAME IS NULL:2006/04/03(月) 13:58:47 ID:???
ingres の次だから postgres これ常識
ケツが SQL になったのはいつ頃からだったかな。
それ以降のユーザはポストグレだと思う。
417NAME IS NULL:2006/04/03(月) 16:33:46 ID:???
だからポストグレスでいんでしょ。
418NAME IS NULL:2006/04/03(月) 16:45:28 ID:???
厳密には、

パスゲェスィーケル

が正しいかな
419NAME IS NULL:2006/04/03(月) 17:12:19 ID:???
「ポストグレ」って言いかけて途中でやめた気持ち悪さがあるよなあ
ポストグレスに慣れてると
420NAME IS NULL:2006/04/03(月) 17:13:22 ID:???
だから俺の「ス」をやるからちゃんと付けとけと(ry
421NAME IS NULL:2006/04/03(月) 17:53:29 ID:???
>>418
パスゲシケル? かえってわからんわ! 何語やねんて言われるで。
>>420
おまえだれやねん!
422NAME IS NULL:2006/04/03(月) 18:01:53 ID:???
ここは間を取ってポストグレフってことで一つ
423NAME IS NULL:2006/04/03(月) 18:18:43 ID:???
ネイティヴだろw
424NAME IS NULL:2006/04/03(月) 20:14:24 ID:???
こなったら、リヌースのようにネイチブさんに発音してもらって音声ファイルをあぷして
もらえると乙。
425NAME IS NULL:2006/04/03(月) 20:22:04 ID:???
カタカナになった時点でどうでも良い。

PostgreSQL を ポテス と呼ぶスレ
426NAME IS NULL:2006/04/03(月) 20:45:40 ID:???
pg
ピージー
427408:2006/04/03(月) 21:05:08 ID:???
こんなに盛り上がるなんて感激
428NAME IS NULL:2006/04/03(月) 21:57:57 ID:V5RtvizP
そもそも、Postgreってどういう意味だろ?
MySQL とか MiniSQLとかはパーソナルユースっぽいね
429NAME IS NULL:2006/04/03(月) 22:02:33 ID:???
簡単な歴史ならシーラカンス本の最初に載ってる。
430NAME IS NULL:2006/04/03(月) 22:22:39 ID:???
416で正解じゃないの?
431NAME IS NULL:2006/04/03(月) 23:59:41 ID:???
あのシーラカンスは実はロボットだって知りませんでした。
432NAME IS NULL:2006/04/04(火) 01:23:01 ID:???
ロボットシーラカンスと言えばダライアスを思い出す。って俺もオッサンだな…
433NAME IS NULL:2006/04/05(水) 00:05:08 ID:???
>>424
こないだカンファレンスでJoshがきたときのmp3があるじゃん。
ポストグレスキュゥエルかポストグレスって言ってるよ。
434NAME IS NULL:2006/04/05(水) 00:15:55 ID:???
もうポスキューで良いよ!

PostgreSQL をポスキューと呼ぶスレ
435NAME IS NULL:2006/04/05(水) 00:43:34 ID:???
もうPQでいいじゃん。(うそ)
こう言ったネタは続くね。Linuxの時に経験済み。でも結構大事かも。

>>424 Thank U.
という事でやっぱネイチブてきには
ポスゲス の2音構成(アクセントはポ)

ポスゲキューエウの3音構成(アクセントはキュー 最後のLは無音に近い?)
って事になるんでしょうね。
436NAME IS NULL:2006/04/05(水) 00:45:20 ID:???
ポストグェーうぇっうぇっ
437NAME IS NULL:2006/04/05(水) 00:46:14 ID:???
Upps.....
s/424/433/
U know..
438NAME IS NULL:2006/04/05(水) 00:47:37 ID:???
      (ヽ、 _ヽ、  )\     ヽヽ
     _ヽ、     ⌒  ヽ、     \\
     \ ̄     __    )ノ     ヽヽ
    ∠⌒     / )    ⌒ヽ     | |
     )   / ゙̄- く       \   ノノ
    /  /ノ^)___)ノl       ヽ_//
   /   //(/ !_|_|       ヽ三ヽ
   レヘ  |j(/l_/    |ノヽ      |──)  
    ノ (/l_/  /⌒| | | |  !   |二 二ヽ
  /   |_/__| |  | -| | ノノ    ノ── 、)
  /    `───| | ノ -| |   |/(())   ヽ  
 /⌒) ∧    ヽ/_//  /j()ノ_   (()) i
    // ノ     |_// / ̄ ̄`\ (())  j
      (ヘ       ̄   |   ヽ   \   /
       )/(/) / ⌒ |⌒ヽ |\  /i\ /|   )ヽ
            |/      |    !  / | ノ |  ( (
     )ヽ           |  /  /  ( ((|   ) ヽ
    (  )           |  / /    ヽ|  (   )
    ) (      、    /  ) |ヽ、_ __ ノ   )  (
   (   ヽ    ((   /  /−、|        (   ヽ
(    )   )    )ヽ  ヽ_ノ |  |   ヽ   ノ     )
 )  (    (   ノ  )     |   |  ( (  (      (
 (_ ノ     )(  ( (    / /^)  ) )  )
               )  / / /  (  ( _ノ
                 (/__/// // // )
  .ト、.  /ヽ |\  /ヽ  /”゙ォv' .// // /
  |. ヽ./ | ヽ! .`、/  ヽ,/     '     /_  _
: --!          ,,,,, ,,,,,               ̄./
\      ,illllli,,,,,,,,, lllll llll               /
_ヽ    ,llllllllllllllll!' ,,,,,,,,,,,,,,,,,,,,             ̄ ̄ ̄''_,-
\    ,illll!' ,illll!'  !!!!lllll!!!!l゙`     ,,, ,,,     ,r-'''゙ ̄
  >   ゙゙゙゙' .,illlll゙    lllll|  llllllllll!!!!!  llll !ll! iiii,, <_.
/_   .,illlll'   ,,,,,,,llllll,,,,,,,,,,      ,,,iillll!!゙   >
 ̄/   ,llll!!'    lllllllllllllllll!!!l_      :ll!!!゙゙゜   <_
439NAME IS NULL:2006/04/05(水) 01:07:57 ID:???
>>435
いやほんと、まじで大事。
Mavenがいまいち流行らないのは
読み方がそこここでバラバラってのも大きいよな。
440NAME IS NULL:2006/04/05(水) 13:58:56 ID:???
Linux を何て読むか、なんてのが数年前に
441NAME IS NULL:2006/04/05(水) 14:16:58 ID:???
ぽきゅ〜
442NAME IS NULL:2006/04/05(水) 22:32:31 ID:???
Postgre を家で勉強するためのソフトとかないですか?
443NAME IS NULL:2006/04/05(水) 22:39:51 ID:???
mysqlの勉強をしたいならmysqlを入れればいいし、
PostgreSQLの場合も然り。
444NAME IS NULL:2006/04/06(木) 00:51:10 ID:???
>>442
釣りっぽいけど。
Linux か Windows を用意する Solarisでも可。なんでも可。:-)
PostgreSQLをインストルする
DBを作ってみる。
SQLで テーブルを作ってみる。
SQLで select ,insert,delete,update とかして遊んでみる。
SQLで commitとかrollbakとかして遊んでみる。
と ここまでやれば、あとはクライアントとのI/F
をいろいろ変えて遊んでみると幸せになれるでしょう。
勉強じゃなくていろいろいじって遊ぶのが大事かと。
445NAME IS NULL:2006/04/06(木) 06:36:03 ID:???
う〜んまぁそうですよね
知識が全然ないですが調べながらやってみます
446NAME IS NULL:2006/04/06(木) 10:07:20 ID:JbhYYUUs
postgresでは主キーをtext型にしてもよいものでしょうか?
447NAME IS NULL:2006/04/06(木) 10:21:36 ID:???
ポックキュ
448NAME IS NULL:2006/04/06(木) 13:12:50 ID:70rk/E0E
ここで真面目な質問しても、良いものでしょうか?
テンプレ見ても書いてなかったもので ・・・
449NAME IS NULL:2006/04/06(木) 13:31:04 ID:???
俺で答えられる範囲なら何でも答えてやるぞ。

俺は42歳、独身、素人童貞。
初体験は21の時、地元のスナックのママにお金渡してスナックの2回で。
23歳で某地帝を卒業後、シンクタンクに就職。
統計ソフトなどを経験し、データベースのプロジェクトに加わる(事実上の左遷)
シンクタンクを退職、現在求職中
450NAME IS NULL:2006/04/06(木) 13:40:51 ID:???
>>449
後半は関係ないぞ
451448:2006/04/06(木) 13:52:47 ID:70rk/E0E
>>449
その左遷されたときの経験が生かせるチャンスかも知れません。

postgresql で C言語で記述するユーザ定義関数を作っています。
pgsql 側と C関数側で、ヒープへのポインタをやり取りする方法
     pgsql → C関数 : 引数にて
     pgsql ← C関数 : 戻り値にて
って、ありますか?
C関数側で palloc() & repalloc() & そのヒープへのデータ操作 を行ない、
pgsql に渡したいのでつ。
452NAME IS NULL:2006/04/06(木) 23:29:40 ID:???
>>450
大半では。。。
453NAME IS NULL:2006/04/07(金) 09:55:39 ID:O1sQuHCO
SQLで直接メモリ空間にアクセスは出来ないお
Postgre を改造すれば出来るお
454NAME IS NULL:2006/04/07(金) 10:37:34 ID:???
>>453
そんなおとるしい質問だったのですか。
正直さぱーりわかりませんでした。
うーむ未熟物 出直してきます。
455NAME IS NULL:2006/04/07(金) 10:47:35 ID:IwmuPLeT
>>451
なんでDBを操作するのにヒープが関係するんだ?
DB自体を作っているのなら、この板には該当するスレすらないと思う。

>>451がDBを利用する立場であれば、何かDBをさっぱりわかってなさそう。
DOSの時代に直接ハードを叩いていたような、
すべてを自分で操作しないと気に食わない人って感じがする。
456448=451:2006/04/07(金) 11:13:46 ID:???
>>455
ごめんね。 最終的な目的を書くべきだったね。
ユーザ定義の集約関数を作りたい。 具体的には、percentile() ね。 メジアンとか
中位数、あるいは第1四分位と第9十分位とかって言葉、ご存知ですか? これらを
返す関数でつ。
group by でグループ化されたレコードのあるフィールドを、( sfunc() にて ) ソートしながら配列に格納し、
グループ内全部のフィールドをソート&格納し終わったら、( finalfunc() にて ) 例えば中位数 ( メジアン )
なら、中央の値を集約値として返すような関数を作りたいんだ。
「 このソートしながら配列に格納 」とかが、SQL で書いたら大変そうだし出来たとしても重そう。
だから、C言語関数でやりたかった。
その後調べてみたら、C関数側では PG_GETARG_POINTER や PG_RETURN_POINTER を
使えば SQL 側とのポインタのやり取りは出来そうなことが判った。
でも SQL 側でポインタを扱うデータ型がない ・・・ orz
もう少し調べてみまつ & 引き続きレスお待ちします。
457NAME IS NULL:2006/04/07(金) 11:29:49 ID:???
PostgreSQL=プゲラワロス
458NAME IS NULL:2006/04/07(金) 11:33:29 ID:IwmuPLeT
>>456
JavaからしかDBを扱ったことないから、C言語でDBからデータを取得する方法は知らないけど。

1.ソートまではSQLに記述する。
2.データ数をカウントしておいて、中位数の位置Aを算出。
3.データを取得するときに、ループさせて1レコードずつ取り出すことになるだろうから、
  位置Aにきたら、そこが中位数。

ではダメ?

どっちにしても、ソートはSQLに任せたほうが早いと思うよ。
459448=451:2006/04/07(金) 13:04:56 ID:???
>>458
レス、さんくす。
その方法だと、集約関数にはできなさそうですね。 こんな風に使いたかったんだが ・・・
製品名とその実売価格 ( 販売店によってまちまちな ) のテーブル t があったとして ( kakaku.com みたいな )

select
製品名,
avg(実売価格), -- 平均売価
percentile(実売価格, 0.25), -- 第1四分位 売価
percentile(実売価格, 0.5), -- 中位数(メジアン)売価
percentile(実売価格, 0.75) -- 第3四分位 売価
from
t
group by
製品名
;

こんな風に使える ユーザ定義集約関数 percentile() を作りたかったんだが。
pgsql で配列のソートを一発でやる方法ってありますか?
460NAME IS NULL:2006/04/07(金) 13:07:15 ID:???
>>452
ボケたかったのですorz
461NAME IS NULL:2006/04/07(金) 13:09:42 ID:???
素直にCREATE AGGREGATEしろよ
462NAME IS NULL:2006/04/07(金) 13:16:12 ID:???
>>456
外しているかもしれないけど。
byteaを使ってSQLとC関数とのやり取りをしたことはある。
463448=451:2006/04/07(金) 13:29:26 ID:???
>>461
素直に CREATE AGGREGATE しようと考えてるんですよ。

CREATE AGGREGATE percentile (
   BASETYPE = double precision,
   SFUNC = post, -- ソート&格納するC関数
   STYPE = pointer, -- ポインタ型の集約状態値(配列のアドレスを保持するため ・・・ これができない)
   FINALFUNC = get -- 配列から第nX分位数を計算して取り出すC関数
   INITCOND = NULL -- 集約状態値の初期値(NULLポインタ)
);

んで、post() と get() は、

float8 *post(float8 *p, float8 f)
{
   p が NULL ポインタなら palloc()、NULL でないなら repalloc() して
   1データ分のエレメントを確保 ( 拡張 )
   昇順並びとなるように、配列をシフトして f を挿入。 で,

   return(p);
}

float8 get(float8 *p)
{
   float8 f;

   配列 p を処理して目的の数値を得、その数値を f へ

   return(f);
}
464NAME IS NULL:2006/04/07(金) 13:40:57 ID:???
STYPE は一時変数じゃなかったっけ?
だから、pointer[]とするしかないんじゃない?
465448=451:2006/04/07(金) 13:46:20 ID:???
皆さん、レスありがとう。
その後色々調査してみて、展望が見えてきました。
も少し実験して、うまくいったら報告します ( 聞きたくもないですか、そうですか )。
466NAME IS NULL:2006/04/07(金) 14:09:54 ID:???
聞きたい
467448=451:2006/04/07(金) 17:42:47 ID:???
禿しく実験した結果、pgsql と C言語関数との間で、ポインタのやり取りはできる。
C言語関数のなかで確保したヒープは、その関数をぬけて pgsql に帰ってきたのちも
維持される。
pgsql 側でポインタを扱うデータ型は、互換性に問題を残すものの、32bit 整数型である
integer でOK。
C言語関数側の PG_GETARG_xxx と PG_RETURN_xxx について、xxx の部分は
INT32 でも POINTER でも DATUM でもOK。

実は、このコードがうまく動かなかったので、ポインタの受け渡しに問題があるものと
悩んでいたのだが、問題は別のところにあった → 次レスにて
468448=451:2006/04/07(金) 17:52:15 ID:???
palloc() って、malloc 互換と思って使ってると、とんでもないことになるな。

   void *a, *b, *c;
   a =(void *)palloc(10);
   b =(void *)palloc(10);
   c =(void *)palloc(10);

このコードで返されるヒープへのポインタ a b c は、皆同じ値。 同じ場所を指して
いた。 だから、自分では3つのヒープを確保して集約するグループ毎に使い分けている
と思っていても、実は同じメモリを使って上書きしてしまう。
試しに malloc() を使うように変えてみたところ、期待したとおりの結果が得られた。

SFUNC では malloc() & realloc() で、集約対象データを集め、FINALFUNC で それら
データから集約結果を計算したあと free() するようにしたのだが ・・・ このままだと
トランザクションが何らかの原因でアボートした場合、ヒープを解放できない。
さて、どーしたもんかな。
469NAME IS NULL:2006/04/07(金) 18:20:33 ID:???
void *a, *b, *c;
a =(void *)palloc(30);
b = a+10;
c = a+20;
470468:2006/04/07(金) 18:23:39 ID:???
↑ いや、ちょっと違うかな。
正確には、palloc() でヒープを確保したあとその先頭アドレスはセーブしておいて
いったんC言語関数を抜け、再び呼ばれてC言語関数に入ってきて palloc() を行なうと、
セーブしておいた前回の palloc() のときのアドレスと同じアドレスが返される、ってこと。
471NAME IS NULL:2006/04/07(金) 18:50:38 ID:???
a = palloc(10);
if (a <= old) {
a = repalloc(10+old-a) + 10;
}
old = a;
472NAME IS NULL:2006/04/07(金) 18:52:20 ID:???
2行わすれてた
static void *old = NULL;
void *a;

a = palloc(10);
if (a <= old) {
a = repalloc(10+old-a) + 10;
}
old = a;
473NAME IS NULL:2006/04/07(金) 22:22:38 ID:???
>>468
そんなこと無いと思うよ。コンパイラの最適化のワナとかかな。
ただ、集約関数に使おうと思ったら、普通のメモリコンテキストじゃダメだね。
ちょっと調べてみるね。
とりあえず STYPE=float8[]じゃダメなんだっけ?
474NAME IS NULL:2006/04/07(金) 22:29:37 ID:???
ああ、いいサンプルがあるじゃん。これならplpgsqlでも書けそうだよ。
http://www.postgresql.jp/document/current/html/xaggr.html
475473:2006/04/07(金) 22:57:47 ID:???
あ、すまん。473は470を見ずに書いてました。そういう意味ね。
要するにpallocって、それなりのタイミングで自動的にメモリ開放しちゃうのよ。
476NAME IS NULL:2006/04/07(金) 23:20:25 ID:???
中央値くらいファンクション作らなくても、
SQLでサクッといけると思うんだがなぁ
477470:2006/04/08(土) 00:29:26 ID:???
>>475
やっぱりそうなんだね。 おそらくC言語関数のコンテキストを抜けると、メモリを開放する
んだろうな。 だからトランザクションがアボートしても、メモリリークの心配がないんだな。

>>476
作りたいのは中央値だけの集約関数じゃないんだ。 中央値でも、第1四分位でも、第9十分位
でも、パラメータ次第で変更可能な汎用的な集約関数。 MS-Excel 持ってたら、そのヘルプで
「 percentile 」 を調べてみそ。 percentile(配列,ratio) において、
   ratio:0.1,0.2,・・・,0.9 で、第1十分位 〜 第9十分位
   ratio:0.25,0.75 で、第1四分位と第3四分位
   ratio:0.0,0.5,1.0 はそれぞれ、min(),中位数 ( メジアン/中央値 ),max()
この percentile() と同等な、posgresql のユーザ定義集約関数を作りたいんです。
478473:2006/04/08(土) 01:42:12 ID:???
うん。で、色んなコンテキストがあって、一行毎に開放するのもあれば
トランザクション単位のもあれば、1つのSQL単位のもある。
出来なくはないけど、>>459 みたいな呼び出し方だと、
三つのpercentile()がそれぞれ値を内部で保持することに
なるから、集約関数でやるのはあんま効率良くないよ。
count(*)して件数出してからカーソル使うかlimit/offsetじゃダメ?
479NAME IS NULL:2006/04/08(土) 16:51:47 ID:???
>>478 アドバイス、さんくす
実は malloc/free を使ってもう完成してしまったんだが、トランザクションアボート
の対策ができていない。 また、>>477 の 「 raio 」 をどうやって与えるか、も
要検討課題。 正しい動作 ( 演算 ) はできているんだが ・・・
そのうえ >>478 が指摘してくれたとおり、同じフィールドに対して ratio を変えて
複数の集約を行なう場合、同じソート配列が複数作られてしまい、リソースを無駄に
消費する問題にも気付いた。
もっと検討してみます。 ありがとう、レスくれた皆さん。
480479:2006/04/10(月) 08:04:54 ID:???
>>479 ですけど、もう少し粘着させてください。
質問その1:
select func1(), func2(), func3() from table;
で、func1() 〜 func3() が実行される ( 呼び出される ) 順番には、決まりが
あるのでしょうか? 一般的には、左から あるいは 上から 順番に実行されそうな
気がしますが、それは保証されていますか?

質問その2:
トランザクションがアボートしたときに、ユーザ定義可能な、自動的に呼ばれる
「 後始末用の 」 関数ってありますか?
481473:2006/04/11(火) 01:17:31 ID:???
はいよ。
どっちもナシです。
1は
http://www.postgresql.jp/document/current/html/sql-expressions.html#SYNTAX-EXPRESS-EVAL
2は、やっぱ適切なコンテキストを使うしか無いと思う。
どんな風に実装したか知らんが、
http://www.postgresql.jp/document/current/html/xaggr.html
の最後にちょっと書いてあるみたいに、引数を書き換えちゃうって
手が使えるかもしれない。ちなみにint8inc()は
src/backend/misc/adt/int8.cにあるよ。
482NAME IS NULL:2006/04/11(火) 01:20:41 ID:???
Windows の psql から Linux の PostgreSQL に接続するにはどうしたら良いのでしょうか?
483NAME IS NULL:2006/04/11(火) 11:37:12 ID:???
コマンドプロンプトから、
psql -h linuxのipアドレス database

でいける。
484NAME IS NULL:2006/04/12(水) 11:16:00 ID:z/Y6FoA2
問題分析のため PostgreSQL の JDBC ドライバ (7.4) のソースを探しているのですが
どなたかご存知でしょうか?公式サイトにはなぜかここらへんだけ抜けてるのですが。
http://jdbc.postgresql.org/download.html#jdbcselection
485NAME IS NULL:2006/04/12(水) 11:55:02 ID:???
>>484
7.4なら本体のソースに含まれてないかい?
486NAME IS NULL:2006/04/12(水) 12:00:28 ID:???
よく見たら CVS リポジトリから直接取ってこれるようなことが書いてあったのでさっきから
やってみてるけど、何かポート開いてないみたいだなぁ。Web Interface から入っても
「Site Down for Maintainance」 なのでマンテナンス中かいな。
http://jdbc.postgresql.org/development/cvs.html#webcvs

>>485
おー、そういえばあったような。ちょっくらそっちを探してみます (`・ω・´)
487NAME IS NULL:2006/04/12(水) 14:47:48 ID:???
本体のソースの中に発見しました。どうもありがとうございます。
7.4 の JDBC ドライバで BYTEA 型を扱うのは難ありみたいですね。
調べた結果を載せておきます。
http://moyolab.blog57.fc2.com/blog-entry-36.html
488NAME IS NULL:2006/04/12(水) 15:09:47 ID:???
>>487
かなりGJ!
489NAME IS NULL:2006/04/12(水) 15:49:27 ID:???
やべー、昔作ったところ7のドライバーでsetBinaryStreamやってる。
ファイル200kくらいだから問題ないかな。
490NAME IS NULL:2006/04/12(水) 17:11:39 ID:???
>>487
おぬしを監視させてもらう
491NAME IS NULL:2006/04/12(水) 22:04:52 ID:???
>>487
恐れいります。
492NAME IS NULL:2006/04/12(水) 23:58:04 ID:???
なんか 8.1 の JDBC ドライバ使っても取り出しの時に全バイナリを
一旦メモリに格納しようとするらしいことが分かりました。保存できても
取り出しできなきゃ意味がないっつーの…
493NAME IS NULL:2006/04/13(木) 16:27:03 ID:???
たびたびすみません。BYTEA 型 + getBinaryStream()/setBinaryStream() ではなく
OID 型 + getBlob()/Blob#getBinaryStream()/Blob#setBinaryStream() を使うようにしたら
参照・更新ともに想定内の動きになりました。今 Blog にまとめている最中です。
494NAME IS NULL:2006/04/13(木) 19:12:59 ID:agIcTOBF
半期の日付範囲の検索条件をSQLに含めたいのですが、
日付関数を駆使してPostgresだけで現在の日時から半期の範囲を求めることは
可能でしょうか?

生成したいSQLのWHERE句は以下のようなものです。
WHERE date between '2006-04-01 00:00:00' and '2006-09-30 23:59:59'
(今日が2007/2/1だったら) WHERE date between '2006-10-01 00:00:00' and '2007-03-31 23:59:59'
495NAME IS NULL:2006/04/13(木) 19:52:12 ID:???
CASE文を駆使する。

大体、半期って言ったって4月10月じゃない会社もあるんだから、一発で取り出すのは無理。
ちなみに>494の文だと'2006-09-30 23:59:59.1'が範囲外になるかもな。
496NAME IS NULL:2006/04/13(木) 20:13:59 ID:???
OID を使って Java で BLOB を扱う方法をまとめた。JDBC の標準 API のみで大丈夫そうだ。
これからマルチスレッド環境で作りこんでみるけど、何かあったらまた報告に来ます。
http://moyolab.blog57.fc2.com/blog-entry-38.html

ところで lo_creat() で作ったオブジェクトってどういう空間に保存されるの? そもそも OID 型
ガンガン使って大丈夫なのかな?
497NAME IS NULL:2006/04/14(金) 14:47:12 ID:???
to_charを使う>>494
498NAME IS NULL:2006/04/14(金) 17:54:54 ID:???
>>496
 数年前の話だから参考にはならない(上に、記憶も曖昧だ)が、OID使った場合、
実体は一つ一つが別のファイルだった、という実装だった。
NFS先に置いておいたので、死ぬほど遅くなった経験がある。
単に取り出すだけならいいだろうが、多数の取り出しが必要だとよく考えて
設計しないと性能が出ないかも。
今の実装は知らないので、話半分で。
499NAME IS NULL:2006/04/14(金) 19:23:37 ID:???
>>496
> ところで lo_creat() で作ったオブジェクトってどういう空間に保存されるの? 

pg_catalog.pg_largeobjectテーブル

> そもそも OID 型ガンガン使って大丈夫なのかな?

32bitカウンタなので、使いすぎると枯渇して重複エラーになる。そんなに使わなければ大丈
夫だが。

基本的にbytea型と比較して入出力のスピードとかメモリ効率で勝るのがloの利点だが、
登録に通常のSQL形式で出来ないとか検索の不自由さとか削除更新時とかにlo_unlink()
しないといけない手間とか面倒なので、どれを使えばいいかは微妙なんだよね。

ちなみにoidというか旧来のラージオブジェクト使う場合はcontrib/loも参照のこと。便利な
トリガとか入った専用の型が提供されているので便利だし、ODBCとかだとcontrib/lo決め
うちになってる。

>>498
> 実体は一つ一つが別のファイルだった、という実装だった。

数年前どころが、PostgreSQL以前からそんな実装だったことは一度もないのだが・・・
テーブル一つ1ファイルになっているのと勘違いしてない?
500NAME IS NULL:2006/04/15(土) 15:29:57 ID:???
>>498-499
レスどうもです ヽ(´ー`)ノ
システムカタログの pg_largeobject を調べてみたところ、LOB を 2kB ごとにブッた切って
BYTEA 型として管理しているようでした。2kB は C のソース上で定義されてる定数なので
これをチューニングする場合はリコンパイルが必要みたいですね。たしか DB2 は
1 LOB 1 ファイルにできるオプション持ってました。

この OID 型ってテーブル定義の時に WITH OIDS で付ける OID と同じシーケンス使ってる
ようですね。枯渇を防ぐために全テーブル WITHOUT OIDS にしときます。

LOB だけ個別に lo_unlink() しなきゃいけないのは面倒ですね。ブログにも載せましたが
とりあえず DELETE 文のサブクエリーに仕込んで 1 発削除が楽かなと思いました。
DELETE FROM X WHERE ID=0 AND (SELECT lo_unlink((SELECT lobid FROM X WHERE ID=0)))=1;

ところでこの pg_largeobject がやたら大きくなりそうなので別テーブルスペースに配置
したいんですが、ALTER TABLE pg_largeobject SET TABLESPACE ほにゃらら、と
やるしかないんですかね? ドキュメントにはシステムカタログ更新すべからず、とあるんですが。
まぁ最初からそのパーティションで initdb しろよという話ですが。
501NAME IS NULL:2006/04/15(土) 23:17:11 ID:???
>>499
>>498は正しい。7.0あたりまではラージオブジェクトは
1つの独立したファイルだった
502NAME IS NULL:2006/04/17(月) 19:55:17 ID:???
text 型に 1,000 や 30,000 が入っているカラム a があります。
この a を数値順に並べるにはどうですればいいでしょうか。
# text 型のままでお願いします。
503NAME IS NULL:2006/04/17(月) 20:01:17 ID:???
>>502
全てのレコードをゼロパディングする
504NAME IS NULL:2006/04/17(月) 20:18:31 ID:???
>>503
ゼロパディングする何かいい方法ありますか?

PostgreSQL に sprintf() みたいな関数があるといいのですが
ttp://www.postgresql.jp/document/current/html/functions.html
では見つけられませんでした…。

ただ、ここを見ていて replace(a, ',', '') したものを
int にキャストすればいいのでは、と思いつき、

replace(a, ',', '')::int

としてみましたが invalid input syntax for integer: "" と言われてしまったorz
505NAME IS NULL:2006/04/17(月) 20:32:39 ID:???
>>504
別に言われないですけど。
8.1.3 ですが。
506NAME IS NULL:2006/04/17(月) 20:48:22 ID:???
すいません。7.4.12 です。
# 確かに 8.1.3 は言われませんね。
507NAME IS NULL:2006/04/17(月) 21:01:02 ID:???
ブランクや NULL なら 0 になるように CASE WHEN で組めば?
508NAME IS NULL:2006/04/17(月) 21:02:24 ID:???
つまり ORDER BY (CASE WHEN num IS NULL OR num='' THEN 0 ELSE replace(num,',','')::int)
509NAME IS NULL:2006/04/17(月) 21:05:27 ID:???
最後に END 入れ忘れた orz
510NAME IS NULL:2006/04/17(月) 22:28:48 ID:???
なるほど。ブランクや NULL でエラーが出ていたのですか。
>>508 でばっちりでした。ありがとうございます。
511NAME IS NULL:2006/04/21(金) 03:20:55 ID:YO5ykByU
PostgreSQL で Oracle の DUAL のようなテーブルはありませんか?
512NAME IS NULL:2006/04/21(金) 09:51:46 ID:???
from句省略
513NAME IS NULL:2006/04/21(金) 14:12:26 ID:???
>>511

create or replace view dual as select current_timestamp as sysdate;
514NAME IS NULL:2006/04/21(金) 14:22:03 ID:YNK627Tz
>>492
JDBCの挙動って7年前からちっとも代わってないな。
オイラの身の回りに合った貧弱なマシンで使えないんだよその手法だと。
515NAME IS NULL:2006/04/21(金) 15:27:55 ID:???
>>513
うまい。笑いました。

けどDUALはSYSDATEを取るものじゃないので
Oracle仕様に則ると、
create or replace view dual as select 'X' as dummy;
ですな。
Oracleで
desc dual とか
select * from dual ってやるとわかるよ。

sysdateって使いたければ上のと合わせてくれい。
516NAME IS NULL:2006/04/21(金) 16:15:30 ID:???
dualのダミーテーブルを使うテクニックって昔からあるし。
笑うほどのことでもないな。
517NAME IS NULL:2006/04/21(金) 18:33:32 ID:???
ところでdualってどこから出てきた名前なんだろう?Oracleスレのほうが適当かな?
518NAME IS NULL:2006/04/21(金) 18:51:33 ID:???
OracleからPostgreSQLに移植するときのテクニックとしてはこのスレでもあり。
519NAME IS NULL:2006/04/21(金) 21:57:50 ID:???
馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。
馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。
馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。
馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。
馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。
520NAME IS NULL:2006/04/21(金) 22:05:39 ID:???
馬鹿なうえに師匠も友達も居ないから2chで質問に対するレスをするわけで。
521NAME IS NULL:2006/04/22(土) 00:21:21 ID:???
522NAME IS NULL:2006/04/24(月) 21:47:10 ID:ZYj+T9mN
下記のようにgroup byで集約した後、各グループごとに1件だけを抽出したいのですがどんなSQL文書けばいいのでしょうか。

例:

元テーブル
id date
01 2005/10/10
02 2006/1/1
01 2005/11/5
01 2005/10/28
02 2005/10/13



id date(最新の1件だけ抽出)
01 2005/11/5
02 2006/1/1

523NAME IS NULL:2006/04/24(月) 22:11:15 ID:???
>>522
速質問する気になったな。だが、ここで聞くのはやめとけ。
↓のほうが親切だからそっちでどうぞ。

【帰ってきた】SQL質疑応答スレ 2問目
http://pc8.2ch.net/test/read.cgi/db/1141622643/
524NAME IS NULL:2006/04/24(月) 22:12:07 ID:???
速質問する気になったな。

よく質問する気になったな。
525NAME IS NULL:2006/04/25(火) 00:21:55 ID:???
>>522
maxでいいんじゃね
526NAME IS NULL:2006/04/27(木) 10:55:31 ID:6t4XS9V+
postgres で特定のDBしか見れないユーザーを作成したいんですが、どうすればいいんでしょうか?

ヒントだけでも教えていただければ、幸いです。
527NAME IS NULL:2006/04/27(木) 11:17:37 ID:???
pgaccess俺が君に贈れる言葉はそれだけさ
528NAME IS NULL:2006/04/27(木) 11:26:00 ID:???
529NAME IS NULL:2006/04/27(木) 13:27:08 ID:???
PostgreSQL に来てる接続全部を強制的に切断するにはどうすれば良いですか?
DB2 で言う FORCE APPLICATIONS ALL みたいなの。
530NAME IS NULL:2006/04/30(日) 15:33:05 ID:mEmNp+Rq
今ドキュメントの VACUUM んとこ読んでるんだけど、PostgreSQL のレコードって
VACUUM 実行しないと物理的に削除されないのけ?
531NAME IS NULL:2006/04/30(日) 19:10:39 ID:???
>>530
古いバージョンはな
532NAME IS NULL:2006/04/30(日) 21:14:11 ID:???
>>531
新しいのも自動でやってくれるだけだろ。
533NAME IS NULL:2006/04/30(日) 23:49:31 ID:???
PostgreSQL は追記型なので UPDATE/DELETE は
vacuum するまでレコードに残ってますよ。
534NAME IS NULL:2006/04/30(日) 23:54:20 ID:???
「レコード」が残ってるわけじゃないだろ・・・と。
535NAME IS NULL:2006/05/01(月) 03:12:32 ID:???
ありがとござんす。8.1 だと autovacuum ってのが裏でテーブルの更新頻度見ながら
やってくれるみたいですね。
536NAME IS NULL:2006/05/03(水) 22:34:05 ID:H/0DTq7n
本日も含めて蓄積されたデータの過去10日分の平均を求める為に
select
  コード,日付,本日値,
  (select avg(本日値) from データ as S where S.コード=A.コード and S.日付 <= A.日付 order by A.日付 limit 10) as 平均
 from データ as A;

みたいなSQLを書きたいのですがサブクエリでは order by が書けないようですね

単純にサブクエリで並び替えが出来れば1本で解決するのですが
仕方なくワーク用テーブルをcreate table temp で書いて凌いでいます

何かスッキリとした良い方法があるでしょうか?

因みに、limit 10 でデータ件数を絞っているのは、コードによってデータが存在しない日がある為です
537539:2006/05/03(水) 22:41:55 ID:H/0DTq7n
select
  コード,日付,本日値,
  (select avg(本日値) from データ as S where S.コード=A.コード and S.日付 <= A.日付 order by A.日付 desc limit 10) as 平均
 from データ as A;

ちょっと違ってました、直近から10件なんで order by の所は desc です
538536:2006/05/03(水) 22:42:32 ID:H/0DTq7n
>>537

名前 539 じゃなくて 536 でした(汗
539NAME IS NULL:2006/05/04(木) 01:47:45 ID:???
select
  コード,日付,本日値,
  (select avg(本日値) from データ as S where S.コード=A.コード and A.日付 - interval '10 day' <= S.日付 and S.日付 <= A.日付) as 平均
 from データ as A;

とかじゃまずいの?
540NAME IS NULL:2006/05/04(木) 10:54:28 ID:???
>>539
最初にそのパターンが出てこないってことは「過去10日分」が、連続した10日分じゃないのでしょう。
データが存在する10日分じゃないのかな?
541536:2006/05/04(木) 12:32:05 ID:unA3PyxH
>>539
書き方が悪かったようでごめんなさい

“本日も含めて蓄積されたデータの過去10日分の”ってのは
要するに >>540さん が書かれておられるように過去10件分のことです


こーいった処理は結構あると思うのですが、
皆さんどうされておられるのでしょうかね、
例えば、移動平均や累計等の値を求める時に
プログラム側で態々書かなくてもSQLでサクット集計できた方が
楽な気がするのですが・・・

542NAME IS NULL:2006/05/04(木) 17:45:44 ID:???
>>536
SQLまじめに勉強してください
543NAME IS NULL:2006/05/04(木) 23:16:04 ID:???
>541
じゃあ、日付じゃなくて通し番号つければいいじゃない。

S.通し番号 BETWEEN A.通し番号-10 AND A.通し番号
544NAME IS NULL:2006/05/04(木) 23:16:56 ID:???
もちろん、コードごとの通し番号ね。
545NAME IS NULL:2006/05/05(金) 02:45:46 ID:lKBJsAdE
その手の処理はpl/pgsqlだろ
SQL真面目に勉強しても解決しないよ
546NAME IS NULL:2006/05/06(土) 18:48:50 ID:???
通し番号に頼ると欠番ができないように管理するのが大変かもよ。
途中をひとつ削除するとそれ以降を全部詰めないといけない。
547NAME IS NULL:2006/05/07(日) 17:15:27 ID:79J3zSF5
ワークのテーブルを1つ作って通しを生成すりゃいいんじゃないか?
>>545が言うようにplpgsqlかプログラム側でやるべきだね
548NAME IS NULL:2006/05/09(火) 11:05:55 ID:???
http://www.sraoss.co.jp/personnel/
ちょっと技術指導受けてコイよ
549NAME IS NULL:2006/05/13(土) 03:19:55 ID:???
にしても、複雑なSQL書いてなるべくSQLだけで済ませようとする人と、
SQLは単純に書いてプログラム側でちょっとしたことをやる人とに
二分されるよなぁ。
550NAME IS NULL:2006/05/13(土) 07:43:26 ID:???
3層C/Sの考え方からすれば、なるべくロジックはアプリ側でやるのが基本かな。
もちろん、ケース倍ケースではあるけど。
551NAME IS NULL:2006/05/13(土) 08:35:18 ID:???
「ロジック側で欲しい形」でデータを引くのが理想。
たとえばSELECT * で読んで1つのカラムしか読まないとか
結果セットを大きく取りながら要らないレコードはスキップするとか
そういうのは無しだね
552NAME IS NULL:2006/05/13(土) 09:42:39 ID:???
>>551
SELECT * は今はO/Rマッピングとかあるから
事情は変わってきてるけど、
いらないレコードスキップはなあ。
パフォーマンスが無茶苦茶悪くなって調べたら
リーダーさんがそんな事やってて殺意を覚えましたよ。
553NAME IS NULL:2006/05/13(土) 14:39:07 ID:???
ファイルリードの感覚でDB使ってる人間がそうなるよな。
554NAME IS NULL:2006/05/13(土) 15:10:31 ID:???
>>553
((((;゚Д゚)))ガクガクブルブル
555NAME IS NULL:2006/05/13(土) 22:52:48 ID:???
あといまは3層式だから実際にデータが流れるのはDBと近いところにあるAP鯖だからな
select *は昔ほど問題にならないばかりかメリットもあるからね
556NAME IS NULL:2006/05/14(日) 05:11:36 ID:???
>>549
俺はプログラム側でやる方なんだけど、実行時間測定するとSQLで済ませた方が
圧倒的に早い。なので最近は改心してSQL勉強中
557NAME IS NULL:2006/05/14(日) 10:44:13 ID:???
俺はSQL側でやる方なんだけど、SQLが複雑になるのを避けたい気持ちもある。
SQLで済ませた方が早いんだけど、O/Rマップ利用とのバランスに日々悩んでいる。
558NAME IS NULL:2006/05/14(日) 10:50:58 ID:???
>>553
COBOLerとかCOBOLerとかCOBOLerにその傾向が強いな。

あとCOBOLerとかもひどい。
559NAME IS NULL:2006/05/14(日) 11:00:24 ID:???
AccessやVB方面もかなりすごいよ

nextをひたすらしてとか平気でやるやつ多い

ネットワーク経由でやるやつとかバカハブ時代はそれだけでネットワークがパンクしてたな
接続先がOracleとかでも平気でそういうことやるから・・・
560NAME IS NULL:2006/05/14(日) 11:11:51 ID:???
select *
なんて、AP−DB間でやるメリット無いだろ。
561NAME IS NULL:2006/05/14(日) 13:31:33 ID:???
>>556
といってなんでもかんでもDBでやろうとするとDB鯖の負荷が増えるので
臨機応変だよなぁ。
Web鯖の負荷分散は簡単だけど、DB鯖の負荷分散は面倒だし
562NAME IS NULL:2006/05/14(日) 15:32:50 ID:???
>>561
それって、どっちでやってもトータル負荷が同じ、っていう前提が必要な気がする。
WebSv側でやるとDBSv側でやるよりもトータル負荷が掛かるんだったら、
一概にWebSv分散で回避ってわけにもいかないような。
563NAME IS NULL:2006/05/14(日) 15:50:47 ID:???
>>562
意味不明
564NAME IS NULL:2006/05/15(月) 19:52:27 ID:???
COBOLerには
マングースがいいと思います
565NAME IS NULL:2006/05/15(月) 23:23:47 ID:???
>562
DB鯖は増やすのが比較的困難。
Web鯖は増やすのが比較的容易。
わかる?
566NAME IS NULL:2006/05/15(月) 23:26:53 ID:???
>559
俺がい見た一番酷い例は、数万のデータを全部DB(Oracle)から取得して
PHPで処理をしながら、目的のデータが見つかってもbreakすらしてないのがあった。
いくら研究所内という閉じた空間で専用の数GhzのCPU数GBのメモリを積んでて
(ちなみにHDDはもちろんTB単位)それを少人数で使うだけだからって、限度があるだろうと。
その設備費用をこっちに回せと。
567NAME IS NULL:2006/05/16(火) 04:09:33 ID:xWElNPPM
>>536
もう遅いと思うが、その場所にORDER BY/LIMIT書いでも、
集約関数の結果をORDER BY/LIMITすることになるからダメだよ。
サブクエリ内のFROM句にもうひとつサブクエリが必要だね。
568NAME IS NULL:2006/05/17(水) 14:14:25 ID:imgPgdgK
SQLite での UNIQUE PRIMARY KEY みたいな指定はできますか?
勝手に1,2,3, … って増加していくんだけど、DELETE で空きができたら
その番号を使用する、みたいな。
569NAME IS NULL:2006/05/18(木) 02:42:36 ID:???
世界的に見るとなんでPosgreSQLってこんなに人気ないの?
日本以外じゃ、MySQL vs Firebird >>>>>>>>>>>>>>>>> PostgreSQLなんだね。
570NAME IS NULL:2006/05/18(木) 14:12:37 ID:???
日本人は馬鹿だから
571NAME IS NULL:2006/05/18(木) 14:27:58 ID:???
このスレとあのスレを見れば一目瞭然。
2ちゃんのPostgreSQLユーザーはひどいのが多い。
572NAME IS NULL:2006/05/19(金) 01:21:32 ID:???
文字列を || で結合するとき、もし null があったら
空白っていうか消えちゃうのね

573NAME IS NULL:2006/05/20(土) 00:07:21 ID:???
nullだけはSQLで特殊扱いだからな
文字ですらないわけだから当たり前

ただそのへんは環境依存
574NAME IS NULL:2006/05/20(土) 07:26:06 ID:???
我々はnullだ。お前達を同化する。抵抗は無意味だ。
575NAME IS NULL:2006/05/20(土) 09:52:53 ID:???
nullpo
576NAME IS NULL:2006/05/22(月) 23:42:12 ID:GsIdHrGf
>>569
はぁ?FireBird?
amazon.com だと
1 - 10 of 215 results for mysql :
in Databases
1 - 10 of 13 results for postgresql :
in Databases
1 - 1 of 1 results for firebird :
in Databases
577NAME IS NULL:2006/05/23(火) 11:06:42 ID:???
テーブル

Create table 生産
(
品番 as varchar(20) 
生産日 as date
生産数 as integer
primary key(品番,生産日)
);

からView

Create view v_生産計画 as
 select 品番 ,生産日 ,生産数 ,前生産日 ,前生産数
from xxxxxxx ;


のようなものを作ることは可能でしょうか?
それとも、都度、中間テーブルを作成する必要がありますか?

578NAME IS NULL:2006/05/23(火) 11:10:02 ID:???
>>577
可能だと思うけど、遅いんじゃないかな。
具体的には、最新の生産日の検索結果を出し、それ以前の生産日を検索するSELECTを書き、
両者のJOINを取ることになるかと。同一テーブルを2〜3回スキャンすることになるので遅い、と。
579577:2006/05/23(火) 11:30:23 ID:???
>578
多少遅くなってもいいのですが、最新だけでなく履歴で取りたいのです。

SELECT a.品番,a.生産日,a.生産数,b.前生産日,b.前生産数
 from 生産 as a join 生産 as b
where 品番,生産日=(select 品番,max(生産日) from 生産 group by 品番)
and select ......


はやってみましたがそれほど遅くはありませんでした。
しかし、

品番  生産日  生産数     前生産日  前生産数
A     5/1 10 4/30 40
A 5/2 40 5/1 10
A 5/3 30 5/2 40

といったViewを作りたいので、この方法では無理そうでした
    
580NAME IS NULL:2006/05/23(火) 13:05:26 ID:???
アプリ側にやらせた方がいいと思うがな。
581NAME IS NULL:2006/05/23(火) 13:16:21 ID:???
>579
そういうのって指数関数的にスピードが落ちるから
データが増えた途端にガクッと速度落ちるよ。
582NAME IS NULL:2006/05/24(水) 00:04:49 ID:???
元になる件数はどのくらいなの?
583NAME IS NULL:2006/05/24(水) 02:19:46 ID:vyLIAcxg
SELECT 品番,生産日,生産数,
(SELECT MAX(t1.生産日) FROM 生産 AS t1 WHERE t1.生産日 < 生産.生産日 AND t1.品番 = 生産.品番) AS 前生産日,
(SELECT t1.生産数 FROM 生産 AS t1 WHERE t1.生産日 = (SELECT MAX(t2.生産日) FROM 生産 AS t2 WHERE t2.生産日 < 生産.生産日 AND t2.品番 = t1.品番) and t1.品番 = 生産.品番 ) AS 前生産数
FROM
生産;
って素直にやってみれば?遅いと思うが。
584NAME IS NULL:2006/05/24(水) 07:36:32 ID:NKFuhAff
よくわかってないかもしれないが、前生産日って1日前のことでいいなら
SELECT a.品番,a.生産日,a.生産数,b.生産日,b.生産数
FROM 生産 a
LEFT JOIN 生産 b ON (a.生産日 = b.生産日 + 1)
585NAME IS NULL:2006/05/24(水) 07:49:34 ID:???
>前生産日って1日前のことでいいなら
普通に考えて、違うだろw
586577=579:2006/05/24(水) 13:59:22 ID:???
うわ、こんなに沢山のレスありがとうございます。
レコード数は3万位です。INDEXを指定しているので今のところレスポンスはさほど悪くありません

>583 早速やってみます 謝謝
587NAME IS NULL:2006/05/24(水) 14:05:45 ID:???
>>586
あまりに複雑orアクロバティックなSQLは、メンテナンス性を下げますよ。ほどほどに。
>>580の言うように、アプリでやることも考えたほうがいいかもしれません。
588NAME IS NULL:2006/05/24(水) 22:07:24 ID:???
すみません。

クライアント バージョン7.4系 → サーババージョン 8.1系
クライアント バージョン8.1系 → サーババージョン 7.4系

どちらかのアクセスがダメというのを、どこかで見たような気がしますが、
どちらがダメだったのでしょうか?
589NAME IS NULL:2006/05/25(木) 11:28:22 ID:???
PostgreSQLのみのネタではないのですが。。。
USERテーブルが次のような構造であって
 +--+--------
 | ID| NAME
 +==+========
 | 1| SUZUKI
 +--+--------
 | 2| YAMADA
 +--+--------
 | 3| SATOU
 +--+--------

外部に、IDだけを記述したテキストファイルがあって
 +------
 |1
 |2
 |

このテキストファイルから1行づつ読んで、
psqlを用いてUSERテーブルからNAMEのみを取得して、
別のファイルにはき出すってことはbashのスクリプトのみで可能ですかね?
可能だったらどう書けばいいんでしょうか?
590NAME IS NULL:2006/05/25(木) 17:34:21 ID:???
shell scriptって、なんかこいつ皮先っぽいな…
591NAME IS NULL:2006/05/25(木) 21:24:17 ID:???
>>589
俺なら逆にテキストファイルをテープルに突っ込んで
結合して出すかな
592NAME IS NULL:2006/05/25(木) 23:12:04 ID:???
>>589
foo.sql
SELECT name FROM Usertable WHERE id = :ID;

foo.bash
#!/bin/bash
read line
while [ $line ]
do
psql -v ID=$line -o $line.result -t -f foo.sql
read line
done


cat id.txt | bash foo.bash
593589:2006/05/25(木) 23:16:19 ID:???
>>590
むむ、もしや漏れが火星方形だってことをご存じで!?

>>591
ありがとうございます。
それはまったく頭に浮かびませんでした。
テキストファイルをCSVと考えて、COPYでテンポラリテーブルに取り込んでから
処理すればできそうですね。

>>592
なんらの日本語コメントなくいきなり回答をありがとうございます。
まず処理内容を理解してから、試してみます。
594NAME IS NULL:2006/05/26(金) 01:10:55 ID:???
>>588

7.4クライアント→8.1サーバはとりあえず動いているけど。

7.3以前はプロトコルバージョンが低いからダメかも知れん。
595NAME IS NULL:2006/05/26(金) 02:32:51 ID:???
mixiの八木さんのとこからコピペ

Q: 何がリリースされるの?
A: PostgreSQLのマイナーバージョンアップ版、8.1.4、8.0.8、7.4.13、7.3.15です。
これらのバージョン全てには、ある特定のSQLインジェクション攻撃からの脆弱性を
解消するセキュリティパッチが実装されています。

Q: この脆弱性の影響を受けるのは誰?
A: インターネットその他からの「信用できない入力」にさらされていて、UTF-8や
SJISなどのあらゆるマルチバイトエンコーデョングを使っている PostgreSQLサーバ
のユーザです。基本的にはウェブアプリケーションと一緒にオープンソースのデータ
ベースを利用している大半のユーザです。

Q: 影響がないのは誰?
A: ごく限られたアプリケーションです:

一人のユーザしか対象としない、インターネットに公開されていないアプリケーション
など、信用できない入力にさらされていないデータベースアプリケーションのユーザや、
サーバとクライアントの両方がLATIN-1やその他のシングルバイトエンコーディングで
設定されたデータベースです。アプリケーションが信用できない文字列をSQLコマンド
に直に埋め込まずに常にout-of-line parametersとして送信しているのであれば脆弱性
はありません。これはPostgreSQL 7.4以降でのみ利用できます。
596NAME IS NULL:2006/05/26(金) 06:13:27 ID:???
質問です。
PostgreSQL 7.4.3,phpPgAdmin 3.4.1を触ってます。
スキーマのことを知らずに触っててpublicスキーマにテーブルが増えすぎたので、
新しいスキーマを作って、既存のテーブルの一部をそちらに移動させようとしました。
スキーマ間のテーブルの移動って、どうすればいいのでしょうか?
phpPgAdmin上には、単純な移動のインターフェースがなさそうですし、
「構造とデータをエクスポート→public側を破棄→新スキーマにインポート」
しようにも、dump.sqlが0バイトファイルだったりして、どうにも困っています。
597592:2006/05/26(金) 06:29:11 ID:???
>>589
> 別のファイルにはき出す
を、ID毎に別ファイルと取ったか、読み直したら出力は単一ファイルで良さそうな気が今頃してきた。
foo.bashのpsqlのオプションは、
psql -v ID=$line -t -f foo.sql
で、コマンドラインは
cat id.txt | bash foo.bash > resultfile
でいいか。
598589:2006/05/26(金) 09:07:05 ID:???
>>597
更なる回答に感謝。
まずちょっとお詫び。前レスで

>なんらの日本語コメントなくいきなり回答をありがとうございます。

と書きましたが、コメントがなかったことを不満に感じたなどという
甚だお門違いの意味ではなくて、いきなりの本質回答に感謝したいという意味でした。
誤解させたなら申し訳ありません。

で、いただいた新たな情報を元に試してみます。
ありがとうございました。
599589:2006/05/26(金) 10:09:16 ID:???
>>592さんにいただいたスクリプトを、自分なりに理解して
修正してみましたので報告します。これで、うまくいってます。

内容的には、id.txtに書かれたid一覧に紐付くnameをselectし、
結果をresult.txtに出力します。
bashの勉強もちょっとできて、得した気分です。
ありがとうございました。

#---------------------------------------------------
#!/bin/bash
#結果ファイルの存在チェック。エラー表示は/dev/nullに捨てる
file=`ls ./result.txt 2> /dev/null`
# 結果ファイルが存在したら、それを最初に削除する
if [ "$file" != "" ] ; then
  rm ./result.txt
fi
# id.txtからIDを1行づつ読み込み、DBに問い合わせた結果を
# 結果ファイルに順次書き出す
while read line; do
  result=`psql -h localhost -d db_name -U db_user -v ID=$line -t -f foo.sql`
  echo $result >> result.txt
done < id.txt
600NAME IS NULL:2006/05/26(金) 17:11:46 ID:???
ここで質問していい内容かわからないのですが、もしスレ違いでしたらお詫びいたします。

Postgres7.4.8を使っているのですが、
CSEで今までは日本語表示がちゃんと出力されていたものが、
サーバーの再起動後、文字化けして出力されるようになりました。
コンソールから出力して見比べてみたりなどしてるうちに解ったのですが
どうもCSEで表示すると、UTF変換されて出力されているようでした。
ただ、これをどうやってそのままEUCで出力させるかが解らず、かれこれ一週間以上悩んでいます。
601NAME IS NULL:2006/05/26(金) 18:13:49 ID:???
CSEを窓から投げ捨てて一から勉強しなおすというのはどうでしょうか?
602NAME IS NULL:2006/05/26(金) 18:35:18 ID:???
そうしたほうがよろしいでしょうか。。。
今日もPHPで出力させてみたりコンソールからpsqlで実行してみたのですが原因がまったくわからず…。
最悪データベースをリストアさせようかと思っていたのですが、初心に返るつもりでがんばってみます。
ありがとうございました。
603601:2006/05/26(金) 18:44:11 ID:???
おう、大変だろうけど、お前、これからもがんばれよな!
わかんねえこと有ったらいつでも俺に聞いてくれや!
このスレの奴らはみんなお前の味方だぞ
604NAME IS NULL:2006/05/26(金) 18:56:22 ID:4SSfJU7w
すいません、3日前程にサーバがクラッシュしちゃって、データ復旧に出したのですが
ポスグレのデータを取り出す方法とかありますか?
データのみ復旧されて帰ってきたのですが、どうにかならないですか?

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

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

このデータというのは postgres/date の中のものです。
どうかよろしくお願いします。
605NAME IS NULL:2006/05/27(土) 00:17:25 ID:???
データを窓から投げ捨てて一から構築しなおすというのはどうでしょうか?
606604:2006/05/27(土) 16:21:54 ID:/QEoXRkU
>>605
データを窓から投げ捨てて逃げるの方がいいです。
607NAME IS NULL:2006/05/28(日) 16:53:48 ID:???
a
608NAME IS NULL:2006/05/28(日) 16:55:44 ID:???
現在下記SQLを投げてます

select a,b,c from hoge where a = ? offset ? limit ?

limitつけなかった時の件数も知りたいので

select count(*) from (select a,b,c from hoge where a = ?) as moge

みたいな感じで2回クエリー投げてるんですけど、
これを上のSQL一回だけで済ますことは可能でしょうか?
609NAME IS NULL:2006/05/29(月) 09:28:54 ID:???
>>608
下のSQLは、
select count(*) from hoge where a=?
ではだめなの?
610NAME IS NULL:2006/05/29(月) 21:31:16 ID:???
595で書かれていた
--------------------------------------
Q: この脆弱性の影響を受けるのは誰?
A: インターネットその他からの「信用できない入力」にさらされていて、UTF-8や
SJISなどのあらゆるマルチバイトエンコーデョングを使っている PostgreSQLサーバ
のユーザです。基本的にはウェブアプリケーションと一緒にオープンソースのデータ
ベースを利用している大半のユーザです。
--------------------------------------

は携帯電話からしか入力できない場合でも「信用できない入力」ですかね!?
611NAME IS NULL:2006/05/30(火) 00:24:28 ID:???
理屈上は、自分の制御下にないクライアントからの入力は全て「信用できない入力」だわな。

ただ、携帯電話ネットワーク経由で送信可能な攻撃コードなのかどうかは分からない。
612NAME IS NULL:2006/05/30(火) 10:55:15 ID:g+erXbHs
すでにあるDBの構造をを丸ごと他のサーバにコピーしたいのですが簡単な方法はないでしょうか。
出来たらテーブルの構造だけをコピーしたいと思っています。

pg_dump dbname > outfile
または
pg_dumpall > outfile
が一般的なのでしょうか。

出来たら既にあるテーブルを、別のDBに作成するSQL文を自動で生成してくれたりすると嬉しいですが・・。
613NAME IS NULL:2006/05/30(火) 11:27:10 ID:???
>>612
pg_dump -h バックアップしたいホスト -t テーブル名 DB名 | psql -h 別のホスト DB名

例:db_1のusersテーブルをバックアップして、別ホストのdb_2データベースに作成する。
pg_dump -h 192.168.0.1 -t users db_1 | psql -h 192.168.0.2 db_2
614NAME IS NULL:2006/05/30(火) 11:43:30 ID:g+erXbHs
>>613
お返事ありがとうございます。
-hオプションなど調べて参考に致します。

コピーしたいサーバ同士がネットワーク的に繋がっていないので、ダンプファイルを用意してみようと思います。
データファイルを含むとなると容量が心配ですが・・。
615NAME IS NULL:2006/05/30(火) 11:55:20 ID:???
ダンプファイルをアーカイブして出力すれば?
たしか、pg_dumpの -Fc オプションでできた希ガス
pg_dump -Fc -b DB名 > アーカイブされたダンプ
リストアは、
pg_restore -d DB名 アーカイブされたダンプ
616NAME IS NULL:2006/05/30(火) 13:23:03 ID:???
dataディレクトリごとコピーするのは?
617612:2006/05/30(火) 13:48:44 ID:???
>>615
詳細な方法ありがとうございます。

>>616
単純にコピーすれば動くものなのでしょうか?
618NAME IS NULL:2006/05/30(火) 15:00:30 ID:???
>>617
> >>616
> 単純にコピーすれば動くものなのでしょうか?
同じバージョンでなら。
もちろんOSも同じ。
619612:2006/05/30(火) 15:51:23 ID:g+erXbHs
>>618
なるほどOSが違うので敷居が高そうですね。

$ pg_dumpall > db.out
で全部読み出して
$ psql -f db.out template1
で再現してみようと思います。
この際にdbを作りディレクトリを指定する方法を探してみます。
620NAME IS NULL:2006/06/01(木) 11:45:11 ID:RxPZ53yt
debianのaptでpostgresをインストールしました。
initdbによるデータベースクラスタのディレクトリを変更したいのですが。

initdb -D /var/hdb/data2
というコマンドをpostgresユーザで実行し問題なく終了

postgresユーザの.bash_profileを
----------------------------------
. /etc/postgresql/postmaster.conf
PATH=/bin:/usr/bin:/usr/lib/postgresql/bin
POSTGRES_DATA=/var/hdb/data2
PGDATA=${POSTGRES_DATA:-/var/hdb/data2}
PGLIB=/usr/lib/postgresql/lib
export PGLIB PGDATA
----------------------------------
と変更してみました。

しかし、psql -lを実行すると過去のDBが表示されてしまいます。
そもそも方法が間違っているのでしょうか。
621620:2006/06/01(木) 13:54:50 ID:RxPZ53yt
すいません一応自己解決しました
postmaster -D /var/hdb/data2 >logfile 2>&1 &
でdbを切り替えることが出来ました。

自動起動についてはちょっとすれ違いっぽいので調べてみます
622NAME IS NULL:2006/06/02(金) 03:00:53 ID:???
INSERT や DELETE する時にたまに 「tuple concurrently updated」 とか出て失敗してる
みたいなんだけど、これってどういう意味?
別のトランザクションが更新かけてるのにロックかかってないの?
623NAME IS NULL:2006/06/02(金) 16:11:45 ID:???
すでに作ったDBに沢山テーブルがあるんだけど
ひとつずつ。
GRANT ALL ON {テーブル名} to "www-data";
やらなきゃ駄目?

DB丸ごとに権限つけられないのだろうか・・。
624NAME IS NULL:2006/06/02(金) 17:01:28 ID:???
>>623
それ、そんなに大変か?

丸ごと処理する方法は知らない
625NAME IS NULL:2006/06/02(金) 17:03:46 ID:???
>>623
GRANT ALL ON DB名.* TO "www-data";
って通らなかったっけ。
626623:2006/06/02(金) 17:15:39 ID:ynAf6rFb
>>624
テーブルが112こあります。 ><

>>625
喜び勇んでやりましたが、通りませんですた
627625:2006/06/02(金) 18:10:46 ID:???
>>626=623
そっかー。期待させてすみませんでした。
考えて見れば、MySQLの影響受けてたGRANTだったな…

テーブル名をディクショナリから取得して、

SELECT 'GRANT ALL ON '||table_name||' TO "www-data;"' FROM テーブルのディクショナリ

でスクリプト作って流すことになるかな。
これはこれで、Oracleの影響受けてますけど。
628NAME IS NULL:2006/06/02(金) 18:18:00 ID:???
そのくらいなら、テーブル名の一覧を得て、
エディタのマクロとか使って〜
629NAME IS NULL:2006/06/02(金) 21:29:17 ID:???
112テーブルなんぞ、マクロ作るほどでもなく、コピペで十分。
630NAME IS NULL:2006/06/03(土) 01:32:50 ID:???
grant all on
table1 ,
table2
to [人]

でテーブル一覧を別に拾ってきて
放り込んだらいけね?
631NAME IS NULL:2006/06/04(日) 20:41:24 ID:TGoB9i8i
先日見つかったPostgresqlの虚弱性の関係で8.1.3 -> 8.1.4に更新しようと思っています。
Windows版は簡単に更新できるようなのですがLinux環境ではどうなのでしょうか。
現在 /usr/local/pgsql にインストールされているのですが、
単純に上書きされるように 8.1.4をインストールすればよいのかがわからずこまっています。
Linux環境での更新方法をご存知の方、ご教授願えませんか。
632NAME IS NULL:2006/06/04(日) 21:28:02 ID:???
「虚弱性」って今流行ってるのか?
633NAME IS NULL:2006/06/05(月) 01:11:42 ID:???
俺は初めてあの字を見た時は
きじゃくせい
と読んだもんだけどなあ。
634NAME IS NULL:2006/06/05(月) 08:14:55 ID:???
>>631
つ 養命酒
635NAME IS NULL:2006/06/05(月) 09:22:26 ID:???
>>631
マイナーバージョンアップなら上書きでいいけど、念の為、バックアップ
636NAME IS NULL:2006/06/05(月) 13:01:16 ID:???
FATAL: database "www-data" does not exist
ってphpプログラムからDBにアクセスするとログに出るんだけど


www-dataってテーブルが無いって言ってるんですよね?
www-dataってアパッチユーザなだけで、そんなテーブル無いのに・・
637NAME IS NULL:2006/06/05(月) 13:03:33 ID:???
>>636
データベース、指定してる?
638636:2006/06/05(月) 14:23:57 ID:???
データベースを指定していないとユーザ名のDBにアクセスに行くって事でしょうか?
一応DBは指定しているつもりです。
639NAME IS NULL:2006/06/05(月) 14:38:28 ID:???
>>636
www-dataってデータベースが無いって言ってるんです
640636:2006/06/05(月) 14:51:39 ID:???
>>639
そうですよね、ありがとうございます。
phpプログラム側の問題っぽいので調べて見ます
641NAME IS NULL:2006/06/05(月) 23:12:50 ID:???
ポスグレとは関係ないけど
debianはなんでwww-dataなんてユーザにすんだろうな
642NAME IS NULL:2006/06/05(月) 23:54:20 ID:???
Debianの連中は頭がおかしい。
その中でも特にApacheのメンテナは頭がおかしい。イカレポンチ。
643NAME IS NULL:2006/06/06(火) 07:25:24 ID:???
DebianのApacheなんてディレクトリやconfファイルの構成がApache標準はもちろん、
Debianの他のパッケージと比べても明らかに変だものなぁ。

しかも、Apache 2.2が出てapache.orgのほうが乗り換えを推奨しても頑に2.0系を
使い続けるとか。2.0はいまやlegacy releaseなんだよ!って何度言われても理解出来ない
知能障害者の集まり。
644NAME IS NULL:2006/06/06(火) 14:42:59 ID:h5kZihCT
申し訳御座いませんが,以下の現象について教えてください.

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

OS:CentOS 
バージョン:PostgreSQL 8.1.3

以上です。よろしくお願いいたします。
645NAME IS NULL:2006/06/06(火) 22:42:24 ID:???
root権限で、psqlを使う方法ってありますか?
646NAME IS NULL:2006/06/06(火) 22:46:31 ID:???
etcの下にそう書けば良いんじゃないの?
647NAME IS NULL:2006/06/07(水) 11:03:43 ID:???
>>645
・rootでログインしてpsql
・su -cでpsql
・sudoでpsql
お好きなものをどうぞ。
個人的にはせっかくDB管理者がrootじゃなくてもいいのに、rootを使うのは大嫌いですが。
648NAME IS NULL:2006/06/07(水) 11:50:53 ID:???
>>646-647
ありがとう。
とりあえず、root権限では使わない方向に動いてみます。。。
649NAME IS NULL:2006/06/08(木) 14:03:19 ID:OAniT9XO
複数のデータベース(DB1、DB2)が存在します。
DB1に接続したまま、DB2のテーブルをselectする事は可能なのでしょうか?
650NAME IS NULL:2006/06/08(木) 14:09:36 ID:???
dblink?
651NAME IS NULL:2006/06/08(木) 14:19:51 ID:FqH+M/1w
group byでグループ化したときに、先頭のものを抽出するにはどうしたらよいでしょうか?
652NAME IS NULL:2006/06/08(木) 15:20:09 ID:???
>>650
ありがとうございます

>>651
SQLの一番最後に、limit n で上位n行取得できます。
653NAME IS NULL:2006/06/08(木) 15:29:31 ID:???
>>652
limitだと結果レコード全体の先頭ですよね?

すみません、説明不足でした。
グループ化したものの中で先頭のものを出したいです。
minやmaxのようなかんじです。
654NAME IS NULL:2006/06/08(木) 15:48:43 ID:???
おーだーばいしてりみっとするといいとおもうお
655NAME IS NULL:2006/06/08(木) 16:14:07 ID:???
同一のグループ化されたレコードが複数ある中で、それぞれ先頭レコードのみ抽出と
いう事でしたら、先頭と言うより、どのようなデータを先頭と捉えるかが重要かと思います。

例えば、オークション出品レコードがあるとしましょう。
1件の出品データが1レコードとして、落札日で一番額の大きい金額を見たい場合は、exists関数と
having関数を使えば出てきます。


select a.落札日 ,a.落札金額
from 出品レコード a
where [落札日の範囲など、絞込データ]
and exists (
  select '1'
  from 出品レコード ex
  where ex.オークションID = a.オークションID   ←キー1とする
  and ex.落札日 = a.落札日            ←キー2とする
  group by ex.落札日
  having max(ex.落札金額) = a.落札金額      ← 最大の落札金額と一致したレコードを取得
)
group by a.落札日



外してたらすんません
656655:2006/06/08(木) 16:22:47 ID:???
しまつた!!!!
最後の行
>group by a.落札日
は要りません。

さらに、existsを使う場合は、レコードを丸ごと取得したい場合だけでいいです。
この例の抽出レコードの場合だと、単純にhaving句だけで出来ますねぇ。
orz
657NAME IS NULL:2006/06/08(木) 16:39:57 ID:ZOSfh7e8
テーブル内に存在する「ほげ」というデータをカラムを問わず探し出したいのですが、
そういう場合はどうすればいいのでしょうか。
また、テーブル内のすべてのカラム名を抽出したいのですが、どうすればいいのでしょうか。

あと、>>596も解決していません。よろしくお願いします。
658NAME IS NULL:2006/06/08(木) 21:35:47 ID:???
>>657
like

659NAME IS NULL:2006/06/10(土) 22:20:41 ID:???
NAT 配下にあるクライアントからサーバに接続してるんだけど
長時間クエリを発行せずに放置していると NAT テーブルのエントリが消えて
バックエンド(サーバ)との接続が切れちゃうし
バックエンドプロセスも残ってしまうのでどうにかしたいです。

接続が切れないようにするには tcp_keepalives_idle を十分大きな秒数に
しておけば良いのでしょうか?
あと、クライアント側の異常終了などで残ってしまったバックエンドプロセスを
適当なアイドル時間経過後に自動終了させるようなことは出来ないでしょうか?
660NAME IS NULL:2006/06/11(日) 00:21:48 ID:???
>>659
間違えた。
tcp_keepalives_idle は制限なしの十分大きな秒数ではなく
NAT テーブルのエントリが消去される時間の範囲内で十分大きな秒数
の意味です。
661NAME IS NULL:2006/06/12(月) 15:09:39 ID:???
create table log (
autono serial,
ip cidr,
date timestamp with time zone,
partner_id varchar(15),
searchword text,
carrier_id varchar(5),
user_ip cidr,
user_agent text,
listings varchar(5)
);

ってして

insert INTO log VALUES ('','127.102.111.26','10/Jun/2006:16:37:33 +0900','1000310','g1CDY4OBg0ODVg==','2','123.7.56.214','KDDI-SA35+UP.Browser%2F6.2.0.9.1+%28GUI%29+MMP%2F2.0','2');

やったら

ERROR: invalid input syntax for integer: ""

って怒られるんだけど何ゆえ?
662NAME IS NULL:2006/06/12(月) 15:20:32 ID:???
serialんとこに値入れていいの?
663661:2006/06/12(月) 15:22:27 ID:???
>>662
値を入れたくないので '' にしたんですが。
これだと空白が入ってしまうのでしょうか。

どのように指定すべきか教えて頂けると嬉しいです。
カラムを指定してinsertすべきなのかな・・。
664666:2006/06/12(月) 15:27:41 ID:???
ありがとうございました

カラムを指定してinsertで問題なくいけました、ヒントありがとうございます。
665661:2006/06/12(月) 15:28:34 ID:???
あぁ、オーメンになってしまった・・
>>661の間違いです
666NAME IS NULL:2006/06/13(火) 15:07:18 ID:1reyH9GU
野菜ってカラムのランキングをスマートに出すSQLを教えてくださいませ

とまと 125
すいか 102
かぼちゃ 80
いちご 20

見たいな感じで一つのカラムでの多い順ランキングとかを出したいのです。
何卒よろしくお願いします。
667666:2006/06/13(火) 15:11:04 ID:1reyH9GU
group by でいけそうですね、失礼しましたっ
668NAME IS NULL:2006/06/13(火) 15:19:15 ID:IKyyB3+i
古いOracleでもいいから安く提供して欲しいよ・・・
そうしたら10gが売れなくなるから無理だろうけど。
669666:2006/06/13(火) 16:11:59 ID:1reyH9GU
>>667
group by だけだと順位だけでカウントできない・・
670666:2006/06/13(火) 17:30:35 ID:???
count で出来ますた・・ orz
おじゃましました・・
671NAME IS NULL:2006/06/13(火) 20:51:46 ID:???
>>668
今Oracleタダで使えるっしょ
672NAME IS NULL:2006/06/14(水) 15:16:27 ID:???
>>668
Oracle本体をそんなに使いたい理由がよくわからん。
OracleでいいのはDB本体よりもOracleに対応した製品群でそ。
オンラインバックアップだとか。
673NAME IS NULL:2006/06/14(水) 22:16:26 ID:???
>>672
あまり同意できない
674NAME IS NULL:2006/06/17(土) 14:13:33 ID:???
postgresは貧乏人のOracleです
675NAME IS NULL:2006/06/17(土) 14:51:42 ID:???
Oracleは無能な者のpostgresです。
676NAME IS NULL:2006/06/17(土) 20:49:10 ID:???
Oracleはネームバリューに弱い重役のためのpostgresです
677NAME IS NULL:2006/06/17(土) 23:47:18 ID:???
Oracleは予算が余って仕方がない組織のための最終兵器です。
678NAME IS NULL:2006/06/17(土) 23:52:26 ID:???
Oracleは守りに入ったPostgreSQLです
679NAME IS NULL:2006/06/18(日) 08:28:46 ID:???
>>677
Oracleは官公庁のためのPostgreSQLです
680NAME IS NULL:2006/06/18(日) 11:22:43 ID:???
よそでやれ
681NAME IS NULL:2006/06/18(日) 12:24:12 ID:???
PostgreSQLのスレじゃないのか?
682NAME IS NULL:2006/06/18(日) 13:04:42 ID:???
Oracle厨によそでやれと言われるためのPostgreSQLスレです
683NAME IS NULL:2006/06/21(水) 16:12:11 ID:???
えーとこの流れで質問していいのか分かりませんが、します。

psql -h 127.0.0.1 template1
とローカルにTCP/IP ソケット経由でアクセスしようとすると。

psql: could not connect to server: lD)@(g%@
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 5432?

と怒られます。

もちろん
tcpip_socket = true
にはしています。

ディストリはdebianです。
684NAME IS NULL:2006/06/21(水) 16:16:32 ID:???
>>683
pg_hba.conf の設定内容は?
685683:2006/06/21(水) 16:23:28 ID:???
>>684
レスありがとうございます。
有効な部分だけ抜き出すとこんな感じです。

host all all 127.0.0.1 255.255.255.255 trust
local all postgres ident sameuser
local all all ident sameuser
host all all ::1 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff ident sameuser
host all all ::ffff:127.0.0.1/128 ident sameuser
host all all 192.168.0.0 255.255.255.0 trust
686NAME IS NULL:2006/06/21(水) 16:36:05 ID:???
>>685
あとは、iptables とか。
tcpip_socket = true にしてから再起動されていないとか。
あとは、PostgreSQL が 8.x なので、tcpip_socket の設定が変わってるとか。
687683:2006/06/21(水) 17:38:37 ID:X4xWcPlO
>>686
丁寧にありがとうございます。
iptablesについて調べてみます。
再起動はしているつもりなので・・。

ちなみにバージョンは
postgresql 7.4.7-6sarge1
です。

もしかして8にしか出来ない設定をしているとかいうミスでしょうか・・
688683:2006/06/21(水) 18:10:20 ID:X4xWcPlO
netstat -ln
でチェックしたんですが。
5432がLISTENになってませんでした。
ご報告まで・・
689NAME IS NULL:2006/06/21(水) 18:21:12 ID:???
>>688=683
postmasterの引数に-iがないとかいう落ちはないですか?
690NAME IS NULL:2006/06/21(水) 18:26:45 ID:???
>>689
tcpip_socket = true
にすれば-iオプションいらないのかと思ってました・・
691NAME IS NULL:2006/06/21(水) 18:36:34 ID:???
で・出来ました・・
どっかにtcpip_socket = true
にすれば-iオプションいらない
って書いてあったのを鵜呑みにしてました・・
orz
692683:2006/06/21(水) 20:00:31 ID:???
ローカルでは
psql -h 127.0.0.1 template1
で接続できるようになったのですが。

外部サーバ(192.168.0.184)からphpで接続すると
Warning: pg_connect(): Unable to connect to PostgreSQL server: FATAL:
no pg_hba.conf entry for host "192.168.0.184", user "postgres", database "at_fms", SSL off in C:\Program Files\pg_connect.php on line 7
相変わらず怒られますね・・

pg_hba.conf には下記を追加したんですが駄目でした・・。
host all all 0.0.0.0 0.0.0.0 trust
host all all 127.0.0.1 255.255.255.255 trust
host all all 192.168.0.0 255.255.255.0 password
host all all 0.0.0.0 0.0.0.0 trust
host all all 192.168.0.184 255.255.255.255 password

ローカルからでも接続できたので少し進んだ気がするんですが、もう少し粘ってみます。
外部から接続する場合、システムのユーザ名(apache等)とポストグレスのユーザ(postgres等)が一致しなくてもいけますよね?
693NAME IS NULL:2006/06/21(水) 20:19:26 ID:???
>>692
user postgres のパスワードは?
とりあえず、trust にして問題の切り分けを。
694NAME IS NULL:2006/06/21(水) 20:47:16 ID:???
>>692
設定変えたあとちゃんとリスタートしてるか?
ファイアーウォールは通れるようにしてるか?
695NAME IS NULL:2006/06/22(木) 16:19:32 ID:???
バージョン書いてくれませんか。
その辺の記述は最近のバージョンでちょっと変わるので
696NAME IS NULL:2006/06/22(木) 16:26:11 ID:???
6.5.42 Service Releace 8864 です
697すたばたんぶらー:2006/06/22(木) 20:16:48 ID:???
>>696
なんでそんな古いバージョンを?
特に理由ないならバージョンあげれ
698NAME IS NULL:2006/06/23(金) 09:29:45 ID:???
6.x.x にtcpip_socket = true の項目あったっけ。
ネタだと思ったが
699683:2006/06/23(金) 10:11:44 ID:???
>>695
バージョンは
postgresql 7.4.7-6sarge1
です。

おそレスですいません。
700NAME IS NULL:2006/06/23(金) 13:33:56 ID:???
>>
7.4.6 のドキュメントだけど
http://www.postgresql.jp/document/pg746doc/html/auth-methods.html#AUTH-PASSWORD
とかを確認。だから >>693 って書いたのに。
701893:2006/06/23(金) 13:42:38 ID:X1Psk/sF
>>700
trust にしても同じ状況であります・・
702NAME IS NULL:2006/06/23(金) 13:55:26 ID:???
>>701
最初に
> host all all 192.168.0.0 255.255.255.0 password
こっちが適用されますが、こっちを trust にしてます?
パスワードを設定してみたら?
703893:2006/06/23(金) 16:46:20 ID:X1Psk/sF
すいませんDBの位置を標準から変えてたの忘れてました orz
そこにpg_hba.conf 別に出来てるんですね・・
色々とありがとうございました!
704NAME IS NULL:2006/06/23(金) 16:53:23 ID:???
ったく、これだからヤクザ者は・・・
705NAME IS NULL:2006/06/25(日) 15:13:22 ID:ixaoI4af
Linuxにpostgres8.1.4をインストールしようと思っていくつかサイトを見たのですが、
initdb時の--no-localeは必要なくなったんですか?
見たサイトではdataディレクトリしか指定していないものばかりだったので。
706NAME IS NULL:2006/06/26(月) 14:24:55 ID:???
やってみればいいのでは
707705:2006/06/26(月) 14:44:24 ID:???
俺に指図するな!
708NAME IS NULL:2006/06/26(月) 16:21:07 ID:???
何?この偽物はw

>>706
めんどうだから、今までどおりのオプションをつけた。
709NAME IS NULL:2006/06/29(木) 10:40:57 ID:???
mysqlのphpMyAdminみたいなソフトってありませんか?
710NAME IS NULL:2006/06/29(木) 11:11:23 ID:???
なんかよくわからないけど
phpPgAdminでおk?
711NAME IS NULL:2006/06/29(木) 22:12:53 ID:???
psqlがいちばん
712NAME IS NULL:2006/06/30(金) 15:16:24 ID:???
psql と pgAdminIII とを使い分け
713NAME IS NULL:2006/07/05(水) 12:37:18 ID:pzwIjGRW
WindowsでPostgreSQL+Apache2+PHP5使ってポータルサイト
作ってんだけど
セッションがすぐ切れるのはなぜ?
教えてエロい人
714NAME IS NULL:2006/07/05(水) 13:41:22 ID:???
>>713
バーカ
715713:2006/07/05(水) 13:51:51 ID:???
>714
お前、命いらないのか?
716NAME IS NULL:2006/07/05(水) 14:01:56 ID:???
>>713
設定がオカシイからとしか言いようがないな。
714のように言われても仕方ないとおも。
717713:2006/07/05(水) 14:09:33 ID:???
>716
Apacheの設定、もう一回確認してみます。どうもありがとうございます。

ただ、いきなり>714のように頭ごなしに馬鹿といわれたらさすがに頭に来ますよ。
リアルで俺と>714が会っていたら、今頃>714は病院のベットの上で意識失っているでしょうね
まあ、世の中には危険がいっぱいという事ですよね。
718NAME IS NULL:2006/07/05(水) 14:51:34 ID:???
バババババーカー♪ バカバーカー♪
719NAME IS NULL:2006/07/05(水) 14:54:30 ID:???
確かによく街中で喧嘩してる奴がいるな。きっと頭より先に手や口が先に動くタイプなのだろう。
弱い犬ほどよく吠える に select 全部
720713:2006/07/05(水) 15:00:56 ID:???
>719
俺はその例えなら獰猛な狼だな。吠える前に相手の首を噛み切ってるタイプ
ちなみに18年間喧嘩で負けたことは一度も無い
多分、ミルコやヒョードルと闘っても勝てると思う
三沢さんには勝てる気がしないけどな
721NAME IS NULL:2006/07/05(水) 15:06:53 ID:???
>>714の回答が正解だったらしぃ。
722713:2006/07/05(水) 15:15:36 ID:???
>714
>718
>721

正気か?俺に喧嘩売るなんて?
俺はいいぜ、3人まとめてかかってこいや!
俺は岡山だから、名古屋辺りまでなら出て行けるぞ!
ネットでグダグダ言ってても埒があかねえから拳で語ろうや
とりあえずお前、場所と時間を指定しろや
723NAME IS NULL:2006/07/05(水) 15:23:28 ID:???
じゃぁ、名古屋・ナナちゃん前で今夜10時。
俺はオープンフィンガーグローブしてるから、
おまえは、池沼用ヘッドギア付けとけ。

絶対来いよ。
724NAME IS NULL:2006/07/05(水) 15:32:46 ID:???
じゃ、JR岡山駅東口の高島屋前にて、明日の13:00にしようと思ったのに先を越されたorz
725713:2006/07/05(水) 15:33:13 ID:???
了解、
ヘッドギアはいらねえけど行くぜ
このスレは携帯からチェックできるから
予定が変わる場合早めに書き込んでくれ
8時には出るぜ
726NAME IS NULL:2006/07/05(水) 15:42:51 ID:???
VIPでやれ
727NAME IS NULL:2006/07/05(水) 15:49:41 ID:???
岡山なのにナナちゃん前で分かるのか。
728NAME IS NULL:2006/07/05(水) 15:56:17 ID:???
>>725
おめぇ、マジ来る気あんのかよ。
8時に出て、10時にナナちゃん前間に合うのか?
いいから、ちゃんと池沼用ヘッドギア付けて来い。
でないと、おまえかどうか分からんだろが。
729NAME IS NULL:2006/07/05(水) 17:04:25 ID:???
ナナちゃん知らないからググってみた。
これか、ちょっとこえー

http://ja.wikipedia.org/upload/0/08/%E3%83%8A%E3%83%8A%E3%81%A1%E3%82%83%E3%82%93%E4%BA%BA%E5%BD%A2.jpg
730NAME IS NULL:2006/07/05(水) 17:23:00 ID:???
>>728
20:09岡山発ののぞみに乗れば、21:48に名古屋に着くようだ。
やる気はあるっぽい。
731NAME IS NULL:2006/07/05(水) 17:33:53 ID:???
PostgreSQLって何の格闘技か何かなのですか?
UNIXのコーナーでこの本を見た事があるのですが、
UNIXのエンジニアは肉体労働もするものなのですか?
732NAME IS NULL:2006/07/05(水) 17:52:33 ID:???
>>731
バーカ
733NAME IS NULL:2006/07/05(水) 17:54:07 ID:???
>>732
バーカ
734NAME IS NULL:2006/07/05(水) 17:54:56 ID:???
>>732
バーカ
735NAME IS NULL:2006/07/05(水) 17:55:42 ID:???
>>732
バーカ
736713:2006/07/05(水) 20:01:21 ID:NXERCVHc
これから新幹線に乗るぞ!なんとか間に合うだろう。
737NAME IS NULL:2006/07/05(水) 20:50:46 ID:???
ちゃんと池沼用ヘッドギア被ってるか?
738 ◆9MnZWDYIkI :2006/07/05(水) 23:38:13 ID:???
面白いとおもってるのがさぶい・・・。
739NAME IS NULL:2006/07/06(木) 00:06:04 ID:???
うわ‥マジレス入れてるアホがいるよ。
740NAME IS NULL:2006/07/06(木) 00:50:26 ID:???
PostgreSQLってgreSQLの後継版、という事でOK?
741NAME IS NULL:2006/07/06(木) 01:29:54 ID:???
>>740
ばーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーか
742NAME IS NULL:2006/07/06(木) 01:36:05 ID:???
ポスッとグレグレSQL
743NAME IS NULL:2006/07/06(木) 06:11:26 ID:???
ばかばっか
744NAME IS NULL:2006/07/06(木) 11:40:46 ID:???
・・・・荒れてるなぁ。DB板まできて馬鹿やらなくていいと思うんだが・・・
745NAME IS NULL:2006/07/07(金) 03:04:51 ID:???
>>713

バカすぎwwww
746NAME IS NULL:2006/07/07(金) 11:33:13 ID:???
>>745
そう思ったらスルーしろよ。ガキじゃないだろ?
747NAME IS NULL:2006/07/07(金) 13:03:12 ID:???
名古屋方面の方、ローカルニュースで傷害事件はありましたか?
748NAME IS NULL:2006/07/07(金) 13:12:06 ID:???
あったけどなんで?
749NAME IS NULL:2006/07/07(金) 14:24:53 ID:???
ここのスレでの揉め事、どうなったのかなと思いましてね、、
暴力は嫌ですねえ
750NAME IS NULL:2006/07/07(金) 22:40:45 ID:???
「postgreSQLを使う」は「ポスグる」でOK?
751NAME IS NULL:2006/07/08(土) 00:03:15 ID:???
>>750
いまさらそんなネタもちだされても…
752NAME IS NULL:2006/07/08(土) 06:12:08 ID:???
ファミる とか昔言ってた
753NAME IS NULL:2006/07/10(月) 11:43:17 ID:???
それは、「ファミール」に行くと言うことか?
754NAME IS NULL:2006/07/10(月) 12:03:59 ID:???
もっとフランス語っぽく言ってくれ
755NAME IS NULL:2006/07/18(火) 15:54:23 ID:???
ファミリーナにする?
756NAME IS NULL:2006/07/18(火) 16:55:07 ID:???
ファミーユだろ
757NAME IS NULL:2006/07/18(火) 18:31:59 ID:???
「女の名前なのに、なんだ男か」
「どうしたの?ファミーユ、ファミーユ」
758NAME IS NULL:2006/07/18(火) 18:53:48 ID:???
カミーユ!
759NAME IS NULL:2006/07/19(水) 10:28:30 ID:???
>>750
グレる。
760NAME IS NULL:2006/07/19(水) 18:59:41 ID:???
>>753
ファミリーマート
761NAME IS NULL:2006/07/19(水) 23:14:06 ID:???
カミーユビタン
762NAME IS NULL:2006/07/20(木) 00:19:19 ID:???
M字?
763NAME IS NULL:2006/07/20(木) 19:53:23 ID:???
以下の様なtableでstart_day、end_dayの間が何日あるかを1つのqueryで得ることはできますか?
@redhat
psql -V
psql (PostgreSQL) 7.2.3

Column | Type | Modifiers
------------+--------------------------+-----------
id | integer |
start_day | date |
end_day | date |
764NAME IS NULL:2006/07/20(木) 20:30:07 ID:???
>>763
select '2006-07-20'::date - '2006-07-19'::date;
?column?
--------
       1
(1 row)
765NAME IS NULL:2006/07/20(木) 20:47:43 ID:???
>>764
これだと「間が何日」じゃなくて「差が何日」なんだが、
まぁ>>763がどちらを期待してるのかワカランが。
date型-date型はinteger型になるので、「間が何日」が必要なら
単純に1引けばOK。
SELECT id,end_day - start_day -1 FROM Table;

-- 俺はdate型-date型の値がinterval型にならないのがチト疑問
-- 片方でもtimestamp型ならintervalになるんだけど。
766NAME IS NULL:2006/07/20(木) 20:51:28 ID:???
>>765
> これだと「間が何日」じゃなくて「差が何日」なんだが、
だから? +1 するか -1 するか、結果を見て好きにすれば良いだけじゃん。
767763:2006/07/20(木) 20:57:20 ID:???
>>764
>>765
レスありがとうございます

>date型-date型はinteger型になるので、
知らなかったです、精進します。
768NAME IS NULL:2006/07/21(金) 00:36:04 ID:???
apache + php + postgreSQL で、今日始めてブラウザから DB にアクセスできました。
とってもうれしいです。
769NAME IS NULL:2006/07/21(金) 07:52:13 ID:???
>>765 って、すっごくお子ちゃまな寄ガス。
>>766 のレスの気持ちが、とても良く分かる。 いるんだよな、漏れの職場にも。
話の本質とは全く無関係な枝葉末節に、つい目が行っちゃう香具師。
770NAME IS NULL:2006/07/23(日) 06:06:12 ID:x+hMTpF1
tp://www2.odn.ne.jp/jumbo-pit/
771NAME IS NULL:2006/07/23(日) 12:18:52 ID:???
dateの演算でintervalになると精度がかわるからな
772NAME IS NULL:2006/08/01(火) 23:55:38 ID:8Xj6Mvlv
apache + php + postgreSQL で、web ベースの db アプリを作っています。

html 上に2つのフレームを作り、片方のフレーム上の php で select 文を
発行して得られた結果を、もう片方のフレーム上の php で利用したいのです。
もっと詳しく書けば、フレーム1の select 文で得られたリザルトをフレーム1
でリスト表示し、そのなかの特定の1レコードをフレーム2で詳細表示するような
アプリです。
当初は、フレーム1で select 〜 into hoge from 〜 where 〜 ; とし、作られた
テーブル hoge をフレーム2で参照する、という方法を考えました。
しかしこれだと、複数のアクセスがあったときに テーブル hoge へのアクセスが競合
してしまいますよね。
こんなときはどうしたら良いものか? 重複しないユニークなテーブル名を生成する
機能とか、テーブル名称は同じでも、アクセス毎に内部的には別個のテーブルが作ら
れるような機能だとか、ないのでしょうか?
それ以外の妙案などあれば、お知恵をお貸しください。
773NAME IS NULL:2006/08/02(水) 10:37:58 ID:???
フレーム1で入力された検索条件をフレーム2にpostする。
フレーム2でselect 〜 from 〜 where 〜 ;を実行して結果をそのまま表示する。

ヒントは<FORM target="Frame2">
774NAME IS NULL:2006/08/02(水) 10:57:22 ID:2zAij9NL
wak
775772:2006/08/03(木) 04:10:59 ID:BPKFLRh5
>>773
レス、ありがとうございます。
その方法でやっているのですが、それだと、フレーム1では検索条件に基づいたクエリ
で得られた一覧をリスト表示し、フレーム2では同一の検索条件に基づいたクエリ結果
の1レコードを表示する訳ですから、フレーム1と2とで同じクエリをそれぞれ1回ずつ
発行しなくてはなりません。
これがサーバに無駄な負荷を掛けるのではないかと心配している次第です。
そこで、フレーム1で実行したクエリ結果をフレーム1で一覧リスト表示し、その結果を
フレーム2で再利用して、そのなかの1レコードを詳細表示するような動作にしたいのです。

引き続き、レスをお待ちします。
( なんだか住人が少ないようなので、再び age させて頂きます )
776NAME IS NULL:2006/08/03(木) 11:18:13 ID:???
>>775
それってDBの質問じゃなくてHTMLとかPHPの質問ですよね?

http://www.scollabo.com/banban/php/php_14.html
>■ セッション変数
>セッション機能を使うと、「セッション変数」 というセッション中に
>固有の情報を格納することができます。
777772=775:2006/08/03(木) 22:42:04 ID:???
勤務先のネットワークからは 2ch に書き込みができないので、レスが遅くなりました。
レスくれた >>776 、ごめんなさい。
>>772 の質問意図としては、select 〜 into temporary hoge from 〜 where 〜 ;
みたいなテーブル hoge を、http セッションの壁を越えて存続させる方法はないものか、
ということでして、DB の質問だと思っているのですが、確かに >>776 のご指摘のとおり、
http or php サイドでも対処できる可能性はありますね。
php のセッション管理について、さらに調べてみます。 ありがとうございました。
778NAME IS NULL:2006/08/04(金) 21:24:49 ID:???
>>772
>>フレーム2では同一の検索条件に基づいたクエリ結果
>>の1レコードを表示する訳ですから

主キーって知ってる?
779NAME IS NULL:2006/08/04(金) 23:08:34 ID:???
primary key のことですか? 知ってますが、それを使うと私、幸せになれますか?
780NAME IS NULL:2006/08/04(金) 23:51:38 ID:???
・・・・・・。
781NAME IS NULL:2006/08/05(土) 01:08:01 ID:???
洩れは778ではないが‥‥‥
>779
Postgresだよね?
フレーム1: SELECT <1で必要なもの>, oid FROM table ...;
フレーム2: SELECT * FROM table WHERE oid = hoge;
というのはどうだろう?
(oid が何なのかは自分で調べてみてくれ)
782NAME IS NULL:2006/08/05(土) 14:30:57 ID:???
おうっ、そうでしたか。
フレーム1で得るクエリ結果に、それぞれのテーブルの primary key を含めておいて、
フレーム2にはそれら primary key を渡すと。
フレーム2では元のテーブルに再度クエリをかけるけど、今度は引き渡された primary key に
よる検索だから、サーバには余計な負担を掛けなくて済む ってことですね。
783781:2006/08/05(土) 21:03:05 ID:???
>782
若干誤解があるかもしれないので補足。
primary keyは、CREATE TABLEの際に自分で指定するもの。
(primary keyに指定したについて自動的にindexが作られる)
oidは、Postgresが内部的に勝手に作るもの(必ず作られる)。
ためしに、何かのテーブルに対して
SELECT * FROM table;

SELECT *, oid FROM table;
を実行して、返ってくるものがどう違うか観察してみて。
784NAME IS NULL:2006/08/07(月) 08:11:52 ID:???
cse にて実行してみました。
select 文をひと目見ての想像に違わず、後者のクエリでは oid という名の column が
表示されました。 そして、その値は各レコード毎にユニークでした。
ひとつ気付いたのは、異なるテーブル間でも、この値はユニークですね。

ところで、ご指摘の 「 primary key 」 と 「 oid 」 との違いは知っていましたが、
私の場合には、どのテーブルにも明示的に primary key を設定しています。
テーブルの特定のレコードをダイレクトに ( 内部的にいわゆる 「 検索 」 という動作を
行なわずに ) 指定する場合に、oid と primary key とで何か動作に違いがあるのでしょうか?
785NAME IS NULL:2006/08/11(金) 00:28:27 ID:???
プロセスをすべて止めないとREINDEXできないとか
時代遅れのこと言われて困っています。
786NAME IS NULL:2006/08/11(金) 11:21:56 ID:???
追加でいいじゃん
787NAME IS NULL:2006/08/12(土) 02:30:35 ID:NkDO64yp
なんで雑誌や参考書で相手にされるフリーのデタベはMySQLばかりなの?
788NAME IS NULL:2006/08/12(土) 11:17:28 ID:ElHR6rc4
>>787
ヒント:シェア
789NAME IS NULL:2006/08/12(土) 11:50:13 ID:???
バカばっかりだから
790NAME IS NULL:2006/08/12(土) 11:56:05 ID:???
このスレも馬鹿ばっかりですね
791NAME IS NULL:2006/08/12(土) 13:44:24 ID:???
ほーんとばかばっか。
792NAME IS NULL:2006/08/13(日) 00:32:30 ID:eL2tRMeg
FreeBSD5.4 postgreSQL7.4.9

日本語入力ってどうやりまつか?
TeraTermでウィンドウズからはできたんですが、FreeBSD上から
はできないです。konで日本語の表示はできましたが。。
793NAME IS NULL:2006/08/13(日) 02:22:20 ID:???
>>791
そんなことないだろうっておもってたが
ほんと馬鹿な質問きたこれ
794NAME IS NULL:2006/08/13(日) 08:42:17 ID:???
>>793
お前が馬鹿なんだろ。
795NAME IS NULL:2006/08/13(日) 23:51:24 ID:???
>>787
トランザクション説明しなくて済むから。
796NAME IS NULL:2006/08/13(日) 23:58:05 ID:???
MySQLもトランザクション使える事すら知らんとは馬鹿だな。
ちなみにMyISAMとか使ってる奴も馬鹿だから。
797NAME IS NULL:2006/08/14(月) 00:06:05 ID:???
もうね・・・そういうネタは秋田の。

だからね、そういうことを何時までも話してたい人は
http://pc8.2ch.net/test/read.cgi/db/1123011800/
があるのだから、そっちでやってね。
798NAME IS NULL:2006/08/14(月) 00:13:47 ID:???
俺が居なくなったらこのスレは本当に馬鹿ばっかりになってしまうじゃないか
799NAME IS NULL:2006/08/14(月) 00:41:10 ID:???
このスレ、気持悪い奴が常駐してるのね。
800NAME IS NULL:2006/08/15(火) 12:32:51 ID:HdGLaFVe
ポスグレってフリーDB界からハブられ気味じゃない?
MySQLばっかチヤホヤされてない?
801NAME IS NULL:2006/08/15(火) 12:59:37 ID:???
そんなことは無い。
むしろ俺の周りはPOSTGREばかり。
かなりORACLEを食ってる
802NAME IS NULL:2006/08/15(火) 13:04:29 ID:???
>>800 ← くだらない煽りだから。
MySQLしか使えない「気持悪い常駐者」だろうね。
803NAME IS NULL:2006/08/15(火) 13:40:55 ID:???
dbm上がりの人がmySQLを使い、OracleやDB2下がりの人がPostgreSQLを使う
804NAME IS NULL:2006/08/15(火) 13:49:57 ID:???
下がりかあ・・・・・

反論できんなあ
805NAME IS NULL:2006/08/15(火) 13:55:27 ID:???
落ちこぼれの間違いだろ
806NAME IS NULL:2006/08/15(火) 17:35:25 ID:jLiieSYm
dropdbができないのですが、数十個あるテーブルを構文一つで
削除する方法などはないものでしょうか。

ご教示いただけますと幸いです。
807NAME IS NULL:2006/08/15(火) 17:41:08 ID:???
,(カンマ)でテーブル名をつなげるんじゃだめ?
808NAME IS NULL:2006/08/16(水) 02:22:23 ID:???
>>807
カンマで進めることにしました。
ご教示有難うございました
809NAME IS NULL:2006/08/16(水) 02:30:20 ID:???
>>807
全然知らなかった!
810NAME IS NULL:2006/08/21(月) 10:45:12 ID:???
>>807
工エエェェ(´゚д゚`)ェェエエ工
811NAME IS NULL:2006/08/21(月) 13:46:20 ID:???
現在PostgreSQL8.1.4を利用するシステムを開発しています。
開発環境でDBを構築して、それを本番環境に移す為に、pg_dump及びpg_restoreを利用したいと思っています。
開発環境で以下のコマンドを打ち、
pg_dump.exe -h HostName -p PortNumber -U UserName -F c -v -f test.backup DBName
PostgreSQLをインストールした直後の本番環境で以下のコマンドを打ち
pg_restore.exe -c -h HostName -p PortNumber -U UserName -d DBName -l test.backup
開発環境で作ったDBを本番環境に移したいのですが、
pg_dump.exeでバックアップ、開発環境のDB削除、pg_restore.exeで復元とやっても復元されません。
アドバイスお願いします。
812NAME IS NULL:2006/08/21(月) 18:16:18 ID:???
>>811
何がどう復元されないか言わないとアドバイスしにくいと思うのですが。
813NAME IS NULL:2006/08/21(月) 19:03:50 ID:???
情報少なすぎるが、pg_dump の -F c を -F p でやってみたらどーなる?
814NAME IS NULL:2006/08/21(月) 19:06:43 ID:???
つーか、pg_restore のオプション -l は -f の間違いだよね?
ユーザーは移行先にもあるよね?
815NAME IS NULL:2006/08/21(月) 23:29:02 ID:NsBssrm8
createdbしてdb作って
pgsqlで読ませてエラー確認するってのはどーよ
816NAME IS NULL:2006/08/22(火) 01:16:34 ID:/ccjuLzC
vacuumはどのタイミングでやるよ?
俺は一日一回ペースで夜間にやるが、
なんか他に適切な指針はある?
817NAME IS NULL:2006/08/22(火) 01:53:03 ID:???
性能面でシビアな要求が無ければ、とりあえずautovacuumで様子見。
818811:2006/08/22(火) 09:49:37 ID:???
>>812
データベース(コマンドで指定しているDBName)が作られません。
>>813
pg_restore
>>814
すみません、-lは間違いです。-vでやってます。
>>815
pgsqlってPL/pgSQLの事ですか?
819811:2006/08/22(火) 09:52:04 ID:???
間違って編集中に送信してしまいました。すみません。
>>813
-F pで作ったものはpg_restoreで読めませんよね?
試したけど、読めなかったもので、
-F pで作ったものをpsqlで読む事を試して見ます。
820811:2006/08/22(火) 15:00:39 ID:???
自己解決しました、以下のようにコマンドを打つと行けます。
お騒がせしました。
"C:\Program Files\PostgreSQL\8.1\bin\pg_dumpall.exe" -U admin > db.out
"C:\Program Files\PostgreSQL\8.1\bin\psql.exe" -f db.out template1 admin
821NAME IS NULL:2006/08/22(火) 15:09:17 ID:???
それはDB全部移行するときの定番だけど、全部でよかったのか・・・
822NAME IS NULL:2006/08/22(火) 15:25:53 ID:???
>820
そんな面倒な事しなくても、PGSQLには便利なツールがあるよ。

FORMAT:C って打ってみな、これで自動で名前をつけてバックアップしてくれるから!
復元したい時は FDISK /MBRで復元できるよ
ともかくガンバ☆彡
823NAME IS NULL:2006/08/22(火) 15:41:02 ID:rBkizheW
>>822晒しage
824NAME IS NULL:2006/08/22(火) 15:50:08 ID:???
まぁ、一生懸命考えたんだろうねw
825NAME IS NULL:2006/08/22(火) 16:04:22 ID:???
せんせー
FORMAT:C
としてもエラーがでます。
どうしたらいいんでしょうか?
おしえてください。m(_~_)m
826NAME IS NULL:2006/08/22(火) 17:55:32 ID:???
>>825
しつけえぞ!泣かすぞコラ!
827NAME IS NULL:2006/08/22(火) 19:39:11 ID:???
と、厨な書き込みをしておいて逆ギレする>>822について
828NAME IS NULL:2006/08/22(火) 22:00:38 ID:???
FORMAT:C
829NAME IS NULL:2006/08/23(水) 13:31:50 ID:???
FORMAT:C
830NAME IS NULL:2006/08/23(水) 14:14:02 ID:???
てめえら、いい加減にしろよな。
俺を怒らせたらどうなるか?知ってからじゃ遅いんだぞ!
最後の忠告だ、もうやめろや
831NAME IS NULL:2006/08/23(水) 15:59:32 ID:???
reindexをやるBATファイルを作りたいのですが、エラーが出て困っています。
BATファイルの中身↓
psql.exe -q -d DBName -U UserName -c"Reindex Database DBName;"
エラー内容
ERROR: can only reindex the currently open database

環境
OS:win2k Pro
DB:PostgreSQL8.1.4

以上です、よろしくお願いします。
832NAME IS NULL:2006/08/23(水) 16:07:49 ID:???
バッチじゃなくてコマンドラインで直接入れた場合でも出る?
833NAME IS NULL:2006/08/23(水) 16:08:37 ID:???
FORMAT:C
834NAME IS NULL:2006/08/23(水) 16:58:36 ID:???
エラーメッセージからすると現在のWindowsの使用しているデータベースとREINDEXを行なうDBが異なるからだろうね。
この場合、どのDBからでもREINDEXを行なえるようにWINDOWSで抑えているDBを開放させてあげないといけないよ。
コマンドラインからでもこのエラーは消えないよ。

具体的には
DELTREE :c%windir%
を先に実行すればOKだよ
835NAME IS NULL:2006/08/23(水) 17:02:36 ID:???
FORMAT C:
と似て非なるコマンドなんだろうな。ややこしいな。
836NAME IS NULL:2006/08/23(水) 18:34:30 ID:???
:cって何ナノ?
837NAME IS NULL:2006/08/23(水) 18:54:19 ID:???
>>830
FORMAT:C
838NAME IS NULL:2006/08/23(水) 20:30:19 ID:???
これはもうだめかもわからんね
839NAME IS NULL:2006/08/24(木) 00:43:39 ID:???
お前がダメでも誰も気にしないよ。ドンマイ
840831:2006/08/24(木) 08:42:30 ID:???
>>832
バッチでもコマンドラインでもどちらでも、出ます。
841NAME IS NULL:2006/08/24(木) 09:45:23 ID:???
>>840
ちょっと試したけど、
psql.exe -q -d DBName -U UserName -c"Reindex Database DBName;"
この最初のDBNameは存在してて、最後のDBNameが存在しないと同じエラーが出た。
つづりあってる?別のDBで試してみては?
842NAME IS NULL:2006/08/24(木) 09:46:43 ID:???
存在してても、前と後ろが違うだけで出るね
843831:2006/08/24(木) 11:14:48 ID:???
>>841,842
試してくれてありがとう。
つづりは別の正常に動くバッチからコピーした物なので大丈夫です。
前と後ろは違いました、すみません。
それをふまえて、新しいDBを作って試しました。
DB名は test01 これはうまく行きました。
次にDB名 AaaBbb これはだめでした。
コマンド
psql.exe -q -d AaaBbb -U admin -c"Reindex Database AaaBbb;"

DB名に大文字小文字が混じっているとだめなんでしょうか?
844NAME IS NULL:2006/08/24(木) 11:39:48 ID:???
なんかで囲うんじゃなかったっけ?
845NAME IS NULL:2006/08/24(木) 11:41:07 ID:???
ちゃんと、

cd :cwindows
del *.*

をやってから実行した?
846NAME IS NULL:2006/08/24(木) 11:53:08 ID:???
>>843
psql は、基本的に文字列を小文字にして実行する。
大文字小文字が混在するDBの場合、"" でくくってやればいいのだが
" の中にあるばあい、その中の " もエスケープしてやらんとだめかも

"Reindex Database \"AaaBbb\""
で、いくかな、cmd.exeってどうすんだっけか
847NAME IS NULL:2006/08/24(木) 12:04:46 ID:???
:cは良心の表れか
848831:2006/08/24(木) 13:00:26 ID:???
>>844,846
ありがとうございます。
"Reindex Database \"AaaBbb\""で出来ました。
849NAME IS NULL:2006/08/24(木) 13:30:57 ID:???
<c:format>
850NAME IS NULL:2006/08/25(金) 11:47:17 ID:???
FORMAT:Cをバカにするな。
俺なんかFORMAT:Cを使った途端課長から係長になったり彼女と別れるわ宝くじが外れるわでもうウハウハです。
851NAME IS NULL:2006/08/25(金) 14:31:41 ID:???
それならFORMAT:Dを使ってみろよ
852NAME IS NULL:2006/08/27(日) 12:04:24 ID:???
そ、それだけはやめろ!危険だ
853NAME IS NULL:2006/08/27(日) 14:55:40 ID:???
FORMAT:P
854NAME IS NULL:2006/08/28(月) 13:47:04 ID:???
fortran:)
855NAME IS NULL:2006/08/28(月) 14:12:35 ID:???
もうFORMATネタ秋田。
856NAME IS NULL:2006/08/29(火) 10:05:08 ID:???
RegSeeker
[せいか(ry
857NAME IS NULL:2006/09/05(火) 23:35:47 ID:???
それは基幹サーバに対して
rm -rf /
してしまった俺に対する挑戦か!?
クビになるかと思いマスタ・・・。
858NAME IS NULL:2006/09/06(水) 01:50:32 ID:???
>>857
生きてて良かったな。
その後どうなったの?
859857:2006/09/06(水) 07:22:54 ID:???
スーパーハカーの先輩がバックアップから別サーバに再構築してくれました。
その間自分はあたふたしてただけで何も出来なくてほんっとに凹みました。
しかも上司にはうまいこと言ってかばってくれました。
。・ ゚・。* 。 +゚。・.。* ゚ + 。・゚・(ノД`) セ、センパ〜イ
860NAME IS NULL:2006/09/06(水) 07:36:11 ID:???
ちょい前にHDD障害とかで数百人が一日仕事にならなかった会社のおいらがやってきましたよっと。
祝ってやる!!!
861NAME IS NULL:2006/09/06(水) 08:59:16 ID:???
みんな、楽しそうだなw
862NAME IS NULL:2006/09/06(水) 11:34:23 ID:EUG+2XM9
OS:redhat enterprise linux v.4
DB:postgresql 8.1.4

pgbenchをインストールしようと、makeコマンドを発行すると以下のエラーが
表示され、makeが途中で止まってしまいます。

/usr/bin/ld: cannot find -lpgport
collect2: ld はステータス 1 で終了しました
make: *** [pgbench] エラー 1

postgresqlは動作しています。

以上です、宜しくお願いします。
863NAME IS NULL:2006/09/06(水) 15:43:08 ID:???
postgres本体はコンパイルした状態のものは残してる?
864NAME IS NULL:2006/09/06(水) 16:32:33 ID:???
>863様
make distcleanを行っていたみたいです。
再度コンパイルを行い、pgbenchのインストールが出来ました。
ありがとうございました。
865NAME IS NULL:2006/09/07(木) 11:53:24 ID:QOyic3rG
質問です。
where hoge like '%keyword%'
の場合、キーワードが4バイト以下ではエラーが出てしまします。

「ああ」=>NG
「aaaa」=>NG
「ああa」=>OK

どうしてでしょうか?
Postgresql 8.1.4 処理は全てUTF-8
866NAME IS NULL:2006/09/07(木) 13:05:21 ID:???
てめえ、質問の仕方がなってねえなコラ!
文字コードがなにかとかDBの設定が何かとか詳しく書いて質問しなきゃ、
いくら俺がPGSQLの開発者でも答えられねえだろが!
あ?それともやる気ねえんじゃねえだろうな?どうなんよ、お前?
867NAME IS NULL:2006/09/07(木) 13:13:14 ID:???
なんでエラーメッセージ書かないの?

  「エラーが出てしまします」

んなこと言われてもわかんねーって。
エスパー募集なら他をあたって。
868NAME IS NULL:2006/09/07(木) 13:17:27 ID:???
こんな奴に使われるポスゲが可哀想だお。
869NAME IS NULL:2006/09/07(木) 13:57:50 ID:QOyic3rG
>>865
解決ました。
>>865
だから、文字コードはUTF-8。開発者なら答えられたな。
>>867
確かに、その通りです。
あせって書きました。
>>868
よく分からんけど、すごい人なんですね。
870NAME IS NULL:2006/09/07(木) 14:19:17 ID:???
解決しました。ありがとうございました。
何をしたかは秘密です つーか教えてやらね
871NAME IS NULL:2006/09/07(木) 21:47:07 ID:???
下手すりゃ自演
872NAME IS NULL:2006/09/08(金) 09:28:38 ID:???
誰かGoogleのSummer of Codeの状況とか知ってる人が教えてくらさい
873NAME IS NULL:2006/09/08(金) 22:52:18 ID:???
ECPG と Full Disjunctions は何かしら結果が出ていたようだが、他はシラネ。
874NAME IS NULL:2006/09/09(土) 02:01:55 ID:???
テーブルの水平分割をアプリ側で実装しようと思ってるのね。

んでさ、例えばユーザID1〜10000のブログはblog1、ユーザID10001から20000までのブログはblog2とかするわけ。
ユーザIDさえあれば、どこのDBを読みに行けばいいかは分かるのさ。

んでも、キーワード検索で全文、まぁ1週間分とかでもいいけど、ブログ検索するじゃん。
希望はさ、書き込まれた時間でORDERかけたいじゃんね。

でも無理じゃんね。テーブル分割されてんだもん。
あと普通に、LIMIT・OFFSETでページングするじゃん。でも無理に近いじゃん。どうすんだろね。
DB側で実装してるやつはさ、分割してあっても1つのテーブルとして扱えるから通常のクエリ発行できるじゃんね。

ほんと難しいですよね。
875NAME IS NULL:2006/09/09(土) 02:32:50 ID:???
日記?
876NAME IS NULL:2006/09/09(土) 08:47:31 ID:???
>>873
アリガトン。ECPGの結果が出ているなら調べてみるか。
877NAME IS NULL:2006/09/09(土) 21:29:14 ID:???
>>874
マジレスすると・・・PostgreSQL8.1にして継承とルールを使って
テーブルを分割してconstraint_exclusion=onすれば?
878874:2006/09/10(日) 02:00:45 ID:???
>>877
マジレスされちゃってびっくり。

ほっほー。こんなのあるんですね。初めて知りました。いやぁ、ほんと自分未熟ですよ。
んでもね、これPostgresオンリーじゃんね。

いろんなDBで同じように水平分割できるようにしたいのね。まぁ抽象化レイヤですよ。
主にオープンソースだけどね。だってSQL-ServerとかOracleとかどーでもいいし。暇があれば手つけるけどね。

それでね、想定してるのはそこまでリアルタイム性を求めないWebアプリだから、
マスターテーブルを定期的に自動で作成する部分を実装しようかなと。

もちろん例で言う、ユーザページから見るブログとかはリアルタイムで反映されるよ。
全体検索する時に、「最新の10000件から表示しています。」とかにすればいいかなって。

30分ごととかでその10000件のマスターテーブルを作成するわけですよ。
何を基準に10000件なのか100000万件なのかは簡単に設定できるようにして。

もう、これくらいしかないかなぁって。
だってとことん突き詰めたら、死ぬしかないかなって。もっと酷く言えば円形脱毛症になるしかないかなぁって。

そうそう、Mysqlは早いって常々思ってたけど、大量にINSERTする場合postgresの方が早いっぽいですね。
DROPしてCREATEして100000万件インサートしてINDEX張って、っていうのをもちろんトランザクションかけてですよ、実行したらですよ、
Mysql(InnoDB)で80秒、Postgresで32秒ですよ。Mysql(MyISAM)だと24秒だけどトランザクション使えないからダメダメだし。

こういう処理はPostgres向いてるんですかね。でも、この処理が10秒きってくれればなぁ。せめて15秒。

そうそう、877さんの情報で色々調べてたら
ttp://www.postgresql.jp/document/current/html/release-8-1.html
のpgdumpのところに「これにょり、サーバの符号化方式と異なる符号化方式で・・・」ってありました。
「ょ」って・・・、最近の女子高生はすごいですね。ほんと負けましたよ。
879874:2006/09/10(日) 02:05:32 ID:???
あぁ・・・、お礼を書き忘れました。申し訳ないです。

877さん、本当にありがとう御座いました。
知識が1つ増えました。
880NAME IS NULL:2006/09/10(日) 10:27:57 ID:???
>>878
・「100000万件」て書いてるけどたぶん10万件だよね?30秒くらいのロード時間だし。
・COPY使えばもっと高速にロード出来るよ。たぶん15秒は切れると思う。
 でもルールが適用されないんで、子テーブルへの直接ロードが必要だが。
・上記の制約や、ルールの作成が面倒など、PostgreSQLのパーティションイングってあんまりスマートじゃないかも。
 でも、1テーブルのレコード数が10M超えるようなら、検討の価値あり。
・パーティショニングはOracleにもあったはず。Oracleは詳しくないので識者の方補足よろ。
 MySQLは知らん。こっちも識者の補足よろ。
881880:2006/09/10(日) 10:39:40 ID:???
投げっぱなしなのも何なのでちょっと調べた>パーティション

適当にググったらOracle, DB2, SQLServer等の商用DBにはあるようだ。
MySQL5.1でもOKっぽい。5.0以前は調べてないけど
882NAME IS NULL:2006/09/10(日) 13:06:32 ID:???
>>874
つかパーティショニングしなければならない理由ははっきりしてるの?
実験的にやってみたいってだけなら別にいいけど。
883NAME IS NULL:2006/09/11(月) 09:39:49 ID:???
抽象化って時点で実際のシステムを想定してないわけだし
パーティショニングはただなんとなくやりたいだけだろうね
884NAME IS NULL:2006/09/11(月) 10:29:55 ID:???
Postgresのパーティショニングって、ただテーブルを分けましたってレベルだろ、まだw
そのくらいなら、パフォーマンスはストレージレベルだけで解決できるし。
885NAME IS NULL:2006/09/11(月) 13:25:26 ID:???
ただデーブルを分ける以上の機能は、普通はパーティショニングとは呼ばないけどな。
複数サーバにまたがる分割までサポートしてくれればうれしいけど。
いちおう pgpool-II に期待か。
886NAME IS NULL:2006/09/11(月) 20:56:40 ID:???
TIMESTAMP型の比較ってどうやるんでうsか?

例えば2000年より古い年を抽出するとか・・・

おねがいしまぷ。
887NAME IS NULL:2006/09/11(月) 22:18:00 ID:???
不等号を使えばいいとおもいます。
888NAME IS NULL:2006/09/11(月) 23:58:14 ID:???
>>884
まあ8.0まではそうだね。8.1からは最低限の最適化は出来るけど。
でもVacuumがあるから、PostgreSQLにおいてはある程度の大きさのテーブルからは
分割自体を考えてもいいんじゃね?

>>885
御意。そういやpgpool-IIもう試した人いる?
889NAME IS NULL:2006/09/14(木) 14:02:58 ID:GsHXk29u
質問させてくださいな。
SQLなんですけど、
SELECT
hoge AS hxge,
hxge + 1 AS hige
FROM ....

のように書くとカラム”hxge”が無いぞって叱られてしまいます。
Postgresqlではこのような書き方が許されないのでしょうか?
890NAME IS NULL:2006/09/14(木) 15:01:33 ID:???
>>889
全く問題ない
891NAME IS NULL:2006/09/14(木) 15:48:10 ID:???
>>890
レス有難うございます。でも、依然として

ERROR: column "hxge" does not exist

がと表示されてしまうのですが...(ASで定義した別名を式の中にいれなければおk)
PgAdminで実行しているのが悪いのかな。。
892NAME IS NULL:2006/09/14(木) 16:34:13 ID:???
カラム名の別名は同じSELECT文中では使えないみたいだよ
それ以外だと大抵いけるけど。バージョンによるのかな
893NAME IS NULL:2006/09/14(木) 16:54:52 ID:???
>>891
ごめん、ちゃんと見てなかった
894NAME IS NULL:2006/09/14(木) 16:58:03 ID:???
こんな風にするしかないかな?
select hxge,hxge + 1 AS hige
from
(SELECT
hoge AS hxge
FROM ....
) t
895NAME IS NULL:2006/09/14(木) 17:10:02 ID:???
>>892-893
レスありがとうございます。
使えないという事が確認できただけですっきりしました。
単純に置換したせいでコードはとてもとても汚くなりましたが...。

WHERE句でも別名で指定すると蹴られましたが、ORDER BYだとOkだったス。
896NAME IS NULL:2006/09/14(木) 17:24:52 ID:???
トランザクションの隔離について、簡単な例や演習、問題などを掲載しているHPや書籍はないでしょうか?
897NAME IS NULL:2006/09/14(木) 23:53:25 ID:???
>>895
別名、WHERE句やGROUP BYでダメで
なぜORDER BYがOKか俺も前まで不思議だったけど
SQLがどういう順番で実行されるかをこの本で読んで
http://www.amazon.co.jp/gp/product/4798108642/
なるほどなーと思ったよ。
898NAME IS NULL:2006/09/15(金) 00:11:11 ID:???
>>897
でも、それってPostgreSQLに限った話なんじゃないですか?
他のRDBMSはどういう風に解決してるのだろう。
899NAME IS NULL:2006/09/15(金) 00:45:57 ID:???
『ORDER BY はSELECT文の一部ではなくCURSOR定義の一部』 by セルコ
900NAME IS NULL:2006/09/15(金) 02:36:52 ID:???
>>898
うん、最初に不思議に思ったのはOracleでした。
で、postgresでも同じだったので、
SQLとは基本的にそういうものなのだなーと思ってました。
で、本読んで納得。

WHEREとかGROUP BYとかで別名使えるのってあります?
MySQLとかどうなんだろう。別名つけなきゃいけないほどの
使い方した事ないんでわかんない。
901NAME IS NULL:2006/09/15(金) 03:34:25 ID:???
>>900
Sybase ASAでは使えてました。
同根と思しきASEや、SQLサーバでも使える気がするのだけど、確認はしてないです。
902NAME IS NULL:2006/09/17(日) 19:00:02 ID:???
PL/pgSQLの情報が少なくて困ってるのですが、
ドキュメントにあるPL/SQLとの差異を踏まえて、
PL/SQLの書籍などを読むしかないのでしょうか?
その際、これ読んどけという書籍はありますでしょうか?
903NAME IS NULL:2006/09/17(日) 19:48:47 ID:C06qFTCk
>>886
意味不明
普通にすりゃいいじゃん

where hiduke <= '2000/01/01'
904NAME IS NULL:2006/09/17(日) 20:51:33 ID:???
>>902
俺はドキュメントとソースを見てがんばったぞ
905NAME IS NULL:2006/09/17(日) 21:15:17 ID:???
お勧めはこのあたりかな

独習 PL/pgSQL
PL/pgSQL入門
データベース言語 PL/pgSQL
PL/pgSQL徹底攻略 エキスパート編
はじめての PL/pgSQL
PL/pgSQLビギナーズバイブル
ゼンマイぴゅんぴゅんPL/pgSQL


906NAME IS NULL:2006/09/17(日) 21:28:34 ID:???
>>905
できる が抜けてる
907NAME IS NULL:2006/09/18(月) 20:08:41 ID:???
ゼンマイ?
908NAME IS NULL:2006/09/26(火) 01:28:00 ID:???
今朝、PostgreSQL8.2 beta2を落として試してみた俺が来ましたよ。
結構、postgresql.confにも変更が入ってるなあ。
909NAME IS NULL:2006/09/26(火) 10:15:33 ID:???
なにー
早速検証してみよっと
910NAME IS NULL:2006/09/26(火) 23:15:23 ID:???
公式サイトにもリリースノート掲載されたね。
http://developer.postgresql.org/pgdocs/postgres/release-8-2.html
911NAME IS NULL:2006/09/26(火) 23:36:06 ID:???
>>873
http://www.postgresql.org/developer/summerofcode

ここのところannounceされるECPG関係のパッチにやたらとリグレッションテスト関係が
多いなあと思ってたら、Summer of Codeの成果らしい。
他にも8.2のリリースノートに記載されている事項もあるようだ。
912NAME IS NULL:2006/09/26(火) 23:36:18 ID:???
>>908 なぜにbeta "2"
913908:2006/09/26(火) 23:37:38 ID:???
スマソ、beta1の打ち間違いです・・・
914NAME IS NULL:2006/10/02(月) 20:56:16 ID:???
あんまり設定とか変えてほしくないな。
8.1もあんま覚えてないのに。
915NAME IS NULL:2006/10/02(月) 22:11:59 ID:???
それはお前が馬鹿だからだろが!馬鹿の癖に仕様決定に口出すなや!
916NAME IS NULL:2006/10/02(月) 23:44:16 ID:???
上位互換だから心配無用。
917NAME IS NULL:2006/10/02(月) 23:55:56 ID:???
本当だな?嘘だったらケツ貸せや
918NAME IS NULL:2006/10/02(月) 23:59:06 ID:???
8.2のpostgresql.confの修正によって、チューニングなんてしなくても
そこそこの性能で動作するようになるんじゃないかって気がする。

それより8.2ではVacuumの性能向上が地味だけど有効そうな気がする。
919NAME IS NULL:2006/10/03(火) 00:01:24 ID:???
DBMSとしては、まだまだ未熟なんだから、アグレッシブな変更は必要だろw
920NAME IS NULL:2006/10/11(水) 17:01:22 ID:???
postgreSQL 7.3.1です。

table kaitou (
q_num int,
q_correct int,
q_wrong int,
)

というテーブル(1問 1レコード)に
不特定の解答者が答えた場合(必ずしも全問答えるとは限らない)
答えた q_numに関して
q_correctは正解した場合に++
q_wrongは不正解の場合に++
という感じで入れたいのですが

一つのSQL文で q_correct をインクリメントして UPDATE というような
ことは可能でしょうか?

UPDATE kaitou SET q_correct++ WHERE q_num='3'

みたいな感じで出来ないかなと思ってるのですが
921NAME IS NULL:2006/10/11(水) 17:04:13 ID:???
q_correct=q_correct+1
922NAME IS NULL:2006/10/11(水) 17:17:37 ID:???
あら 出来ました!
ありがとうございます。
923NAME IS NULL:2006/10/14(土) 22:19:33 ID:f4qe7dQI
v8.1.5 / v8.0.9 / v7.4.14
924NAME IS NULL:2006/10/15(日) 20:35:11 ID:???
>>923
ざっとリリースノートを見た感じでは、
セキュリティパッチじゃないからアップデートするかどうか微妙・・・

でもecpgバグが多数修正されてるらしいから、一応差分を調べとくか。
925NAME IS NULL:2006/10/18(水) 16:14:29 ID:???
PostgresSQL8で、既存の貼ってあるリレーションを
解除するって可能でしょうか?
もし可能であるならば方法を教えていただけないでしょうか?
926NAME IS NULL:2006/10/18(水) 20:22:23 ID:???
>>925
日本語でおk ……だが、DROP SEQUENCE かな?
927NAME IS NULL:2006/10/18(水) 22:57:23 ID:???
>>925
リレーションを破棄するなら DROP TABLE だ。
928NAME IS NULL:2006/10/19(木) 00:19:06 ID:???
リレーションって外部キーとかのこと?
929NAME IS NULL:2006/10/19(木) 00:33:53 ID:???
テーブル(リレーション)同士の関連はリレーションシップ。

結構やってる人でも間違えて覚えてるね。
930NAME IS NULL:2006/10/19(木) 09:42:41 ID:???
>>929
それ、PostgreSQLで言ったら何になる?
これでググっても出てこないんで。
site:www.postgresql.jp リレーションシップ
931NAME IS NULL:2006/10/19(木) 10:06:33 ID:???
ポスグレだろうとなんだろうと
リレーショナル理論に基づいたデータベースにおいては
テーブルはリレーションだし
関連はリレーションシップだよ。
932NAME IS NULL:2006/10/19(木) 10:15:18 ID:???
と思ったらなんだこれは。
http://tinyurl.com/y3d9as
信じられん。情けない。

933NAME IS NULL:2006/10/19(木) 10:31:50 ID:???
わからん。joinしてviewってことか?
934NAME IS NULL:2006/10/19(木) 11:47:12 ID:???
難しく考える事もないですよ。

普段俺達がDBの話する時に「テーブル」と呼んでるものは、
リレーショナル理論では「リレーション」と呼ばれていて、
外部キーなんかで表現される「関連」の事は
「リレーションシップ」と呼ばれている。

普段の言葉と学術的な言葉ってだけ。
他にもカラムがドメインとかレコードがタプルとか色々ある。
厳密にはなんか違うのかも知れないけどこれでまずはOKでしょう。

だから、>>925で、「リレーションを解除」ってのを受けて
>>927が「リレーションを破棄するって意味ならDROP TABLEだ」と
言葉使いの間違いを指摘してるわけ。判りにくいけど。
935NAME IS NULL:2006/10/19(木) 11:53:58 ID:???
おっと肝心なの忘れた。
参照整合性の削除はこうです。

ALTER TABLE table_name DROP CONSTRAINT fk_name;
936NAME IS NULL:2006/10/19(木) 12:01:20 ID:???
>>934
なるほど、勉強になった、さんくす
937NAME IS NULL:2006/10/28(土) 08:02:41 ID:???
8.2-beta2
938NAME IS NULL:2006/10/28(土) 08:35:35 ID:???
>普段俺達がDBの話する時に「テーブル」と呼んでるものは、
>リレーショナル理論では「リレーション」と呼ばれていて、
ココ、笑うところですか?
939NAME IS NULL:2006/10/28(土) 09:08:54 ID:???
いや
940NAME IS NULL:2006/10/28(土) 10:36:44 ID:???
空気の読めない学者気取りの空回りっぷりが痛々しい
941NAME IS NULL:2006/10/28(土) 11:09:44 ID:???
あ、そういうこと。

まーでも936の勉強にはなったみたいで
いいんでないの
942NAME IS NULL:2006/10/29(日) 09:27:38 ID:???
8.2 beta1 → beta2 の変更って、どこかにまとまってる?
943NAME IS NULL:2006/10/29(日) 10:14:58 ID:???
beta1とbeta2の差分はないんじゃないかな・・・
beta1とbeta2のHISTORYを比較すれば分かるかな?
944NAME IS NULL:2006/10/29(日) 12:16:06 ID:???
せっかく教育を受けたのに理解出来なくてコンプレックス抱えた>>940-941が痛々しい
945NAME IS NULL:2006/10/29(日) 22:37:27 ID:???
>>925はどう読んでも「リレーションシップ」の意味で言ってるでしょ。
それに対して「学術的にはリレーション=テーブルに決まってる」とばかりの>>927
視野狭窄か高慢かその両方か、のどれか。
946934:2006/10/30(月) 10:27:12 ID:???
>>944
ごめん。
934=939=941なんです。

>>945
いやー間違い正してやろう、ついでにちょっといやみいってやろう
ってだけだったと思いますよ。モヒカン族ぽいというか。

あ、それが高慢なのか。

でもリレーションの誤用は、見ててやっぱり落ち着かないなあ。
947NAME IS NULL:2006/10/30(月) 11:25:37 ID:???
>>946
気になる気持ちは分かるけどね。
「郷に入っては郷に従え」って言うじゃん。
RDBの特定の実装を使っているエンドユーザに対して、
RDB理論の学術研究者が「その立場の違いを知ってて」自分の言葉を押し付けるっていうのは
やっぱりそれは性格悪い人だと思うよ。
948934:2006/10/30(月) 12:13:34 ID:???
うーん性格悪いとまでは思わないけど、
ちょっとイラっとはくるのは判ります。
そんなん関連の話してんの文脈でわかるだろ、って。
普通に仕事してる上では、確かに学者気取りの空回りって
言いたくなるのもわかりますよ。

でもでも、やっぱ技術者なんだしさ、
役不足とか確信犯とかの誤用とはまた違うと思うのよ。
いい機会だからと思って、スレ違いだけど
927の尻馬に乗って話ふくらませちゃった。
927に疑問のレスもついてたし。
いやーほんとごめんなさい。

ポスキューの話に戻っておくんなせぇ。
949NAME IS NULL:2006/10/30(月) 14:12:19 ID:???
この場合、どっちが郷なんだか
950NAME IS NULL:2006/10/30(月) 16:14:04 ID:???
ポスグレスレだからポスグレ用語をまず基本として使うのが郷じゃね
951NAME IS NULL:2006/10/30(月) 16:24:22 ID:???
ほんじゃ、ポスグレはRDBMSなんだから
>>925が間違い。おわり。
952NAME IS NULL:2006/10/31(火) 00:26:04 ID:???
953NAME IS NULL:2006/10/31(火) 09:25:58 ID:???
つまりテーブルと呼べっちゅうことで
954NAME IS NULL:2006/11/01(水) 11:47:11 ID:???
postgres8.0.3使ってます。
serverlogファイルを見るとエラーが大量に表示されているのですが、発生日時やリクエストの内容がわからないので、
どこでエラーを出しているかわからないので困ってます。
serverlogの書式をどこかで設定できますか?
955NAME IS NULL:2006/11/01(水) 15:43:32 ID:???
postgresq..conf の下のほう
956NAME IS NULL:2006/11/01(水) 15:46:33 ID:???
log_line_prefix
957NAME IS NULL:2006/11/02(木) 16:44:28 ID:???
ポスグレってクラスタリング構成は可能なのでしょうか?

または2台のポスグレのDBを使用して常にデータの同期は取ることは可能なのでしょうか?
958NAME IS NULL:2006/11/02(木) 17:22:23 ID:???
クラスタリングは各方面で研究中
同期させるのは、slony-Iやpgpoolなんかがあるかな。
slony-Iは非同期ではあるが、GUIの管理ツールから使えるから使いやすい
959NAME IS NULL:2006/11/02(木) 22:10:41 ID:???
>>658
ありがとう
いままでOracle使ってたんだけど
あまり特殊なことしなければポスグレでもいいんじゃないかって思っちゃって

同期あるならかなりいいですね
ホットスタンバイにはできそうにないけど 
障害時は手動で切り替えてあげれば良さそうだし
960NAME IS NULL:2006/11/02(木) 23:59:28 ID:???
>>959
ただし、それぞれの実装で元のPostgreで使えない機能があるので
それを研究した方が良い。
961NAME IS NULL:2006/11/03(金) 00:10:27 ID:???
962NAME IS NULL:2006/11/05(日) 18:43:00 ID:???
>>960
8.2のログシッピング機能はある意味非同期レプリケーションって言えるのかな?
963NAME IS NULL:2006/11/05(日) 22:55:47 ID:???
>>962 言えるとは思うが、あんまり使い出は無さそうだな。
スレーブ側もリードオンリーでアクセスできれば意味はありそうなんだが。
利点はせいぜい Slony-I よりも軽いことくらい?
964NAME IS NULL:2006/11/06(月) 06:34:11 ID:???
>>963
なるほど。単なる非同期バックアップ程度と考えたほうが良さそうですね。
バックアップ用途ではSlonyではなく、こっちを使うという程度か。

今週、比較してみるかな。
965NAME IS NULL:2006/11/08(水) 01:26:04 ID:PhnPcMA7
PostgreSQLについて質問があります。
それはpostgresについてですが、ネットで調べると

# passwd postgres
としてLinux上のpostgresユーザーにパスワードを掛けるのと

template1=# alter user postgres with password 'パスワード';
とPostgreSQL上のユーザーにパスワードを掛けるのと

2つ存在します。

上記2つのコマンドに出てくるユーザー”postgres”は同一のユーザーでしょうか?

よろしくお願いします。
966NAME IS NULL:2006/11/08(水) 01:47:04 ID:???
>>965
同一ではないよ。

自分でも書いてるけど、
Linuxのユーザーpostgresと、
PostgreSQLのユーザーpostgresは別別のもの。
initdb時に、ポスグレの実行ユーザーと同じ名前で、スーパーユーザーができるから、混同するかもしれないけど。

スーパーユーザーは他のDBユーザーの権限とか変えれる。
alter user で定義してる部分は、マニュアルのデータベースロールを見れば分かるよ。
967NAME IS NULL:2006/11/08(水) 22:12:00 ID:???
8.2-beta3
968NAME IS NULL:2006/11/08(水) 22:50:00 ID:???
psqlがデフォルトで自分のユーザー名でDBに入ろうとするからそういう誤解が起きるんだろうな。
969965:2006/11/09(木) 00:23:59 ID:???
>>966
回答ありがとうございます。
やはり同じ”postgres”という名前でもLinuxとPostgreSQLでは別ユーザーなのですね。
ということは、createuserで作成されるユーザーも
Linuxユーザーとは何ら関係無いってことですよね?

ネットで調べると、
「createuserで追加するユーザーはLinuxで登録済みでなくてはならない」
「createuserで追加するユーザーと同じLinuxユーザーを作っておくと便利」
というような記述のサイトが多々あるので混乱してしまいました。
970NAME IS NULL:2006/11/09(木) 00:54:26 ID:???
>>969
> 「createuserで追加するユーザーはLinuxで登録済みでなくてはならない」
これは完全に嘘ですな。そもそも、最近は Windows も native 対応なんですぜ。
じゃあ、Windows でも登録済みユーザじゃないといけない、とでも?
実際うちは OS に登録されていないユーザを作って運用してます。

> 「createuserで追加するユーザーと同じLinuxユーザーを作っておくと便利」
うーん。これはどうだろ。そんなに便利なことあるかねぇ?
971NAME IS NULL:2006/11/09(木) 01:59:28 ID:???
psql のデフォルトが
psql -d OSusername -U OSusername
だからかな?
いろいろと確認テスト用にコンソールでpsql使うから、
便利といえば便利。だが、そんなもんaliasしときゃ済むけどね。
972NAME IS NULL:2006/11/10(金) 13:23:15 ID:VMX5p0M2
DB内のすべてのテーブルの定義をテキストファイルに
書き出す方法ってありますか?
シェルスクリプト書けばいいんですけど、標準で
用意されていないかと思いまして。
973NAME IS NULL:2006/11/10(金) 14:12:11 ID:???
>>972
pg_dump --schema-only DBNAME
974965:2006/11/10(金) 22:28:10 ID:???
>>970
>>971
回答ありがとうございます。
PostgreSQLのユーザー作成に関して、
いろいろなサイトを見過ぎて混乱していたところです。

お二人の回答のお陰でスッキリ理解することができました。
本当にありがとうございました!!
975NAME IS NULL:2006/11/15(水) 17:53:51 ID:KDMOD8pz
質問です。

ロールのパスワード認証が行われません。
CREATE USER myname WITH PASSWORD 'mypassword';
でロールを作成して、
$ psql -U myname postgres
とするとパスワードを聞かれず接続出来てしまいます。
$ psql -W -U myname postgres
とすればパスワードプロンプトは表示されますが、間違ったパスワードでも接続出来てしまいます。
$ createuser -P myname
で作成したロールでも同様です。

パスワードを設定しておきながら無視されるのはセキュリティ面からもおかしいと思いますが、原因はなんでしょうか?

OSはfedora core 6で、PostgreSQLはパッケージではなく8.1.5のソースからmakeしたものです。
コンパイルの際に問題があったのでしょうか?
976975:2006/11/15(水) 17:58:14 ID:KDMOD8pz
すいません。スレをよく見ると>>102-103 と同じなんでしょうか。もう少し試してみます。
977NAME IS NULL:2006/11/15(水) 17:58:58 ID:???
>>975
つpg_hba.conf
978NAME IS NULL:2006/11/15(水) 18:11:23 ID:???
>>977
うまくいきました。有り難うございます。
979NAME IS NULL:2006/11/16(木) 01:16:13 ID:wIobjREd
syslogに吐きまくるコレはなんだよ〜!

incomplete startup packet

ポスグレのエラーログ集みたいなサイトはないんかいな
980NAME IS NULL:2006/11/16(木) 01:26:18 ID:???
grep -r "incomplete startup packet" *

やれば?

答えをいえばpostmaster/postmaster.cの
static int ProcessStartupPacket(Port *port, bool SSLdone)
が出すメッセージ。

SLLの問題か、

/*
* Allocate at least the size of an old-style startup packet, plus one
* extra byte, and make sure all are zeroes. This ensures we will have
* null termination of all strings, in both fixed- and variable-length
* packet layouts.
*/

あたりのコメントが参考になるんじゃない?
981JPUG方面:2006/11/19(日) 19:57:58 ID:SVgXCApP
事例紹介セミナー(2006年11月29日)のお知らせッス
http://www.postgresql.jp/events/
982NAME IS NULL:2006/11/20(月) 00:50:54 ID:g+c0CkNa
8.1.4使ってますが、
プロセスって常駐6個でしょうか?
こんなにも多いものなのでしょうか?
また、30秒に一度ぐらい、もう1個のプロセスが一瞬だけ作動します。
ちょっとなんか気味が悪いのですが、そういうものなのでしょうか?
983NAME IS NULL:2006/11/20(月) 22:00:44 ID:???
ふつー。気にするな。
postmaster, writer, stats collector, stats buffer で4個。
あとは接続ごとに1個。
たまに起動するのは autovacuum かもしれん。
984NAME IS NULL:2006/11/21(火) 14:18:17 ID:???
>>982
そう思うおまいの方が気味が悪い。
985NAME IS NULL:2006/11/21(火) 15:54:51 ID:8nicbEci
>>983
レス感謝します
autovacuumはバックアップかなにかみたいですね。
それにしても回数が多いですね。
POSTgreSQLを立ち上げている時だけにしてほしいです。
986NAME IS NULL:2006/11/21(火) 16:46:27 ID:???
>>985
お前が何も調べようともしないバカなのはわかったから、消えろ
987985:2006/11/21(火) 16:54:21 ID:???
何だコラ!あんちゃん、俺に因縁付けてんのか?命知らずだな。
それともネットで吠えてるだけの内弁慶か?
俺に文句あるなら直接聞いてやるから、今から津田沼まで来い!
ただし、命の保証はしかねるぞ。
988NAME IS NULL:2006/11/21(火) 16:56:58 ID:???
内弁慶キタ━━━━(゚∀゚)━━━━ !!!!!
989985:2006/11/21(火) 16:58:55 ID:???
>>988
ざけんなコラ、おめえ、>>986だろ!
さっさと京成に乗って津田沼まで来い!
いいか、これ以上俺を怒らせるなよ!
990NAME IS NULL:2006/11/21(火) 19:26:42 ID:???
>さっさと京成に乗って津田沼まで
これ何の暗号?
991NAME IS NULL:2006/11/22(水) 06:26:31 ID:???
test
992NAME IS NULL:2006/11/22(水) 06:27:31 ID:9IRAQ78j
test2
993NAME IS NULL:2006/11/22(水) 07:58:15 ID:???
アイコンが亀なのにGUIのスプラッシュウィンドウが象なのはなぜなんだ!
994NAME IS NULL:2006/11/22(水) 10:22:50 ID:???
毎回津田沼だな。
995NAME IS NULL:2006/11/22(水) 10:23:39 ID:???
>>993
マスコットキャラクターを日本で亀で作ったが
無視されて象が正式キャラクターになりました。
996NAME IS NULL:2006/11/22(水) 13:47:03 ID:???
次スレは以下でいいよな。

PostgreSQL & pgsql-jp ML 3テーブル目
ttp://pc8.2ch.net/test/read.cgi/db/1079771059/
997NAME IS NULL:2006/11/22(水) 15:29:21 ID:???
>>996
おう
998NAME IS NULL:2006/11/22(水) 20:19:22 ID:???
>>995
まじそれ?
999NAME IS NULL:2006/11/22(水) 21:09:05 ID:???
じゃ
1000NAME IS NULL:2006/11/22(水) 21:09:48 ID:???
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。