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
0524nobodyさん
02/08/31 17:32ID:???contribとintarray,arrayあたり使えばできるよ。
ただ、配列使うとindex使われないからあまりいいスキーマ設計とはいえないね。
まだ
"ABC"、"ADE"とかで前方一致(LIKE)で検索した方がいいような。
0525nobodyさん
02/08/31 17:32ID:???contrib!の!
0526動画無料サンプル
02/08/31 22:55ID:AF4irkr1小学生、中学生、女子高生が【無料】で見れる!!
http://www.traffimagic.com/WIPE7MMLZCA/comein/NZKYA
0527123
02/09/01 02:40ID:Rn3wDJdFSQLはcse使っているけど,あれではストアド作ることしかできないよな。
いい開発環境がないと,どうもそもそも使う気になれない。
ただ,SQLにソースを書くのは好きではないので,PostgreSQLでもストアドはやっぱり使いたい。
誰かいい開発方法知らんかのぉ。
普段使ってるストアドはTransactSQL(SQLserver)になるが,
たとえば,こんなものを作るとする。
DECLARE @no int
SET @no = 1
SELECT *
FROM TABLE
WHERE no = @no
@no = 1 でSELECTするということ。
これをクエリマネージャとか使うと結果も見れる。
ストアドに変えようと思ったらそのまま,
上と下に Createprocedre [selectno](こんなんだっけ) go とかつけて,
SET = としているとこをパラメータ渡しに変えたらストアドになるしね。
こんな簡単なSQLだったら,一発で作れるだろうが,ちょっと複雑なもので
テストとか繰り返して,作ろうと思ったら,開発環境いるよな。
また,コンソールから exec selectno(1)
みたいにしたら,ストアドをキックできて,結果も見れる。
こんなことしながらの開発PostgreSQLで出来るのかな。
とりあえず,ストアド作った後にそれを実行するのが,
プログラムからしかできないのはきつい
0528nobodyさん
02/09/01 03:21ID:???ストアド作るごときエディタでええやん。
頭ん中で流れ考えるんだよ(w
それが面倒ならmssqlserverでも買ってなさいってこった。
pgaccessでやれることが限界では。
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/app-pgaccess.html
テキストベースでできた方が何かと便利。
遠隔操作とかにも都合がいいし、テストをちょちょっとスクリプトで書いたり。
0529522
02/09/01 18:41ID:/oI3M69SPosgreSQLから出したデータをSJISなどに変更
ってどうやるんでしょうか・・・
0530nobodyさん
02/09/01 21:06ID:???0531522
02/09/01 23:39ID:/oI3M69Spsqlで
SET CLIENT_ENCODING = 'SJIS';
とやってみたんですが、Webで表示してる方には変化がなくて・・・。
HTMLのCharsetをEUCにすると日本語はOKなんですが関係ない部分が
なぜか文字化けてしまいました。
0532nobodyさん
02/09/01 23:45ID:???�@ラージオブジェクトを例えば
INSERT INTO t1 (id, oid) VALUES (1, lo_import('/tmp/hoge'))
で作ったとして、それを削除したいときには
DELETE FROM t1 WHERE id = 1
で削除するだけでいいんでしょうか?ゴミとかは残りませんか?
�A上記の例でさらに
UPDATE t1 SET oid = lo_import('/tmp/hoge') WHERE id = 1
なんてしちゃった場合、元のラージオブジェクトはどこに行ってしまうのでしょう?
自動的に削除されるのでしょうか?ゴミとかは残りませんか?
0533522
02/09/01 23:50ID:/oI3M69S0534nobodyさん
02/09/06 02:31ID:tscmWiVv1カラムに1Gがのデータを入れると、8kのカラム容量制限に引っかからないですか?
0535nobodyさん
02/09/06 08:36ID:KP0wE/mN8kのカラム容量制限 は、7.1 で解決済み。
最新版使ってれば全く問題ない。TOAST という技術。
私はメールの本文とかを丸ごと1カラムに格納してる。
0536ななしし
02/09/06 12:16ID:o0uKxXbL残ります。
lo_unlinkをかけてあげましょう。
0538nobodyさん
02/09/06 18:21ID:6cS1MLb+ありがとうございます。
助かりました。
05398月のクリスマス ◆zzfy/JR2
02/09/06 18:37ID:zUklKDWI$result=pg_exec("select * from nwpersonal ");
を実行すると下記のエラーが発生するのですが
どうしたらよいのでしょうか?
分かる方よろしくお願いします☆
Warning: PostgreSQL query failed: ERROR: nwpersonal: Permission denied.
0541nobodyさん
02/09/08 09:08ID:???0542nobodyさん
02/09/08 12:44ID:???0543nobodyさん
02/09/09 01:15ID:Ek+d2LV7件数は1万件以上ですが、テキストファイル保存に比べて、
パフォーマンス上問題はないでしょうか?
0545nobodyさん
02/09/09 20:33ID:???しかし、作り込まれたRDBMSよりパフォーマンスが出るフラットファイルの
入出力を作るのは至難の技。
それに、ふつーに作れば、ネットワークの帯域の方がボトルネックになって、
I/Oなんてどっちもどっち。
イントラとかなら別だが。
0546nobodyさん
02/09/10 09:52ID:VSIVhwr4普通のスレッド型掲示板です。
スレッドを表示する場合はスレッドIDが一致するものだけ取り出そうかと。
0547nobodyさん
02/09/10 17:03ID:20uIzqy9Pear DBパッケージのStatementを用いた挿入がうまくいきません。
【PHP】質問スレッドとPHP+MySQLでたずねたのでマルチになりますが。。。
どなたも答えてくれませんので、またここで、質問を投げます。だめですか??
※日付型(書式:yyyy/mm/dd HH:mm:ss)は現在時刻を挿入する。
※日付型以外(文字列、数値型)はうまくいきます。
エラー内容
SQLエラー → ステートは37000
コードは以下です。
/**
* インサートテスト
*
* @access public
* @param ProductState $ps 製品状態情報
*/
function insert($ps)
{
// DB接続
$this->connect(); // $this->db = DB::connect( $dsn )にて取得。
// SQL文
$sql = "INSERT INTO user (id,name,date) VALUES (?,?,?)";
// Statement取得
print "date=" . date("Y-m-d H:i:s",time()) . "\n";
$stmt = $this->db->prepare( $sql );
// SQL発行
// $this->db->execute($stmt, array($ps->id,$ps->name,time())); //これもだめでした。
$this->db->execute($stmt, array($ps->id,$ps->name,date("Y-m-d H:i:s",time()) ));
// DB切断
$this->db->disconnect();
}
0548nobodyさん
02/09/10 17:05ID:20uIzqy9自分のイメージ的には、JavaのJDBCの様に使いたいのです。
よろしくお願いします。
0549nobodyさん
02/09/10 22:04ID:???日付のフォーマットが問題なら、
フォーマットするwrapper関数みたいのを作ればいいじゃん。
100% RDBMS依存を無くしたいなら PEAR に contribute しる。
0550nobodyさん
02/09/10 22:55ID:ecEmpk8F日付をフォーマットしたいのか?
to_char() 使え。逆の関数もあるぞ。
Postgres 提供の関数だから、SQL 中に記述できるぞ。
0551nobodyさん
02/09/11 06:26ID:MyJQslI1PostgreSQLはよくわからんのだが、
date("Y-m-d H:i:s",time())
DATE型は「年月日」までじゃないか?入力形式。
H:i:s は無視されるだろ。つか「フィールドの型がちがうぞ!エラー」じゃないか?
時分秒を扱うならTIMESTAMPにすれば?
0552nobodyさん
02/09/12 03:22ID:r6MxR56R0553nobodyさん
02/09/12 11:57ID:???0554nobodyさん
02/09/12 12:18ID:r6MxR56Rデータファイルはどこにあるの?
0555nobodyさん
02/09/12 12:43ID:???0556nobodyさん
02/09/13 17:18ID:39GWJCRQ平分パスワードで接続できるのですが暗号パスワードで接続できません。
つまりpg_hba.confでcryptとした後接続できません。
どうすればいいんでしょうか?
そもそもパスワード暗号化は可能でしょうか?
0557nobodyさん
02/09/13 20:30ID:???ドキュメント見れ。
0558557
02/09/13 22:28ID:???生パスワードとMD5でエンコードしたのしかサポートしてないんだね。
TODOリストみても「やる気有りません」ってかんじでにんともかんとも。
src/interface/odbc/connection.c
src/interface/odbc/TODO.txt
というわけで、ODBCつかって平分のパスワードが嫌ならmd5を使えって事で。
0559nobodyさん
02/09/17 10:12ID:???うちはcse使ってるんですが、やっぱりcryptが使えないです。
pg_hba.confでpasswdに設定してファイル名を指定しない場合は
pg_shadowからパスワードを読むのですが、
暗号化されているのかどうかはなはだ疑問です。
0560nobodyさん
02/09/17 18:00ID:???0562nobodyさん
02/09/20 18:55ID:/MLJ70M7オラクルやSQL Serverにはあって重宝していたんですが・・・
0563nobodyさん
02/09/20 19:58ID:M7U2JFRIcron + psql じゃダメ?
0565ID 変わってるだろうけど、563
02/09/21 00:40ID:NjgR42bS少なくとも、別ファイルに記述した SQL を
psql に読ませて実行することはできる。
方法はマニュアルに書いてあるから調べてごらん。
私の場合、テスト用 DB 構築 SQL を書いたファイルを用意して、
テストするたびに CRAETE TABLE からやってる。
0566名無しさん@XEmacs
02/09/21 01:35ID:???0567nobodyさん
02/09/22 21:46ID:6gZmFq4J0568nobodyさん
02/09/22 22:16ID:auOB9C4fPreferencesの設定が保存されなくなってしまいました。
以前のWindowsNative版の時は設定保存できましたが、
Cygwinにしたら保存できなくなったようです。
お助けください。
0570nobodyさん
02/09/25 01:31ID:???0571nobodyさん
02/09/25 18:44ID:GgIwIpkD頑張ってるんですが、JDBCの部分でつまづいてしまっています。
jdbcのディレクトリでmakeすると、postgis.jarができるようなことが
マニュアルに書いてあるのですが、何故かできません。
(http://postgis.refractions.net/docs/x168.html)
makeは問題なく完了しているようなのですが…
どこが問題なのでしょうか…?
0572nobodyさん
02/09/25 21:21ID:???CGI+PostgreSQLで遊んでみようとおもってるのですが、
データ更新中 or セットの2つのテーブルのうち1つだけ
更新した後にブラウザの停止ボタンを押した場合とか
どうなるんですか?
0573nobodyさん
02/09/25 21:36ID:???0574nobodyさん
02/09/25 22:14ID:???0576nobodyさん
02/09/27 00:15ID:???___|____
aaa|mona
aab|mona
aac|mona
aaa|giko
aab|giko
abc|mora
というテーブルでaaa aab aacを指定するとmona(だけ)を表示するような
selectの書き方を教えてください。
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になるのね……。
■ このスレッドは過去ログ倉庫に格納されています