PostgreSQL
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2001/05/09(水) 11:36ID:GHX.oCXo関連アプリケーション特有の話題は、以下のスレッドへ。
☆関連スレッド
[PHP + PostgreSQL]
http://corn.2ch.net/test/read.cgi?bbs=php&key=983128806
[PHP以外+PostgreSQL]
http://corn.2ch.net/test/read.cgi?bbs=php&key=988929199
[MySQL vs PostgreSQL]
http://corn.2ch.net/test/read.cgi?bbs=php&key=989341364
0577nobodyさん
02/09/27 00:30ID:???どういうテーブルか説明しないで「というテーブルで」ってキミ!
0578nobodyさん
02/09/27 00:37ID:???>577
スミマセン。
何を説明したらいいのか分かりませんが。。。
テーブル名、カラム名は何でもいいです。
table baka ( foo text, bar text )
0579hmk
02/09/27 00:51ID:QE9TB9SP>aaa aab aacを指定すると
の意味が分からない。もっと具体的に書きなさい。
0580576
02/09/27 01:11ID:???分かると思ってハショりすぎました。教えて君の悪いパターンですね。
スミマセン。
select bar from baka where foo ~* '^aaa'とかするとmona gikoが表示されますよね?
これをaaa aab aacをAND検索してmonaだけがひっかかるようにしたいんです。
PerlでPgを使ってるので外部プログラムを使ってAND検索を実現する方法でもいいです。
0581hmk
02/09/27 01:24ID:QE9TB9SPANDじゃなくてOR検索でしょ。。。
SELECT bar FROM baka WHERE foo='mona' AND bar IN ('aaa','aab',aac');
----
mona
mona
mona
SELECT DISTINCT bar FROM baka WHERE foo='mona' AND bar IN ('aaa','aab',aac');
----
mona
加茂。
0582nobodyさん
02/09/27 02:43ID:???この文でわかってしまった漏れもアレなんですけど、
fooにaaaとaabとaacを含むようなbarを求めろってことっしょ?
>581
のは、ただ
barにaaaか、aabか、aacを含み、かつ
fooにmonaな奴を出すってやつで違うんでは。
例えば、
bar|foo
---|---
aaa sii
aab sii
aac sii
ってのがあればsiiも出したいって事だろ(違うかな?
-----------------------
select tmp.bar from
(
SELECT
bar,
count(*) as cnt
FROM
baka
where
foo in ('aaa','aab','aac')
group by bar
) as tmp
where tmp.cnt=3
0583582
02/09/27 02:44ID:???2分で考えた奴で、あまり綺麗でないけど↑でどうでしょう。
cntにはinで指定した要素数入れてくれ。
select * from baka;
foo | bar
-----+------
aaa | mona
aab | mona
aac | mona
aaa | giko
aab | giko
abc | mora
aaa | sii
aab | sii
aac | sii
結果
bar
------
mona
sii
0584582
02/09/27 02:58ID:???Subquery Scan tmp (cost=27.79..27.90 rows=1 width=32)
-> Aggregate (cost=27.79..27.90 rows=1 width=32)
-> Group (cost=27.79..27.83 rows=15 width=32)
-> Sort (cost=27.79..27.79 rows=15 width=32)
-> Seq Scan on baka (cost=0.00..27.50 rows=15 width=32)
(;´Д`)y─┛~~
業務にこれ使わないでね(笑)
そもそもこういう問い合わせしなきゃならないってことはテーブル設計が拙い様な。
もっといいやり方あるかなぁ?
0585582
02/09/27 03:06ID:???嘘かいちった。
foo | bar
-----+------
aaa | mona
aab | mona
aac | mona
aaa | giko
aab | giko
abc | mora
aaa | sii
aab | sii
aac | sii
aad | mona
aaa | mona
0586582
02/09/27 03:14ID:???(
SELECT
bk.bar,
count(*) as cnt
FROM
(select distinct * from baka) bk
where
bk.foo in ('aaa','aab','aac')
group by bk.bar
) as tmp
where tmp.cnt=3;
一人芝居さびしぃ(;´ω`)
0587hmk
02/09/27 03:27ID:???苦戦してますね。
儂は現役を引退して、手許にDBがないので検証できまそん。
でもちょっと考えてみましょうか。。。
0588hmk
02/09/27 03:45ID:???EXISTS(SELECT * FROM baka WHERE foo='aaa' AND bar=bk.bar) AND
EXISTS(SELECT * FROM baka WHERE foo='aab' AND bar=bk.bar) AND
EXISTS(SELECT * FROM baka WHERE foo='aac' AND bar=bk.bar)
こんなこと出来たっけ?
0589582
02/09/27 03:56ID:???通ったよ。
別にこのぐらいで解決するのは苦戦って言わないんだけど^^;
可読性はいいね。コストは俺のがいいかも。
まぁ、explainで判断してもアレですが。
Unique (cost=75024.35..75024.67 rows=12 width=32)
0590hmk
02/09/27 04:06ID:???>別にこのぐらいで解決するのは苦戦って言わないんだけど
確かに、、、失礼しますた。
こんなんで>>576君には分かって頂けましたでせうか。。。
0591576
02/09/27 07:03ID:???適当な説明してしてなかったのに、丁寧に答えていただきありがとうございます!
今から家を出ないと逝けないので、帰ってきたら試してみたいと思います。
初期のシーラカンス本片手に個人でシコシコやってるDB初心者ですので
業務に使うとかそういうのはないです。
0593nobodyさん
02/09/27 12:36ID:???1. point型のxまたはy座標だけを SELECT というのはできるのでしょうか?
2. point型のデータをy座標順に SELECT というのはできるのでしょうか?
(1.ができればできそうですが。。。)
0594hmk
02/09/27 16:49ID:???演算子の ?- や ?| を使えばなんとかならないかなぁ。。。
0595593
02/09/27 18:55ID:???最初にテーブルを作るときに point でなく、int にしておけばよかったのですね。
0597nobodyさん
02/09/27 19:47ID:OLJtUF/o取り出したいのですが、簡単そうで全然できませんでした(;´Д`)
凄いSQLの初歩っぽい質問ですが、お知恵を拝借ください…
foo | bar
---------
1 | 1
1 | 2
2 | 1
2 | 2
2 | 3
3 | 1
というようなテーブルから、
foo | bar
---------
1 | 2
2 | 3
3 | 1
のように、それぞれのbarが最大値になっているfooを取得するselect文なのですが…
0598nobodyさん
02/09/27 20:44ID:???「それぞれのbarが最大値になっているfoo」というのが
いまいち意味がわからんのだが、例示されてる結果を出すだけなら
select foo, max(bar) from hoge group by foo;
で、いける。
0600597
02/09/27 21:06ID:???すみません、初心者ついでにもう一点お助けください。
先ほどのテーブルにカラムを追加してみたのですが、同じような foo と bar の
関係で baz を取り出そうとしたら全て取得されてしまいました。
SQL > select foo,max(bar),baz from hoge group by foo,baz
では安直過ぎたでしょうか…
foo | bar | baz
------------
1 | 1 | aaa
1 | 2 | bbb
2 | 1 | ccc
2 | 2 | ddd
2 | 3 | eee
3 | 1 | fff
0601nobodyさん
02/09/27 21:58ID:???0602hmk
02/09/27 22:49ID:???おまいはできるのかぇ?意外とむずくねぇか?
>>600
ちょっと考えてみたんだけど、下のを試してみよ。
儂DBもってなくて試せないから、結果の保証はできんが。
間違ってたら藁って下さい。
SELECT DISTINCT foo,bar,baz FROM hoge h1 WHERE NOT EXISTS(SELECT * FROM hoge WHERE foo=h1.foo AND bar>h1.bar);
0603597
02/09/28 00:30ID:???悪くはないと思うけど、
3 | 1 | ggg
があったらどうなりますかね・・・(藁
SELECT
fb.foo,
bb.bar,
bb.baa
FROM
(
SELECT
foo,
max(bar) as bar
FROM
"2ch"
GROUP BY
foo
) as fb
left join
(
SELECT
*
FROM
"2ch"
) as bb
on fb.bar = bb.bar and fb.foo = bb.foo
0604597
02/09/28 00:31ID:???あー、PGバイト&飲み帰りで眠い・・・金曜はねぇぇぇ(;´ω`)
>598にちょっと手を加えた手抜きverっす。
スキーマちょっとちゃうけど。
たぶん、Merge Joinじゃなく、Nested Loop Join使った方が、
データ量小さい場合は早いかも。
-----------------------
foobarbaa
11aaa
12bbb
21ccc
22ddd
23eee
31fff
23ggg
------------------------
[結果リレーション]
foobarbaa
12bbb
23eee
23ggg
31fff
0605597
02/09/28 01:51ID:???ありがとうございます。
ちゃんと期待通りの結果を取得してくれました!
理解できるまで、今まででかかってしまったのですが…
>>603-604
598さんなのでしょうか。度々ありがとうございます。
3 | 1 | ggg は、私も思いついていなかったです。ますます複雑に(;´Д`)
left joinを使ったSQL文は初めて見ました。勉強になります。
うう、思った以上に難しいです。精進します…。
0606nobodyさん
02/09/28 02:58ID:???interval型を使って年-日-時でデータを管理しているのですが、
時から日への繰り上がりは24時間でやってくれるのですが、
日から念への繰り上がりは、365日で1年への繰り上がりを期待したら、
どうやら360日で繰り上がってます。
カウントの値ですので、もちろんうるう年などは考慮に入れなくてかまいません。
interval型を使ったときの繰り上がり日数の指定ってできないのでしょうか?
0607582 ◆6C3D/kPs
02/09/28 03:04ID:uO9XS1Su変な名前入れちまったな...(汗
朝生見つつ、酔いが冷めました。
0608nobodyさん
02/09/28 03:19ID:9vPkzBLd6.5.3(でぶあんイモのサーバなのだ(T_T))のPostgreSQLで
SELECT COUNT(*) FROM (SELECT DISTINCT TEL FROM ORDER WHERE TEL = '03%') AS TEMP_TABLE
ってやったら怒られた出巣。
0609nobodyさん
02/09/28 03:22ID:???0610hmk
02/09/28 03:40ID:???>>608
こんなことできなかったっけ?
SELECT COUNT(DISTINCT tel) FROM order WHERE tel LIKE '03%';
0612608
02/09/28 04:28ID:9vPkzBLd失礼、そのとおり(^^;
>>610
いや、アレはあくまで例題なので(^^; メインは「副問い合わせが使えるか」側なんですよ。
……でもこっちも×でした(^^;
0614608
02/09/28 05:18ID:9vPkzBLdにゃ、確かにコレでは×ですね。でもこれもやっぱり例題なのでし(^^;
こっちのテスト環境では「users_pre」なのでしね
0615nobodyさん
02/09/28 05:33ID:2Rxq6k1c0616nobodyさん
02/09/28 17:12ID:???例がひどすぎることが指摘されてるんだから、もう一回書き直せば?
あと、そのSQLを発行したらなんと言って怒られたかぐらいも書けば?
更に何故マニュアルを見ないの?
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/release-6-3.html
あんまし、まじめに調べる気にもならんかったから的外れかも知れんが
副SELECTの実装はこの辺りかららしい。
0617608
02/09/29 03:08ID:6ztDeH/mでは改めて
SELECT COUNT(*) FROM (SELECT DISTINCT TEL FROM users_pre WHERE TEL = '03%') AS TEMP_TABLE
で
parser: parse error at or near "select"
となります
0618608
02/09/29 03:08ID:6ztDeH/m失敗。
SELECT COUNT(*) FROM (SELECT DISTINCT TEL FROM users_pre WHERE TEL Like '03%') AS TEMP_TABLE
でした
0619608
02/09/29 03:32ID:6ztDeH/mロジック(今回はJSPだが)で実装するしかないのかよー
0620nobodyさん
02/09/29 16:32ID:???ってのは、Postgreだとどうなるんですか??
Postgreも日付を加減したら日数になるの?
0621620
02/09/29 16:45ID:???"WHERE this_date < to_date('7日前')"ですかね?
7日前ってのは"'now'-7"??
0622nobodyさん
02/09/29 16:45ID:???Oracleは知らんので同じ意味かどうか分からんけど
"WHERE this_date < 'current'::timestamp - '7 day'::interval"辺りか?
0623620
02/09/29 17:03ID:???"::型"で型宣言するのね。
"SELECT this_date-1" で1日前の日付、
"SELECT current_date-this_date" で日数差も出ますた。
"SELECT now()-this_date" だとintervalになるのね……。
0624nobodyさん
02/09/30 02:51ID:NEg9lBdJ7.3dev (built 2002-09-24) のJDBC3ドライバは
7.1でも動作する下位互換性はあるのでしょうか?
それとも7.3用に作られているのでしょうか?
(Development Driverだから動作が不安定とかいうことではなく
動作対象として7.1も考慮されているかということ)
0625624
02/09/30 02:52ID:???0626v
02/09/30 04:59ID:XCndXDeC0627nobodyさん
02/09/30 21:37ID:Lh/LQWZcServletがJDBCドライバを読み込んでくれません。
#コンパイルしたあと、サーバーにおいてアクセスすると
#ClassNotFoundExceptionが出る。
JDBCドライバは
http://jdbc.postgresql.org/download.html
から落としたpgjdbc2.jarで、これにCLASSPATHを指定しています。
どうすれば使えるようになるのでしょうか。。。
環境は
Postgres7.1.1
JDK1.4.1
アプリケーションサーバーにTomcat4.1.10を使ってます。
0628nobodyさん
02/10/01 00:33ID:wXqFyCgz> ロジック(今回はJSPだが)で実装するしかないのかよー
UNION 使えばごまかせる。
0630608
02/10/01 01:57ID:B9rqrzrNえっ? どうやって? 教えてプリーズ!
副問い合わせが使えるなら思いついたコトあるんだけど、これもダメだとなるとちょっと思いつかない。
……以下に今まで恵まれた環境にいたかってコトだよな、これ(T_T)
0631608
02/10/01 01:59ID:B9rqrzrNExecSubPlan: null value returned by expression subselect
ってどんなエラー? ……「expression subselect」って、だから副問い合わせなんかつかってねーっつーの!(T_T)
必要ならSQLあげますが、まずはどんな(場合に出る)エラーか教えてくださいまし(T_T)
0632582 ◆6C3D/kPs
02/10/01 03:36ID:???0633582 ◆6C3D/kPs
02/10/01 03:41ID:???つーか、google検索すりゃトップに出るやん。
0634608
02/10/01 03:50ID:B9rqrzrN英語ページは回避してました(^^; で、自動翻訳……
バグか? バグなのかっ?(T_T) どーすりゃ回避できるんだっ?!
……勘弁してくれ……(涙)
0635627
02/10/01 07:11ID:rRTf7Iurアドバイスありがとう。
やってみるす。
0636nobodyさん
02/10/01 11:41ID:EVd52m24テーブルA、テーブルBがあるとして、inner join だとAとB、両方にある行しか出ない。(SQL1)
そこでサブクエリーをつかって、Aにあって、かつBにないものを抽出。(SQL2)
SQL1 union SQL2 とすると、outer join したのと同じ結果になる。
詳しくは数年前のメーリング・リストの記事を参照。同じネタ出ていたよ。
0639627
02/10/01 21:23ID:???てことはやっぱCLASSPATHがおかしかったのか。。。
CLASSPATHは入念にチェックしてたのにな。
0640608
02/10/02 01:19ID:9gZ3jv4a>>617&>>618のとおり出巣。このとおりに打ってこのエラーが出る出巣。もちろん、
SELECT DISTINCT TEL FROM users_pre WHERE TEL Like '03%'
でエラーが出ないことは確認してある出巣(T_T)
0641hmk
02/10/02 01:42ID:???SELECT COUNT(*) FROM users_pre u WHERE tel like '03%' AND NOT EXISTS(SELECT * FROM users_pre WHERE tel=u.tel AND oid<>u.oid);
こういうのもたぶん駄目なんだろうな。。。
上手い問い合わせはないもんでしょうか。
0642hmk
02/10/02 03:46ID:???SELECT ... FROM (SELECT ...); のように、
FROM句にSELECTが来る問い合わせをインラインビューと呼び、
これはすべてのRDBMSで実装されてはいないらしい。
ちゅーことは、>>641のような相関副問い合わせなら通りそうなんだけど。。。
儂はPostgres持ってないんで試せまそん。誰かやってよ。
0643nobodyさん
02/10/02 05:35ID:TiRO3wLQ0644nobodyさん
02/10/02 18:05ID:???”年月日”だけをひっかけて件数を取得したいのですが
何か手はありますでしょうか?
LIKEでやってみたのですがひっかかりません。
0646644
02/10/02 18:27ID:???select * from テーブル名 where date(timestamp型)= '2002-10-02';
上記でできました(泣)
ありがとうございます。
0647nobodyさん
02/10/05 12:51ID:2T2tvBuJ通貨型のmoneyを使ってみたのですが、
サンプルデータとして'123456789'と入れると
($5,392,229.88)
に化けました…。
なぜなんでしょう。
どうやって入力すればいいのですか?
教えてください。
0648nobodyさん
02/10/06 11:14ID:???桁あふれ。
http://ml.postgresql.jp/pgsql-jp-old/pgsql-jp/1997Nov/msg00092.html
0649nobodyさん
02/10/06 20:35ID:YiJCOGQBSELECT SUM(カラム) as total FROM テーブル;
みたいなことできないでしょうか?
0651649
02/10/07 23:51ID:AXMG8FcF0652nobodyさん
02/10/08 11:18ID:???SELECT COUNT(*) FROM meinDaten;
count
-------
0
(1 row)
アツカウベキデータガナイノデイミガナイ、鬱だ氏脳。
0653名無しさん@Emacs
02/10/08 13:59ID:???> mein
ちゅースペルが気になる。
0654nobodyさん
02/10/08 14:38ID:???その後のデータも含めて見てみれ。
meinDaten
つまり、mainDataのドイチュ語版だろ。
Ich bin mein daten !
0657nobodyさん
02/10/09 07:55ID:???0658nobodyさん
02/10/09 10:49ID:???int型のフィールドに対して
''をインサートを実行すると自動で0が入ってしまうのですけど
''のままインサートできないものでしょうか?
0659nobodyさん
02/10/09 10:50ID:oibqlApD0661652&655
02/10/09 13:56ID:???You can't insert NULL STRING into int-type field.
It's でーべーの基本やね.
As >>660 said, using NULL value instead is recommended.
0663nobodyさん
02/10/10 02:39ID:dij3CJ32こんな中途半パンパなネタでもないスレタイトルが
でてきてしまうほどここは低下してしまったのか。
なんて。思ったり。
CGI VS PHP!
ワラェネェ。
0664nobodyさん
02/10/10 02:39ID:dij3CJ320665anonymous
02/10/15 15:35ID:6HlJOXo9#postmaster -D /usr/local/pgsql/data
とすると、下記のエラーが出ます
できるだけ、OSのパラメータはいじらずにこれを回避させたい
のですが、どうすればいいでしょうか?
IpcMemoryCreate: shmget(key=5432001, size=1441792, 03600) failed: Invalid argume
nt
This error usually means that PostgreSQL's request for a shared memory
segment exceeded your kernel's SHMMAX parameter. You can either
reduce the request size or reconfigure the kernel with larger SHMMAX.
To reduce the request size (currently 1441792 bytes), reduce
PostgreSQL's shared_buffers parameter (currently 64) and/or
its max_connections parameter (currently 32).
If the request size is already small, it's possible that it is less than
your kernel's SHMMIN parameter, in which case raising the request size or
reconfiguring SHMMIN is called for.
The PostgreSQL Administrator's Guide contains more information about
shared memory configuration.
0666nobodyさん
02/10/15 19:04ID:0ZpQ3Voy解決方法、メッセージに出ているよね?
reduce PostgreSQL's shared_buffers parameter (currently 64) and/or its max_connections parameter (currently 32).
0667login:Penguin
02/10/15 19:38ID:???I'll change parameter of buffer.
thank you.
0668anonymous
02/10/16 08:44ID:o+8CpqDw具体的にどのファイルのパラメータを変更すればいいのでしょうか?
0669nobodyさん
02/10/16 12:40ID:???0670super
02/10/16 15:19ID:o+8CpqDwというコマンドをスクリプトを作って実行したいのですが
上を書いたファイルを作成して$chmod +x start
$./start
してもchange directory されません。
どうすればいいでしょうか?
0671nobodyさん
02/10/16 15:24ID:???0672super
02/10/16 15:49ID:o+8CpqDwcd /usr/local/pgsql/data
という内容の start というファイルを作成しましたが
$./start
しても実行されません。
0673nobodyさん
02/10/16 16:47ID:???0674AAA
02/10/16 18:46ID:ZpB3Pmml何も表示されません。
うまく動作したと思って
PWD してみるとディレクトリは
かわっていません
SOLARIS 2.6 ON SPARC です
0675nobodyさん
02/10/17 00:12ID:???0676nobodyさん
02/10/17 03:10ID:ychsNVf3こんな環境でjoinしまくりでselectを発行すると当然遅い・・・。
なので、カーネルをいじってソートメモリ増やしたりするが、
shm,semあたりがいまいちわからず・・・・。
Postgres用にメモリを最大限割り当てて、高速化を図りたいです。
shm,semあたりをご教授ください。なんとか高速化したい!!!
環境:
FreeBSD4.5
Postgres7.1.2
■ このスレッドは過去ログ倉庫に格納されています