トップページphp
1001コメント345KB

PostgreSQL

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001名無しさん@お腹いっぱい。2001/05/09(水) 11:36ID:GHX.oCXo
PostgreSQLについて語りましょう。
関連アプリケーション特有の話題は、以下のスレッドへ。

☆関連スレッド
[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
0827nobodyさん03/01/10 11:30ID:fFednd0x
Redhat7.2 でデフォルトのrpmパッケージで
postgresqlを稼働させています。

文字コードをEUC_JPにしたいのですが、
redhatデフォルトだと、
 template1 | postgres | SQL_ASCII
とSQL_ASCIIになります。

ソースからインストールするときは、./configure
で指定するやり方は知っているのですが・・・

お手透きの時で結構ですので、ご教授願います。
0828nobodyさん03/01/10 15:49ID:???
>>827
Redhatは使ったことが無いのでどういったオプションで
コンパイルされてるかはわかんないけど、
initdb -E EUC_JPとかcreatedb -E EUC_JPではどうですか?
0829nobodyさん03/01/11 02:38ID:???
>>828
その方法だと、見た目はEUCだけど、実際はSQL_ASCIIになっちゃうんじゃなかったっけ?
自信ないから、ごめん。
0830nobodyさん03/01/11 03:02ID:???
普段はSQL_ASCIIにしてるからよく知らないけど、
http://www.postgresql.jp/document/pg721doc/admin/multibyte.html
をみると、それでいいみたい。
0831nobodyさん03/01/11 21:35ID:yqAMD38w
int型UNIX時間をPostgreSQLのtimestamp型に変換するにはどうしたらいいの?
0832山崎渉03/01/15 13:33ID:???
(^^)
0833nobodyさん03/01/16 16:40ID:ru9T9Sg6
TIMESTAMP型のフィールドを持つテーブルがあったとして、
例えば、2002年12月中のデータだけ抽出するには、どんなパラメーター
で出来ますか?

強引に、
TIMESTAMP>'2002-12-01 00:00:00 AND TIMESTAMP<2002-12-31 23:59:59'
とすれば出てきますが、アプリケーションからパラメタとして引き渡すのに
しんどいです。
0834nobodyさん03/01/16 19:19ID:n/WrAFU3
>>833
WHERE to_char(TIMESTAMP, 'YYYY-MM') = '2002-12'; じゃダメ?
083583403/01/16 19:31ID:n/WrAFU3
うーん、もっとスマートな方法が思いつかない・・・。

「2002年」だけとか「12月」だけとかなら、以下の方法でもいいかも。
http://ml.postgresql.jp/pgsql-jp-old/pgsql-jp/2000Jun/msg00574.html
1.誕生月を指定して、検索(SELECT)するには?
(6.5.3)
SELECT * from birthday from where date_part('month', birth)='6';
SELECT * from birthday from where date_part('month', birth)='06';
(7.0 or later)
083683403/01/16 19:35ID:???
同じ質問があった。
[pgsql-jp 15577] Re: 日付型のSQLについて
http://ml.postgresql.jp/pgsql-jp-old/pgsql-jp/2000Jun/msg00616.html
083783303/01/17 11:11ID:tgNj6nW9
>>834
>>835
>>836

ありがとうございます。
試してみたら、めちゃくちゃレスポンスが悪かったです。
>>836の紹介記事にもあったのですが、変換したりすると、せっかく設定
したインデックスが使われないようです。

諦めて、しんどい方法でやっていくことにします。
0838nobodyさん03/01/17 15:04ID:O7wqB+4a
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
createdb: database creation failed

というようなエラーが出てしまい、データベースを作成することができません。
postmaster は起動しているようです。
どうしたらいいのでしょうか?
0839vvv03/01/17 15:15ID:RZuaWe8+
http://www6.ocn.ne.jp/~endou/index2.html
     ★YAHOOOプロフィール★
0840nobodyさん03/01/19 17:40ID:???
>838
man postmasterして-iオプションの項目を読め。
それでも分からなければ、どういう環境でどうやっらだめだったかを書け。
0841nobodyさん03/01/19 21:11ID:???
>>837
元々のtimestampじゃなく、>>834-836のような変換後の値に
関数インデックス、って手もある。
0842nobodyさん03/01/20 17:54ID:Gy69YlCs
>>826
遅レスすまそ。
レプリケーションは7.3で導入する予定だったんだけど間に合わず、
7.4に持ち越しになったんじゃなかったっけ?
というわけで、現行のレプリケーション用ミドルウェア?は
なくなるような気がする罠
0843nobodyさん03/01/20 18:40ID:frlninEM
(゚д゚)ウマー
0844nobodyさん03/01/20 20:16ID:???
>842
レプリケーションは、アーキテクチャや実装、運用環境によって、
複数のソリューションが並立し得るので、
単一の実装に収斂していくということはないでしょう。
0845nobodyさん03/01/21 21:43ID:k4hDw3ac
Software Design 2003年2月号の Webシステムチューニングパーフェクトガイドという特集で、
Postgres での負荷分散と分散トランザクションについての特集やってたよ。

かなり面白い。
0846nobodyさん03/01/22 17:56ID:46vMCsSo
Redhat+PostgreSQL+PHPでwebprogをやっています。
端末は、主にwinから行っています。

SQLに関しては自信があまりありません。
SQLコマンドポチポチうって、テーブルの作成するの面倒でつ。
http://www.hi-ho.ne.jp/tsumiki/のCSEと言うツールを使っているのですが、
いまいちしっくり来ません。
webminのpostgresqlのツールは良いのですが、webmin自体
あまりインスコしたくありません。

なにか(・∀・)イイ!!ツールあったらおしえてください。
0847nobodyさん03/01/22 18:23ID:aZrGkOwn
phpPgAdmin
0848hmk03/01/22 18:45ID:skROudWD
>>846
テキストエディタでテーブル定義のSQLを編集し、psql上にコピペしろ。
0849nobodyさん03/01/22 18:59ID:???
頻繁にテーブルを作ったり消したりするなら、makeコマンドを使うのもいいぞ。
まぁテーブル定義のSQLは自分で書くわけだが。
0850nobodyさん03/01/22 19:45ID:???
なにもコピペしなくても、
psql -f table.sql でファイルを読ませればいいじゃん。
0851hmk03/01/23 00:21ID:???
ふーん。今度試してみよう。
0852nobodyさん03/01/23 01:33ID:aJndFgws
win2000でcygwinをいれてPostgreSQLとPHP
を使って住所録を作ってます。
そこに「最初に登録した日付」と、「最終更新日」をいれようと
思ってるんです。
最終更新日をTIMESTAMPにすればいいというのは、
検索してわかったんですが、最初に登録した日付というのは
どういう設定をすればいいでしょうか。
0853gn355my003/01/23 02:14ID:???
>>852
now()
0854ほげ03/01/23 10:36ID:Vttepi7g
>>852
default now,
ほげほげ。
0855nobodyさん03/01/23 15:18ID:2Xl85Zl1
PostgreSQL7.3.1-1つかっていて
"pg_relcheck" does not exist
になりました。pg_relcheckはなくなっちゃったんでしょうか。

0856nobodyさん03/01/23 16:16ID:MK3OE1fp
http://jsweb.muvc.net/index.html
     ★こんなサイト見つけました★
0857nobodyさん03/01/23 17:24ID:zqFajCIj
>>855
このページを pg_relcheck と pg_constraint でページ内検索してごらん。
http://osb.sra.co.jp/PostgreSQL/7.3/changes.html
0858nobodyさん03/01/24 20:45ID:+YoyoLvT
pgsql-jpはなんでスレッド切る人ばっかりなんだ
0859nobodyさん03/01/27 23:38ID:qiTUaeBV
apache+PHP+ipc-daemon+postgresといった環境を作ったのですが、
$ psql -U username dbname < database/database.pgsql
と実行すると
\connect: FATAL: user "root" does not exist
となってしまいます。どの設定(環境変数?)を訂正すれば
よいのでしょうか。
0860nobodyさん03/01/28 15:08ID:oYLjlQQn
ユーザを作ればいいんじゃない
0861nobodyさん03/01/28 17:58ID:???
ipc-daemonてことはWindowsか。
>>860のいうようにユーザ作ってから先でまたコケそうだな(w
0862nobodyさん03/01/29 20:04ID:TOlFKMtQ
誰か教えてください・・
複数テーブルの特定の列の中から検索したいんです
下記のようにテーブルを必要なところだけ結合して
そのあと検索文字をいれればいいと思ってたんですが

SELECT A.m,B.n FROM A,B WHERE A.o = B.o
このあとに検索したい文字をいれてもだめなんですよね?
0863nobodyさん03/01/29 21:11ID:???
すいません、解決しました。が、解決してまた困ってます・・・

SELECT A.m,B.n FROM A,B WHERE A.o = B.o AND A.m LIKE '検索言葉%'
はできましたが、
A.m,B.nに対して同じ検索言葉で検索をかけたいんですが
どうすればいいでしょうか・・・
0864nobodyさん03/01/29 22:03ID:???
>>863
WHERE ( a.a = b.a OR c.c = d.c) AND (e.e = f.f)
とかそういう単純な話ですか?

SQLはどこで(あるいはどの本で)勉強してます?
0865nobodyさん03/01/31 18:45ID:9q8lNi9S
PowerGresベータでたね。
0866nobodyさん03/02/03 00:09ID:NaYZglLl
ポアグレは、商用か。。。
最近のWin版ポスグレは、どうなのん?
http://download.desk.ne.jp/win/2/00026/4991.html
http://www.nonsensecorner.com/pgsql/
0867nobodyさん03/02/03 01:05ID:???
PowerGresが30日の限定で凹んで、cygwinのを入れてみた。
一年半ぐらい前に入れたときは自分でcompileしたんだが今のはcygwinのインストール時にインストールできる。
性能はどうだろうなぁ。普段使ってるLinux鯖はCPUパワーも違うのでよく分かんないや。

Win用apache、PostgreSQL@cygwin、php@winでちょっと遊んでみたけど、
ローカルで実験するには問題ないみたい。

ついでにFireBird、MySQLも入れてみたが、どれも正常に動いた。
0868nobodyさん03/02/03 01:18ID:lZTOrefb
ポスグレってユーザごとにデータベースへの、
アクセス権限付けれん?

grantだとテーブルごとじゃんか
0869nobodyさん03/02/03 02:12ID:???
俺も30日限定には参った。
せめて個人用途向けにはFreeで出して欲しかったよ。

Native版pgsqlの作者もPowerGresの開発に携わっていたみたいだが、
7.3.1用psqlは作っていたからその後も継続すると思うんだが。
0870nobodyさん03/02/03 10:57ID:avIlzK7i
やっぱしWinで使うならMySQLがこなれてるかな。
0871nobodyさん03/02/03 16:28ID:KAKRkF84
>>870
WinならFirebirdだろやっぱり。
0872nobodyさん03/02/03 20:46ID:UWLHra2g
PowerGres入れてみたけど、異様に遅い。
まだベータなのでしかたないのかもしれないけど。

CREATE TABLE test (
code VARCHAR(64) NOT NULL,
field001 VARCHAR(64) NOT NULL,

field032 VARCHAR(64) NOT NULL,
PRIMARY KEY (code)
)
(本当はfieldをもっと増やしたかったけど、firebirdの制限に引っかかるため)

これに3万レコードINSERTして、
SELECT * FROM test ORDER BY code;を発行すると、
MySQL-MyISAMが00:13:79
MySQL-InnoDBが00:09:413
Firebirdが00:14:010
PwerGresが13:06:851

ちなみにテストして思ったけど、FirebirdのJDBCドライバってリークしてない?
0873nobodyさん03/02/04 01:18ID:1kJ2WuvK
Firebirdって、実績あるの?
0874nobodyさん03/02/04 01:48ID:???
>>873
元になってるInterBaseは実績あるよ。
続けるならスレ違いになりそうだから、プログラム板にどうぞ。
てか、最近そっちにスレがあることに気付いた(w
087587303/02/04 11:18ID:1kJ2WuvK
>>874
Thx!!
0876nobodyさん03/02/04 13:12ID:P8TNJ8Cd
ム板のスレ見てみたけど、微妙だね。小規模ならMySQLの方が良いかなぁ。
PowerGresに期待したいのだが、こっちも微妙だ。
0877nobodyさん03/02/04 13:56ID:1kJ2WuvK
海外だと、大規模サイトのバックエンドでも、MySQL使ってるらしいじゃん。
0878nobodyさん03/02/04 14:00ID:P8TNJ8Cd
まぁ、プラットフォームがWindowsだから。
0879nobodyさん03/02/04 18:54ID:ECWcc/cR
MySQLはカーソルとストアドがないからねぇ。
5.0で実装されるらしいけど。

サーバーサイドでFirebirdを使った場合、
同時アクセス200以上に耐えうるかも疑問。
SQLServerだと200くらいから性能が落ちてくるみたいだし。
http://www.eweek.com/article2/0,3959,293,00.asp
0880nobodyさん03/02/04 19:48ID:Ogsd33ZD
SQL-Slammer騒ぎで、もはやSQL-Serverの信頼は地に落ちたね。
0881nobodyさん03/02/05 10:06ID:???
>>880
パッチをあてない社員が社内で信頼されなくなっただけ。
0882nobodyさん03/02/05 16:19ID:???
>>881
一般人はそうは思わんでしょ
0883nobodyさん03/02/05 16:40ID:WE3fnQsD
決裁権のある、企業のお偉方の認識はすでに、
「SQL-Serverはダメだ」

米セキュリティ企業大手も、SQL鯖には落第の"F"をつけたらしいじゃん。
0884nobodyさん03/02/05 17:00ID:???
つまりさ、当てなきゃいけないパッチが多すぎる、
あるいはパッチの副作用が大きくて管理者に敬遠される、という点から見ても
「SQL Serverはダメ」という結論になるわけで。
0885nobodyさん03/02/05 17:48ID:???
てかDBへ接続できるポートを外部に開いてる時点で、その管理者が終ってる気がするな。
管理者といってもDB管理だけの場合もあるし、ネットワーク全体を押さえてる場合もあるわけだが。
やらなくちゃいけない仕事(分野)が多いのも一因かもね。
0886nobodyさん03/02/05 20:20ID:???
そうかもしれんが、世間はそう取らない
0887nobodyさん03/02/06 11:38ID:???
Apacheにすれば安心といって、乗り換えたはいいが結局ボロボロなところ多いからね。
0888nobodyさん03/02/06 14:49ID:???
>>887
0889nobodyさん03/02/07 01:27ID:oK4qVqpT
>>885
> てかDBへ接続できるポートを外部に開いてる時点で、その管理者が終ってる気がするな。
 PostgreSQLやOracleのSSLサポートはイントラでのセキュリティー用かな?
0890nobodyさん03/02/07 06:23ID:???
でも、ぽすぐれのSSLってクライアント証明書使えないんだよね。
0891nobodyさん03/02/07 16:55ID:mSK6L1IK
java だと 日本語文字列をinsertできないって本当ですか?
0892nobodyさん03/02/07 17:19ID:mSK6L1IK
javaのunicodeでinsertされてしまうので、DBの中身もunicodeになってしまうのです。
0893nobodyさん03/02/07 17:26ID:mSK6L1IK
jdbcのせいなのでしょうか?
0894nobodyさん03/02/07 18:50ID:???
>>891
嘘です
>>892
文字コード変換します
>>983
正解です
0895nobodyさん03/02/07 22:53ID:???
>>890
ソースにはサポートコード入ってたと思うぞ。
0896nobodyさん03/02/08 13:05ID:???
>>894
EUCでinsertできるということですか?
0897nobodyさん03/02/08 13:29ID:???
javaの内部ではunicodeだろう。
unicodeを受け取ったサーバがconversionかましてeuc-jpで保存するって話。
0898nobodyさん03/02/08 21:33ID:???
>>897
どうやったらできるの?
0899nobodyさん03/02/08 21:55ID:WzdldZAx
>>872
漏れも試した。
PowerGres萎え。
50クライアント制限萎え。
0900nobodyさん03/02/09 22:03ID:???
javaだとunicodeでしかinsertできない。
0901nobodyさん03/02/10 18:38ID:zGVQOlgy
PowerGres 先行予約販売開始
http://osb.sra.co.jp/PowerGres/pre_sales.php

特別価格の3万8000円(税別)らしいが、
買う予定の香具師いる?
0902nobodyさん03/02/10 19:52ID:???
誰が買うんだ感が未だに拭えましぇん。。
0903nobodyさん03/02/10 21:28ID:???
>>900
ほんとうですか?

0904nobodyさん03/02/11 14:19ID:???
例えば、ある検索条件にマッチするレコードのうちの11番目から20番目だけを
とりだせるように検索条件に指定することって可能なのでしょうか?
0905nobodyさん03/02/11 14:24ID:???
>>904
カーソルか LIMIT でぐぐってごらん。
090690403/02/11 14:31ID:???
>>905
ashさんのページにありました。どうもありがとうございました。

ただし、ぐぐらずにぐーってしまいましたが・・・
090790503/02/11 14:39ID:???
>>906
ash さんのページの URL きぼーん。
ぐぐったら以下のような有様。
http://www.google.com/search?num=50&lr=lang_ja&ie=euc-jp&q=%61%73%68%A4%B5%A4%F3%A4%CE%A5%DA%A1%BC%A5%B8

あ、これか。PostgreSQL・Tips集
http://ash.or.jp/db/pg_tips.htm
質問して解決したらなるべく情報源とか貼ってね。後の人の役にも立つから。
0908nobodyさん03/02/12 17:00ID:???
重複したデータを抽出したいと思います。
emailという、カラムで重複を抽出するには?
0909nobodyさん03/02/12 17:36ID:???
distinct
SQL辞典買うよろし。オレも欲しい。
0910nobodyさん03/02/13 00:27ID:???
euc対応jdbcあるが、一部文字化けあり。
0911nobodyさん03/02/13 09:46ID:???
>>909
それだと、重複したものが除かれるのでは?
0912nobodyさん03/02/13 14:53ID:???
>>908
group by で email まとめて count(*) で数えればイクナイ?
まるっきり自信無しですが・・・
0913nobodyさん03/02/13 22:43ID:???
SELECT email, name
FROM users
GROUP BY email
HAVING count(*) > 1


email name
-------------------
aaa@bbb.com aaa
aaa@bbb.com bbb


こんな感じかな?
0914nobodyさん03/02/13 22:50ID:???
>>901

"PowerGresとは"より

「UNIX/Linux で定評のある オープンソースデータベース PostgreSQL が身近になりました。」



値段のお陰で縁遠になっている悪寒。
0915nobodyさん03/02/14 11:08ID:???
>>913
それだとnameがグループに入ってないと怒られるのですけど。
実際にuniqid,name,emailとあるのに…。なぜでしょう?
0916gn355my003/02/14 11:54ID:???
>>915
>実際にuniqid,name,emailとあるのに
GROUP BY の中に?
0917 03/02/14 14:32ID:???
SELECT * FROM users X
WHERE EXISTS(
 SELECT email FROM users Y WHERE Y.uniqid = X.uniqid
 GROUP BY email HAVING count(*) > 1
)
091891303/02/15 00:02ID:???
EXSISTSって、たとえば
usersテーブル(uniqid,email,name)
VIPテーブル (uniqid,users_id,name)
だとして、「usersの中で、users.uniqidがVIPのusers_idに含まれている人」
を探す為に

SELECT *
FROM users
WHERE EXISTS(
SELECT *
FROM VIP
WHERE users.uniq_id = VIP.users_table_id
)
って使うもんだと思うんだけど、、

usersテーブルのuniqidと同一のテーブルをEXISTSの中に書く意図は何?
それに、EXISTSの中のSELECT文にGROUP BYって書いたこと無いから
挙動がいまいちつかめません…。

とりあえず、EXISTSの中はリファレンス本の例とかにあるような単純な
使い方が無難かと。。

ちなみにリファレンス本は、技術評論社の「SQLポケットリファレンス」が
使いやすくてオススメ。
2000円位で、技術系書籍として安いし。
Postgres対応ではないからLIMITとかは載ってないけど、大方これで済む。
091991303/02/15 00:11ID:???
あ゙、
SELECT email, name
FROM users
GROUP BY email
HAVING count(*) > 1
これだめ(w

SELECT email, name
FROM users
GROUP BY email
HAVING count(email) > 1

SELECT email, name
FROM users
GROUP BY email, name
HAVING count(*) > 1
のどっちかで動くよ…多分。

#以前仕事でPostgres使ったことあるからついカキコしてしまったけど、
#今は職業プログラマじゃ無いし、自分のLinuxにPostgres入れてないから
#実験もできん(w
#無責任でスマソ
092091303/02/15 00:21ID:???
たびたびごめん、
SELECT email, name
FROM users
GROUP BY email
HAVING count(name) > 1
こうかも…。

GROUP BY〜HAVING SUM(〜)とかCOUNT(〜)とかは
よく考えないとエラーになりがちなんだけど、
自分が思った以上にSQLに対する感覚が鈍ってる(w
(使う目的ないけど)リハビリ目的でPostgresインスコしようかなぁ…。
つか誰かうまく説明できる人ににバトンタッチしたひ。
0921nobodyさん03/02/15 02:13ID:S3poV9Xb
PostgreSQL使えるフリーのレンタルサーバってXREA以外でない?
0922nobodyさん03/02/15 17:58ID:/trbWmid
CREATE tbl (
 no SERIAL, -- 自動で連番
 name text,
 tel text,
 fax text
);

INSERT INTO tbl(name) VALUES('tanaka');

たとえば上記のように、SERISALのあるテーブルに
データをINSERTした場合に、noにどの番号が割り当て
られたか、知る方法は無いのでしょうか?

nameは重複する可能性があるのでINSERT後に、
SELECT no FROM tbl WHERE name='tanaka';
とやっても、ダメです。

現在は下記のようにして調べていますが、
いまいち自信がありません。

BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
INSERT INTO tbl(name) VALUES('tanaka');
SELECT max(no) FROM tbl;
COMMIT
0923nobodyさん03/02/15 18:57ID:GmQVtn+r
>>922
INSERT と同じトランザクションブロックにあるなら、
currval('シーケンス名'); で割り当てられた値を取得できるよ。
ちなみに、次の値は nextval だったかな。
0924nobodyさん03/02/15 21:32ID:???
>>923
どうもサンキューです。
それを使ってみます。
0925名無しさん@XEmacs03/02/15 23:12ID:???
>>924
oid使え。

hoge=# insert into a (b) values ('memo');
INSERT 28675 1
hoge=# select * from a where oid=28675;
a | b
---+------
1 | memo
(1 row)
0926nobodyさん03/02/15 23:18ID:vyjm8srS
>>925
INSERT されたレコードを特定するという目的ならこれもいいね。
ただ、割り当てられた OID ってどうやって取得するの? 目視?
レス数が900を超えています。1000を超えると表示できなくなるよ。