5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

PostgreSQL 2テーブル目

1 :名無しさん@お腹いっぱい。:03/06/30 12:38 ID:???
PostgreSQLについて語って2万テーブルをめざしましょう。
関連アプリケーション特有の話題は、以下のスレッドへ。
pgsql-mlのヲチもここで。

前スレ
[PostgreSQL]
http://pc2.2ch.net/test/read.cgi/php/989375812/
移転前のスレ
http://pc2.2ch.net/test/read.cgi/php/1047317680/

☆関連スレッド
[PHP + PostgreSQL]
http://pc2.2ch.net/test/read.cgi/php/983128806/
[PerlでPostgreSQL]
http://pc2.2ch.net/test/read.cgi/php/999249463/
[MySQL vs PostgreSQL]
http://pc2.2ch.net/test/read.cgi/php/989341364/

2 :名無しさん@お腹いっぱい。:03/06/30 12:40 ID:???
板違い

3 :名無しさん@お腹いっぱい。:03/06/30 13:16 ID:???
>>2 そーじゃねーだろ

4 :名無しさん@お腹いっぱい。:03/06/30 16:47 ID:Lf/h8tD9

age

5 :名無しさん@お腹いっぱい。:03/06/30 16:53 ID:???
>>1


6 :名無しさん@お腹いっぱい。:03/07/01 15:20 ID:VDdZprIm
age

7 :名無しさん@お腹いっぱい。:03/07/08 11:22 ID:???
PostgreSQLでreadlineを有効にしてmakeする方法で苦戦

8 :名無しさん@お腹いっぱい。:03/07/08 23:41 ID:7Q6wUFCE
PostgreSQLをインストールするには
どんなOSがお勧めでしょうか?

9 :名無しさん@お腹いっぱい。:03/07/09 00:28 ID:???
>>8
Tru64

10 :名無しさん@お腹いっぱい。:03/07/09 02:05 ID:???
>>8
MSX-BASIC

11 :名無しさん@お腹いっぱい。:03/07/10 00:33 ID:???
>>8
S-OS

12 :名無しさん@お腹いっぱい。:03/07/10 12:54 ID:ccIJBBJP
レコード追加したらカウンターフィールドを自動カウントアップする
変数定義ってあったっけか。
auto-countみたいなのってPostgreSQLじゃfunctionかtrigger使わなきゃ
出来ないんだっけか。

13 :名無しさん@お腹いっぱい。:03/07/10 13:14 ID:PSgpDgQ5
serial

14 :12:03/07/10 13:30 ID:ccIJBBJP
>13
アンガト^^/~

15 :名無しさん@お腹いっぱい。:03/07/13 13:45 ID:???
>>13-14
serial というか、sequence

16 :名無しさん@お腹いっぱい。:03/07/13 15:11 ID:0aiQXehE
Linuxにさ。最新版のPostgres入れようと思ってるんだけどさ。
zlibがないとか文句を言ってくるんだよね。
OpenSSLがないとかreadlineがないとか散々文句を付けられちゃってさ。
ハァ------・・・・・もうインストールに疲れちゃった。


17 :あぼーん:あぼーん
あぼーん

18 :名無しさん@お腹いっぱい。:03/07/13 15:56 ID:???
>>16
アフォくさ・・・
どのディストリに、なんのバージョンを入れようとしたんだか。
大体、OSインスコ腐ったやりかたしてたら、排卵わな(呆

19 :名無しさん@お腹いっぱい。:03/07/13 16:04 ID:???
昔はあんなに苦労しなかったのに。
7.3.3を入れてみたよ。
TurboLinux8 Server。とりあえずPostgreSQLのRPMを消してみた。
readlineのRPMも消してmakeで入れてみた。

ところでmakeがgmakeかどうかを判断するにはどうすりゃいい?

20 :名無しさん@お腹いっぱい。:03/07/13 16:08 ID:???
やっぱりRPMなんて一個も使わないほうがいいかね?

21 :名無しさん@お腹いっぱい。:03/07/13 23:36 ID:dgge6JpE
誰か、PGReplicateとか使ってDBの冗長化させている人いる?

22 :あぼーん:あぼーん
あぼーん

23 :あぼーん:あぼーん
あぼーん

24 :あぼーん:あぼーん
あぼーん

25 :あぼーん:あぼーん
あぼーん

26 :あぼーん:あぼーん
あぼーん

27 :あぼーん:あぼーん
あぼーん

28 :あぼーん:あぼーん
あぼーん

29 :あぼーん:あぼーん
あぼーん

30 :あぼーん:あぼーん
あぼーん

31 :あぼーん:あぼーん
あぼーん

32 :あぼーん:あぼーん
あぼーん

33 :山崎 渉:03/07/15 11:17 ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

34 :名無しさん@お腹いっぱい。:03/07/16 21:38 ID:???
>19
「make love」って打って、

> make: don't know how to make love. Stop

って出たらBSD make。

> make: *** No rule to make target `love'. Stop.

って出たらGNU make。


35 :名無しさん@お腹いっぱい。:03/07/17 12:30 ID:???
>>34
make: *** ターゲット `love' を make するルールがありません. 中止。

36 :名無しさん@お腹いっぱい。:03/07/18 00:40 ID:uqrcCnPj
>16
 readline はインストールされてるが、pgsql では使えない事があった。
configure のオプションでlib のdirを指定したらいけた。
半年前なので、詳細(というか正しい知識)忘れてしまった。

37 :名無しさん@お腹いっぱい。:03/07/19 13:37 ID:VmaBZmB4
今、Accessで構築されてるデータベースをPostgreSQLに
移行したいのですが、なんかいい方法ありますか?

38 :名無しさん@お腹いっぱい。:03/07/19 13:54 ID:bDyX28yi
>>35
make install

39 :あぼーん:あぼーん
あぼーん

40 :名無しさん@お腹いっぱい。:03/07/19 18:44 ID:???
また一波乱ありそうな気配

41 :名無しさん@お腹いっぱい。:03/07/19 19:04 ID:???
>40
pgsql-jp?

42 :名無しさん@お腹いっぱい。:03/07/20 11:07 ID:???
>>37
PostgreSQL+Perl?PostgreSQL+PHP?
Accessからブラウザベースのツールに移る場合、
それなりに設計しなおしの部分も出てくるだろうから、

1.現状のシステムの動作を解析。
2.新規要望がないか調査
3.DB(テーブル)並びにシステムの設計
4.システム構築
5.データ移行

と再構築をしっかりやりたい(僕なら)

43 :名無しさん@お腹いっぱい。:03/07/22 12:15 ID:???
PostgreSQL 7.2.3+PHP 4.2.3 でデータベースを構築しています。
あるテーブルを、ユーザーが選択した行だけを表示するようにしたいのですが、
どのように行ったらいいでしょう?

テーブルにはユニークな番号が振ってあるので、ユーザー毎にIDを登録したテーブルを
作って、JOINすればいいかなと思ったんですが、そうするとユーザー毎にテーブルが
必要だし、同じDB内では管理が面倒になりそうなのですが、
DBを分けてしまうとJOINができなくなってしまうので、どうしたらいいものか悩んでいます。

何かいい方法ありますか?


44 :名無しさん@お腹いっぱい。:03/07/22 12:32 ID:MV56GWLi
>>43
ユーザー毎にフラグ設ける方法以外に考えられないと思われ。
一瞬で分かるだろ。

45 :名無しさん@お腹いっぱい。:03/07/22 14:25 ID:???
>43
> テーブルにはユニークな番号が振ってある
この一節読んだだけで嫌な予感がしまつ。


46 :43:03/07/22 14:42 ID:???
>>44
やっぱりユーザー毎にフラグ設けるしかないですか。
ありがとうございました。

>>45
テーブルに番号が振ってあるんじゃなくて、行ごとに振ってあるの間違いでした。
ど素人が作ったDBなので、ほかにもいっぱい問題はありそうですが..

47 :[pgsql-jp: 30555]:03/07/23 13:45 ID:???
:: 1テーブルだと、INSERT SELECT共にとても重くなって現実的ではないと思い
:: ます。なにせ、めったにアクセスされない掲示板のレコードにも頻繁にアク
:: セスが生じますし。まだ1万個のテーブルのほうがましだと思います。

実際にやると、1万個のテーブルのほうが激遅くなる罠。


48 :名無しさん@お腹いっぱい。:03/07/23 14:52 ID:???
joinとかが発生せずそれぞれ独立に動くなら1万個のテーブルでも
いいのではないかとは思うが、

> :: 1テーブルだと、INSERT SELECT共にとても重くなって現実的ではないと思い
> :: ます。なにせ、めったにアクセスされない掲示板のレコードにも頻繁にアク
> :: セスが生じますし。まだ1万個のテーブルのほうがましだと思います。

ってもしかしてインデックスも張らずにやるつもりなのかな?

それにレコード増えてもINSERTはそれなりに速いぞ。
追記型のストレージだからな。

49 :名無しさん@お腹いっぱい。:03/07/23 16:05 ID:???
インデックスでユニーク制約をしたキーがあるテーブルを継承しても、
継承したテーブルではキーの重複ができるのですが仕様でしょうか?
もしかして、この場合インデックス自体有効でないのでしょうか?
PostgreSQLは7.2.3です。

50 :自己レス:03/07/23 16:14 ID:???
>>49
マニュアルにあかんって書いてあった。だめすぎる。
ttp://www.postgresql.org/docs/7.3/static/ddl-inherit.html

51 :名無しさん@お腹いっぱい。:03/07/25 15:28 ID:YD/oGCu5
だめすぎって、マニュアルも読まない君のことか?

52 :あぼーん:あぼーん
あぼーん

53 :あぼーん:あぼーん
あぼーん

54 :名無しさん@お腹いっぱい。:03/07/29 23:29 ID:kKpllBVe
PostgreSQLでバラバラの度々同じ条件でテーブルを連結して検索させたいとき、
1.検索の度にjoin使う。
2.ビューを作っておく。
3.関数を作っておく。
テーブル設計がいじれ無い状況で、どれが一般的に速いものなのでしょうか?

55 :54:03/07/29 23:30 ID:kKpllBVe
誤:PostgreSQLでバラバラの度々同じ条件でテーブルを連結して…
正:PostgreSQLでバラバラのテーブルを度々同じ条件で連結して…

56 :あぼーん:あぼーん
あぼーん

57 :名無しさん@Emacs:03/07/30 08:30 ID:???
>54
どれもほとんど変わらんと思われ。
prepare使うと変わるかもしれんけどね。


58 :54:03/07/31 00:34 ID:???
>57
7.3からprepare使えるみたいですね。
ちょっくら試してみます。
ありがとうございました。

59 :ぼるじょあ ◆ySd1dMH5Gk :03/08/02 04:56 ID:???
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ

60 :名無しさん@お腹いっぱい。:03/08/13 15:08 ID:qSUYsHAO
PostgreSQL って EJB QL の関数をサポートしてないのでしょうか?
例えば、

SELECT
OBJECT(a)
FROM
myTable AS a
WHERE
SUBSTRING(a,userID, 1, 4) = ?1

みたいに EJB QL のSUBSTRING関数なんかを使っていると

java.sql.SQLException: ERROR: parser: parse error at or near "{"
at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:131)

という例外が発生します。
関数を使わなければ、問題なく抽出が成功するんですけど・・・


61 :名無しさん@お腹いっぱい。:03/08/13 15:37 ID:???
SUBSTRINGでtableも指定してるのはそういうもんなの?

62 :60:03/08/13 16:55 ID:qSUYsHAO
>>61
識別変数 ( 「myTable AS a」 の 「a」 ) はEJB-QLでは省略できない決まりだそうです。

63 :あぼーん:あぼーん
あぼーん

64 :あぼーん:あぼーん
あぼーん

65 :山崎 渉:03/08/15 21:59 ID:???
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

66 :山崎 渉:03/08/15 22:49 ID:???
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

67 :名無しさん@お腹いっぱい。:03/08/16 16:02 ID:nn9V5t8B
PostgreSQLで「10日前までのデータを抽出」という条件を指定する方法を教えてください。

……いえ、もちろん、「where between hoge_date 10日前の日付 and 今日」とやればいいのは
解っています(^^; postgreSQLにおいて、whereで使用できる日付計算関数というのがあれば
教えてください、ということです。

この辺、データベースによってバラッバラだし、selectで使えてもwhereぢゃ使えないなんて
腐った関数もあったし……(T_T)
ということで、よろしくお願いします。

68 :名無しさん@お腹いっぱい。:03/08/16 17:30 ID:???
>>60
PostgresというよりもEJBコンテナの問題だと思われ。

69 :名無しさん@Emacs:03/08/16 18:41 ID:???
where hoge_date >= 'today'::date - 10;


70 :名無しさん@お腹いっぱい。:03/08/16 19:47 ID:asUvlQOh
org.postgresql.coreで発生してるとこを見ると、
JDBCが対応していないようにも思えるが・・・
環境が書いてないんで、何とも胃炎。

71 :あぼーん:あぼーん
あぼーん

72 :あぼーん:あぼーん
あぼーん

73 :名無しさん@お腹いっぱい。:03/08/17 00:07 ID:UpSkezT2
current_dateとdate型のカラムを使って「現在から何日前/後」という計算を、PostgreSQLで
出来ないでしょうか?
クライアントがPerlなので、あまり日付は扱いたくありません。
いちいちエポック秒に変換するのはちょっと面倒です(^^;

ご経験のある方がいらっしゃいましたら、アドバイスをお願いします

74 :名無しさん@お腹いっぱい。:03/08/17 00:32 ID:wtT8T4OC
>>70
PostgreSQLの標準JDBCはJDBC2までしか対応してないんじゃないか?
ただコンテナが吐くSQLがそれぞれに適したものを出力しないと意味ない
し、普通コンテナがPostgreSQLをサポートしているのかどうかを確認して
使うべきじゃないかと思ったんだよな。

75 :あぼーん:あぼーん
あぼーん

76 :名無しさん@お腹いっぱい。:03/08/17 02:28 ID:???
>>73
http://www.postgresql.jp/document/pg734doc/user/functions-datetime.html
表6-17を参考

77 :73:03/08/17 03:05 ID:pbK6h/9c
>>76
どもです。えっと、単純に
age(Xdate)
でOKなんでしょうか? でもこれ、戻り値はinterval型ですよね。
欲しいのは年月日ではなく、日数なんですよ。つまり、
2002/8/16を評価した場合、-366が(出来ればintで)帰ってきて欲しいんですね。
intervalを日数に変換する関数なんてのがあれば一発なのですが……
文字列比較するのも嬉しくないしなぁ(T_T)


78 :名無しさん@お腹いっぱい。:03/08/17 08:44 ID:???
>>77
SELECT EXTRACT(EPOCH FROM age(timestamp '2002/8/16')) / EXTRACT(EPOCH FROM interval '1 day')
かっこわるー

79 :あぼーん:あぼーん
あぼーん

80 :73:03/08/17 13:36 ID:???
>>78
た、確かに……(T_T)
了解しました。この方式を保険にして、まずはPerlでシコシコ書いてみましょう。
アドバイスありがとうございました。

81 :60:03/08/17 13:42 ID:???
>>60です。みなさまレスありがとうございます。

環境は以下のとおりです。

 OS : Windows2000 Pro SP4
 APS : WebLogic Ver 7.0
 DB : PostgreSQL Ver 7.2.1 for windows
 JDBC: pg73jdbc2ee.jar, pg73jdbc3.jar

JDBCは上記以外のも使ってみましたが、うまくいきませんでした。
DDは、「ejb-jar.xml」「weblogic-cmp-rdbms-jar.xml」ともに以下のように指定しています。

 <ejb-ql> (<weblogic-ql>)
  SELECT OBJECT(a) FROM myTable AS a WHERE SUBSTRING(a.yyyymmdd, 1, 4) = ?1
 </ejb-ql> (</weblogic-ql>)

関数を使わなければ、問題なく成功します。

他のアプリケーション・サーバーでも試してみようと思います。

82 :名無しさん@お腹いっぱい。:03/08/17 18:51 ID:SwfhiGBA
>>80
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=Date%3A%3ACalc+perl&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja

83 :名無しさん@お腹いっぱい。:03/08/18 21:31 ID:???
ポスグレのターミナルプロンプトでデータ表示するときの
--続ける--
表示ってどうやれば消えるのでしょうか?

84 :名無しさん@お腹いっぱい。:03/08/19 00:51 ID:B12vYhll
ポスグレ固まってしまった。
プロセス確認してみたら、TRUNCATE Waitingってのが
たくさんあるんだよ。
なんでだろう。7.1なんでもちろんTRUNCATEは実行できる
はずなのだが・・・

85 :名無しさん@Emacs:03/08/19 14:35 ID:???
どっかのプロセスがtruncate対象のテーブルか何かをロックしたままなんじゃない?


86 :名無しさん@お腹いっぱい。:03/08/20 13:10 ID:d3T9mVf4
ポスグレポ

87 :名無しさん@お腹いっぱい。:03/08/25 15:15 ID:???
>>83
\pset pager off

88 :名無しさん@お腹いっぱい。:03/08/26 16:52 ID:EXAVYmiZ
where id >= 100 and id <= 1000 と
where id between 100 and 1000 とではどっちが早いですか?

それとも等価ですか?

89 :名無しさん@お腹いっぱい。:03/08/26 18:37 ID:???
>>88
http://www.postgresql.jp/document/pg734doc/user/functions-comparison.html
> 内部的に最初のの形式を 2 番目の形式に書き換えるのに必要となる CPU サイクル以外それぞれの形式には違いはありません。
等価といっていいね。
なので見やすい方を採用しましょう。

90 :88:03/08/26 19:05 ID:???
>>89 このページは見つけられませんでした。ありがとうございました。

91 :名無しさん@お腹いっぱい。:03/08/26 21:47 ID:???
y

92 :名無しさん@お腹いっぱい。:03/08/27 18:21 ID:w7hR2Qx2
PostgreSQL-7.2.1
PostgreSQL ODBC Driver 07.01.0006 日本語版(2001/07/13版)

上記のODBCドライバを使っているんだけれど、
もしかしてこれだとvarchar(20)とかに入れた日本語20文字を取れない?


93 :名無しさん@お腹いっぱい。:03/08/27 18:31 ID:???
そもそもODBC関係なくvarchar(20)に日本語は10文字しか入らないのでは?

94 :名無しさん@お腹いっぱい。:03/08/27 18:37 ID:w7hR2Qx2
7.xくらいからvarcharって文字数ではありませんでしたっけ??
DBはEUCでやってます。

95 :名無しさん@お腹いっぱい。:03/08/27 18:47 ID:???
あー、すまん
varchar(10)で確認してたので混同した
うちのはodbc は 7.03.01.00 でvarchar(10) の10文字の漢字が取れました
けっこう最近まで7.01.xxxx 使ってたけど、varcharに日本語入れた事
無かったから気がつかんかったなあ・・・

96 :名無しさん@お腹いっぱい。:03/08/27 19:12 ID:w7hR2Qx2
7.03って本家(www.postgresql.org)の奴ですか。
日本語版というのがあったので
日本語対応していないのかと思ったのですが本家の方も今のは対応しているのでしょうか?

97 :名無しさん@お腹いっぱい。:03/08/27 19:51 ID:???
そのようです
日本語というよりマルチランゲージ対応ですね

98 :名無しさん@お腹いっぱい。:03/08/27 19:56 ID:???
PostgreSQL, Inc. donates database replication software
http://lwn.net/Articles/46576/
うそぐれすの立場は。。。

99 :あぼーん:あぼーん
あぼーん

100 :名無しさん@お腹いっぱい。:03/08/28 10:44 ID:???
>>98
うそぐれすは本体が対応するまでのつなぎのごまかしだし

便利は便利だが、アクセス制限かけにくいので使いづらい、あれ

101 :名無しさん@Emacs:03/08/28 11:48 ID:???
ていうか、eRserverはトリガベースだったと思うんで、
一概に比較できるもんでもないっそ。


102 :名無しさん@お腹いっぱい。:03/08/28 12:01 ID:???
SDにも別のreplicationの記事があったね
日本人がやってたな

103 :名無しさん@お腹いっぱい。:03/08/29 15:19 ID:aLAEBrwe
こういう型を決めていて

Column | Type | Modifiers
--------+-----------------------------+-----------
date  | timestamp without time zone |
dns   | text |
ip    | inet |
uid   | text

データはこのように入れてるのですが

        date                 dns        ip         uid
2003-08-28 18:55:42.656173     ftp12.sakura.moe  192.168.1.12     sakura
2003-08-28 19:37:26.93341      ftp12.sakura.moe  192.168.1.12     sakura
2003-08-28 19:37:38.796167     ftp12.sakura.moe  192.168.1.12     sakura
2003-08-28 19:37:46.947639     ftp15.sakura.moe  192.168.1.15     tomoyo
2003-08-28 19:52:56.752223     ftp12.sakura.moe  192.168.1.15     tomoyo
2003-08-28 21:06:48.766464     ftp1.sakura.moe   192.168.1.1      abone

これをuidがダブらないように日付が一番新しい情報だけをそれぞれ出したいんですが、select文一行じゃ無理ですか?

上のデータをselectして
2003-08-28 19:37:38.796167     ftp12.sakura.moe  192.168.1.12     sakura
2003-08-28 19:52:56.752223     ftp12.sakura.moe  192.168.1.15     tomoyo
2003-08-28 21:06:48.766464     ftp1.sakura.moe   192.168.1.1      abone
こうだしたいです。

104 :名無しさん@お腹いっぱい。:03/08/29 15:31 ID:aLAEBrwe
2003-08-28 19:52:56.752223     ftp12.sakura.moe  192.168.1.15     tomoyo
これは
2003-08-28 19:52:56.752223     ftp15.sakura.moe  192.168.1.15     tomoyo
こですね。こぴぺして修正するとき書き間違えました。

遊びでやっているので、気長に待ってます。
お願いいたします。


105 :名無しさん@お腹いっぱい。:03/08/29 15:45 ID:???
dns と ip と uid は常に同じ組み合わせなの?
もしそうだったら
SELECT max(date) AS date,uid,dns,ip FROM test4 GROUP BY uid,dns,ip
でいけるけど

106 :名無しさん@お腹いっぱい。:03/08/29 15:46 ID:???
ありゃ、uid の場所まちがった。まあわかるよね

107 :名無しさん@お腹いっぱい。:03/08/29 16:01 ID:aLAEBrwe
>>105
>dns と ip と uid は常に同じ組み合わせなの?

常に同じじゃないです。

ftp18.sakura.moe  192.168.1.18  tomoyo
ftp19.sakura.moe  192.168.1.19  tomoyo
こうデータが入ってくる場合もあります。

108 :名無しさん@お腹いっぱい。:03/08/29 16:26 ID:???
じゃあ、こんなかんじ?

SELECT * FROM table WHERE date IN (SELECT max(date) FROM table GROUP BY uid)

オレもあんまし詳しくないんで、もっといいやり方あるかも

109 :108:03/08/29 16:34 ID:???
あ、これは同じ時刻で違うuidが複数あるとだめだね

110 :108:03/08/29 16:36 ID:???
こっちでいいかな?

SELECT * FROM table WHERE (uid,date) IN (SELECT uid,max(date) FROM table GROUP BY uid)

111 :名無しさん@お腹いっぱい。:03/08/29 16:52 ID:???
>>103
それはSQLの質問だろう?↓こっちへ書け

[SQL質疑応答スレ]
http://pc2.2ch.net/test/read.cgi/db/1056973582/

112 :103:03/08/29 18:31 ID:aLAEBrwe
>>108-110
どうもありがとうございます!!
うまくいきました


113 :名無しさん@お腹いっぱい。:03/08/31 14:29 ID:EBOLr2oF
id1とid2を複合キーにして、defaultでid1を見てid2がカウントアップ
していくっていうのは、テーブル作成時にどう指定したらいいんでしょう。。

要するにid1個のテーブルを作成して、そのテーブル内に
serialのid2があるような形のことをテーブル1つでやりたいんですけど。
これってSQLネタなんでしょうか。

なんかこないだまで事務やってたのにいきなりDBの管理やらされて
激しく困っています。。。

114 :名無しさん@お腹いっぱい。:03/09/01 09:57 ID:???
意味がよくわからなくてイメージわかない・・

115 :113:03/09/01 11:11 ID:lfyO0RSp
>>114
すいません。。。

id1 | id2
 1 | 1
 2 | 1
 2 | 2
 2 | 3

このような状態でid1に1を指定して
insertした場合は自動的にid2に2が、
2を指定してinsertした場合は自動的にid2に4が
入るような感じにしたいのですが。。
id1に3を指定してinsertすると、
そのレコードのid2には1が入ると。

イメージを掴めていただけましたでしょうか。。

116 :名無しさん@お腹いっぱい。:03/09/01 11:54 ID:???
$id1 を id1 に設定する値とすると、
INSERT INTO table (id1,id2) SELECT $id1,coalesce(max(id2),0)+1 FROM table WHERE id1 = $id1;

こんな感じ?

117 :名無しさん@お腹いっぱい。:03/09/01 12:00 ID:???
あ、テーブル作成時か。関数作るしかないか?

118 :113:03/09/01 12:48 ID:???
>>116
テストで小さいテーブル作ってやってみました。
できました。確かに本当はテーブル作成時に
id2のDEFAULTとして指定できるようにしたいと思ってたんですが、
これでも全然目的は達成できていますので、こうします!

というか、DEFAULTとして指定しないと、
まずselect文を発行してid1におけるid2のmax値を取得して、
その後またinset文を発行することになって、
二度手間になるのかと思ってました。。。
こうやって一緒にできるんですね。
(113に書いた理由で)不本意ながら、勉強します。。。。
ありがとうございました!

119 :名無しさん@お腹いっぱい。:03/09/01 21:05 ID:???
不本意でも覚えるとなかなか面白い。ガンガレ

120 :名無しさん@お腹いっぱい。:03/09/02 12:58 ID:aIhq+MaF
http://slashdot.jp/article.pl?sid=03/08/31/2256251&topic=107&mode=thread
レプリケーションってなんですか?

121 :名無しさん@お腹いっぱい。:03/09/02 14:41 ID:???
バックアップや分散処理等のためにデータベースを複数箇所に
置いてそれぞれのDBの整合性を取る機能って言えばいいのかな?

122 :名無しさん@お腹いっぱい。:03/09/03 00:20 ID:MROHIFn2
WEBで会員検索システムを作ってます。会員規模は10万人です。
で、複雑な検索をするのですが、その結果表示が遅いときに、
オペレータの人が「がしがし」ボタンをクリックします。
すると Postgres は律儀に検索しようとして、メモリを使いきり、
スワッピングし続け、HDD回りっぱなしで反応なし状態になります。

こういったことを回避するためのリミッタみたいなものは Postgres にあるでしょうか?


123 :名無しさん@お腹いっぱい。:03/09/03 06:36 ID:tTNmCqnh
>>122さん

「がしがし」 ←ちょっとワロタ。

Java ScriptやCGIの方でキャンセルさせるべきじゃないかな。
ボタンを無効にしたりとか、「検索中」ページを表示させるとか、
hiddenに前回検索要素を入れて、同一の場合は無視とか。

外してたらスマソ。

124 :名無しさん@お腹いっぱい。:03/09/03 10:25 ID:POnnpi/I
質問。PostgreSQLでTRANSACTION 処理の隔離レベルの意味を教えてください。
マニュアルを見ると、
>READ COMMITTED … 一つの文はそれが開始される前に"コミット"された行のみ見ることができます。
この文のコミットってどういうことですか?
TRANSACTION処理内では、コミットしないんですよね?
なんでコミットされたっていう言い回しをつかってるんでしょうか?


125 :名無しさん@お腹いっぱい。:03/09/03 10:46 ID:???
その時点のトランザクションは自分だけじゃない

126 :名無しさん@Emacs:03/09/03 10:47 ID:???
READ COMMITTED … 一つの文はそれが開始される前に(他のトランザクションによって)"コミット"された行のみ見ることができます。

127 :名無しさん@お腹いっぱい。:03/09/03 11:01 ID:???
なるほど、わかりました。では、例えば、

1. db=# create table a (foo int);
2. db=# insert into a values(1);
3. db=# begin;
4. db=# update a set foo=10;
5. db=# select * from a;

a
---
10
(1 row)

となるのですが、自分のTRANSACTION内でもみかけじょう、
コミットはされているということでなんでいいんでしょうか?


128 :名無しさん@お腹いっぱい。:03/09/03 11:06 ID:???
コピペ

SELECT文はこの問い合わせが開始される直前までにコミットされた
データのみであり、コミットされていないデータや、
このトランザクションと同時に実行されてデータが
変更になったものなどは参照しません。
(しかし、コミットされていないものでも、
同じトランザクションで行われた更新の結果は参照します)

129 :thanks!:03/09/03 11:42 ID:???
COMMIT;

130 :名無しさん@Emacs:03/09/03 11:54 ID:???
>127
自分自身で更新したものは、当然最新のものが見えます。

でないとロングランなトランザクションなどで困りますし、
そもそもトランザクションてのはそういうものです。


131 :名無しさん@お腹いっぱい。:03/09/03 12:43 ID:???
トランザクションの隔離は技術評論社のPostgreSQL全機能リファレンスって本に詳しい。
それ以外にもなにげにマニアックな話題を取り上げているぞ。

132 :名無しさん@お腹いっぱい。:03/09/04 01:40 ID:???
>124
シーラカンス本にのってんじゃあねえの。

133 :名無しさん@お腹いっぱい。:03/09/06 18:39 ID:Rw5afQs3
行数を調べたい場合、普通は select count(*) from foo
とかすると思うんですけど、それだと全行検索するみたいで嫌なのですが、
なんとか安いコストで行数を調べる方法ないでしょうか。



134 :名無しさん@Emacs:03/09/06 18:42 ID:???
INSERT/DELETEするときに(トリガで)カウンタをいじる。


135 :名無しさん@お腹いっぱい。:03/09/06 19:25 ID:XXV2gNzR
>>133
主キーにindexを張っておく。

136 :名無しさん@お腹いっぱい。:03/09/06 19:39 ID:???
index張ったってどうせfull scanするだろ?

137 :名無しさん@お腹いっぱい。:03/09/06 19:55 ID:/Sq1iYcq
>>134がいちばんコスト少ない気がするが

138 :133:03/09/06 20:00 ID:???
システムで行数管理してて、そこを見れたりしないんでしょうか。

139 :名無しさん@お腹いっぱい。:03/09/06 20:05 ID:???
PostgreSQL システムカタログ

あたりでぐぐってみれば?

140 :名無しさん@お腹いっぱい。:03/09/06 22:58 ID:???
>>139
そりゃアクセスプランを決定するための統計情報だからアテにならん。
その程度の精度で良いんだったら別だが。

141 :名無しさん@お腹いっぱい。:03/09/06 23:39 ID:???
実際の話
DBを実装するうえでテーブル上のデータの総数みたいなデータって
どこかに置いておく必要があるんだろうか?
トランザクションとか関わってくると
一意に決まらない情報でしょ

142 :名無しさん@Emacs:03/09/07 04:56 ID:???
full vacuum直後であれば、pg_classのreltuplesが行数だけど、
その後にinsert/deleteされると実際の値と合わなくなる。


143 :名無しさん@お腹いっぱい。:03/09/08 17:36 ID:aow70aHR
いま

5 * * * * /usr/bin/vacuumdb -a
6 * * * * /usr/bin/vacuumdb -a -z

とかやってるんですけど、もしかしたら ANALIZE の前って
VACUUM って実行されますか?

144 :135:03/09/09 16:16 ID:???
>VACUUM ANALYZE は、選択されたテーブルそれぞれに対し、
>VACUUMを行ない、その後、ANALYZE を行ないます。
ttp://www.postgresql.jp/document/pg721doc/reference/sql-vacuum.html

>>136
実際に2000行くらいのゴミデータを作って
Explain select count(*) from aaaaa;
を見たらSeq.Scanだった。(恥)
インデックスには、行数の情報も含まれていると思い込んでいたので。。。

PostgreSQL内部に行数のデータを保持するなら、>>134 に一票。
掲示板とかに「OO件の書き込みがあります」と表示する用途なら、
アプリケーション層にキャッシュする、に一票。
頭から通し番号を付けられるのであれば、インデックスを張って
select max(serial_number) from table; をとる。

で、どうよ? >>133

145 :名無しさん@お腹いっぱい。:03/09/10 00:58 ID:???

max()は結局テーブル全部なめるんじゃない。
count(*)もmax()もどちらも集約関数。


146 :名無しさん@お腹いっぱい。:03/09/10 01:43 ID:???
>>144
serialの現在値を取ってくればいいんじゃない?
削除しないことが前提になるけど

147 :名無しさん@お腹いっぱい。:03/09/10 07:45 ID:???
>>145
count(*)は全スキャンだろうが、max()ならindexを使って
くれるのが普通じゃないの?
Postgresはどうだか知らんが。

148 :135:03/09/10 22:44 ID:???
>>146
 >>133 が何を作りたいのか不明なのでweb掲示板を想定しているのだが、
途中のデータが削除されることが良くあることですな。
抜け無く、通しで主キーを振るというのは実際はなかなかできませぬ。

個人的にはレプリケーションのとき問題が出るといやなのでserialの代わりに
明示的なトランザクションの中でmax(id)+1をselectして
それを次のデータの主キーにしています。

>>147
その通り。maxがインデックスを使ってくれることを期待してる。
実際は、インデックス付きと無しとでexplainを比べてみねば。
またseq.scanとか出たら恥ずかしい。

135=> create table a( id serial primary key, log text);
NOTICE: CREATE TABLE will create implicit sequence 'a_id_seq' for SERIAL column
'a.id'
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'a_pkey' for table
'a'
(一度抜けてゴミデータを入れる。apacheのエラーログ2000件)
135=>explain select count(*) from a;
NOTICE: QUERY PLAN:

Aggregate (cost=22.50..22.50 rows=1 width=0)
-> Seq Scan on a (cost=0.00..20.00 rows=1000 width=0)

EXPLAIN
135=>explain select max(id) from a;
NOTICE: QUERY PLAN:

Aggregate (cost=22.50..22.50 rows=1 width=4)
-> Seq Scan on a (cost=0.00..20.00 rows=1000 width=4)

EXPLAIN
135=> vacuum analyze a;
VACUUM;
135=> explain select max(id) from a;
NOTICE: QUERY PLAN:

Aggregate (cost=81.44..81.44 rows=1 width=4)
-> Seq Scan on a (cost=0.00..76.15 rows=2115 width=4)

EXPLAIN
135=>

ありゃ?

149 :133:03/09/11 01:37 ID:???
すみません、>>133 です。あの、あの時はとても眠かったのであんな質問してしまったのですが、
次の日思い出したら、実は select count(*) from foo; ではなく、
select count(*) from foo where bar = 'buz'; でした。。
これじゃあ全行検索しないといけないですね。。逝ってきます。。

150 :名無しさん@お腹いっぱい。:03/09/11 02:04 ID:???
全行とは限らん

151 :135:03/09/11 17:17 ID:???
>>150
where句である程度絞られる場合は、当然全行なめないはず。
よーし、意地でもindexを使ってやるぞ。

135=> create table foo( t timestamp default now(), bar char(3));
CREATE
135=> create index foo_idx on foo (bar);
CREATE
org021=> select count(*) from foo;
count
-------
62273
(1 row)

135=> select * from foo limit 10;
t | bar
------------------------+-----
2003-09-11 16:48:10+09 | baz
2003-09-11 16:58:46+09 | 515
2003-09-11 16:58:46+09 | 218
2003-09-11 16:58:46+09 | 247
2003-09-11 16:58:46+09 | 128
2003-09-11 16:58:46+09 | 0
2003-09-11 16:58:46+09 | 233
2003-09-11 16:58:46+09 | 233
2003-09-11 16:58:46+09 | 184
2003-09-11 16:58:46+09 | 292
(10 rows)

135=> select count(*) from foo where bar = '233';
count
-------
21
(1 row)

135=> EXPLAIN select count(*) from foo where bar = '233';
NOTICE: QUERY PLAN:

Aggregate (cost=1.01..1.01 rows=1 width=0)
-> Seq Scan on foo (cost=0.00..1.01 rows=1 width=0)

EXPLAIN
135=> vacuum analyze foo;
VACUUM
135=> EXPLAIN select count(*) from foo where bar = '233';
NOTICE: QUERY PLAN:

Aggregate (cost=808.71..808.71 rows=1 width=0)
-> Index Scan using foo_idx on foo (cost=0.00..804.36 rows=1740 width=0)

EXPLAIN
135=>

やった! Index Scan って出た。

しかし、max(bar)ではインデックスを使わないのだろうか。
バブルソートのループ1回分すればいいのなら
インデックスを使うかどうか迷うより速いのだろうか。


152 :名無しさん@お腹いっぱい。:03/09/11 18:10 ID:???
VACUUM ANALYZE でやってみてよ

153 :名無しさん@お腹いっぱい。:03/09/11 19:15 ID:SlxB2PoE
pg_dumpで出力したデータを別マシンのPostgreSQLに移そうとしたら
invalid command \N
と大量に表示されてインポートされません。
7.0.3->7.3.4なので不整合は覚悟していたのですが、何か方法はないでしょうか…
環境はRedhatLinux9+PostgreSQL7.3.4でつ.

154 :名無しさん@お腹いっぱい。:03/09/11 19:58 ID:???
>>153
ダンプデータはテキストだから適当に編集すればいいよ。

それが難しければpg_dumpで-d(--inserts)オプションをつけるとか。
データ量多いと遅くて泣けるだろうけど。

155 :名無しさん@お腹いっぱい。:03/09/11 21:16 ID:???
どうやって入れようとしたの?
7.0.X から7.3、、問題が出るとは思えないんだが・・・

156 :153:03/09/11 21:46 ID:???
$ psql -e database < export.dmp
とやっています。

移行元のDBは遠距離にあって他の人に頼んで出力してもらいました。
ダンプデータを開いて\Nを全部消してみましたが、それでもダメぽ…。
Redhat9の環境では7.3以前のPostgreSQLはコンパイルできないし (ノД`)

157 :名無しさん@お腹いっぱい。:03/09/12 02:26 ID:???
どうしても無理なら、スクリプトで読んでINSERT文を出力する手もある

158 :名無しさん@お腹いっぱい。:03/09/12 06:56 ID:Tv4bq9y4
PostgreSQL 7.3.4を使っています。
フィールド名が沢山ありすぎて、selectした時に表示が崩れるのですが、綺麗に表示する方法とかありますか?


159 :名無しさん@お腹いっぱい。:03/09/12 09:10 ID:???
表示させたくないフィールドcolumn1, column2,....に次のコマンドを実行すると
次から表示がきれいになるよ。

ALTER TABLE tablename DROP column1, column2,.... CASCADE;



160 :153:03/09/12 11:36 ID:???
>>154 >>155 >>157
ありがとうございます。

エラーが多くて流れてしまったために気が付かなかったのですが
テーブル生成で失敗していたのが原因で copy from stdin がコケて
しまったようです。

カラムの型定義で
〜 timestamp with time zone DEFAULT 'now'::text
と書いてある「'now'::text」がダメなようで「::text」を外したら問題なかったです。
以前はコレがないとダメだったのでしょうか…


161 :名無しさん@お腹いっぱい。:03/09/12 14:35 ID:???
::textがないと'now'をその時点で評価して、インポートした日時が
デフォルトになっちゃう、とかじゃないかねw

162 :名無しさん@お腹いっぱい。:03/09/12 16:20 ID:???
>>159
ありがとうございました
表示だけでなく、他のものもすっきりしたような気がします

163 :名無しさん@お腹いっぱい。:03/09/12 16:39 ID:???
>>162
ビュー作れや。


164 :名無しさん@お腹いっぱい。:03/09/12 20:59 ID:???
>>163
この場合>>158に言うべきでは
>>162とほとんど同じレスを書きたかったけど我慢してたら
ちゃんと書いてくれる人がいましたね

165 :名無しさん@お腹いっぱい。:03/09/13 22:47 ID:???
>>158
この場合


プラズマテレビを買う


が正解

166 :名無しさん@お腹いっぱい。:03/09/14 10:37 ID:8U60Mzm0
JDBC+javaプログラミング初心者なのですが、

ところでPostgreSQLのjdbcって実装されてないメソッド多くない?
pg72jdbc2.jarとか逆コンパイルして見てみたら
Connection.prepareStatement(String sql, String [] columnNames)
とかないし…。
INSERTした行をどうやって返せというんだ…。

みんなは自前で実装とかしてるの?


167 :名無しさん@お腹いっぱい。:03/09/14 16:47 ID:???
俺には>>166が何を言わんとしているのかが解らん。。。

168 :名無しさん@お腹いっぱい。:03/09/14 22:05 ID:FTEx2UYb
質問です。

テーブルに keyword,value という属性があって、
keywordをキーとして登録している場合に、

INSERT で keyword と value をセットしていくのですが、
一度テーブルに入れた keyword が来たら、その keyword の
valueの値を更新(value=value+new_valueなど)したいのです。

この場合は、まず SELECT で keyword が存在するか探してから、
INSERT するか UPDATE するか判断するやり方を行ったのですが、
何分データの量が多いので、遅すぎて困っています。

そこで、 INSERTしてから、キーがかち合って失敗したら、
UPDATE を行い、かち合わなかったそのまま何もせず、次のデータを投入、
するやり方に変えましたが、たしかにかち合うデータが少ない場合は、
早いのですが、これではINSERTに失敗するとエラーとなり、
トランザクション処理中だと処理が停止してしまいます。

こういう場合は、どうやれば効率がいいのでしょうか?
教えてください。お願いします。


169 :135:03/09/14 23:33 ID:???
>>168
value + new_value の+が、算術演算の加算なら、
keyが重複してもかまわずinsertして、
呼び出すときに毎回 select sum(value) from foo_table group by keyword;

>> 152
もしかして私のこと? 何の後VACUUM ANALYZE?


170 :名無しさん@お腹いっぱい。:03/09/14 23:59 ID:???
>>168
まず、何件くらいのデータなのか明らかに。

で、データ挿入と検索の比率は?
検索が少ないのなら169の案でもいいと思うが、
普通は"そりゃないよ"と思う。

トランザクションが絡むのかどうか知らんが、
ストアドプロシジャでロジックを組むと多少速くなるかも。


とにかく質問の背景をはっきりさせないとアドバイスできない。


171 :168:03/09/15 00:13 ID:/fwmc9rM
はい、

INSERT するデータは1回目は100〜300万件程度で、
キーが重なる確率はおよそ5%以下で、
2回目は50〜150万程度で、こちらはたぶん3分の2が重なりそうです。

ということは、

1回目はキーをドロップして、片っ端から INSERTした後に、キーをつけ直し、
2回目はSELECTして見つかったらUPDATEし、見つからなければINSERT

という方法がよいのでしょうか?

トランザクション内だと、少しでもエラーだすと停止しちゃうんですよね。
エラー出しても停止しなければ、楽なのですが。

172 :169:03/09/15 01:09 ID:???
ん? 
2回あわせて最大450万件をinsertした後は、
データは増えず、selectのみということですか。

>1回目はキーをドロップして、片っ端から INSERTした後に、キーをつけ直し

後からキーをどうやってつけるのだ。


173 :名無しさん@お腹いっぱい。:03/09/15 02:13 ID:???
>>171
俺ならデータのままスクリプトプログラムかなんかで処理する。
csvかなんかだったらsortかまして
重複部分は事前に値を足した上で、
最後に一括してDBにINSERT文のバッチ処理。

もしくは、
やはり生データをsortして問題を小さく分割してDB処理を行う。
例えばKeywordの[A-D]*、[E-M]*、...、[q-z]*
とソート後のデータを分割して、それぞれDBで処理する。


詳しくは言えないが俺も500万件強のデータに対して
似たような処理をしたことがあるが、
こういう場合は分割統治法のバリエーションで対処するのは基本。


とにかく、日常的にデータ挿入とデータ検索を行うのか、
それともデータ投入時に一度(2度?)だけ行う処理なのかで、
まったく対処が違うのでそこのところは最初にかかないといけないね。
今回は後者の簡単なほうだったのでよかったが。


174 :168:03/09/15 02:13 ID:???
ええっと、まだDB自体触り初めて間がないのですが、
ALTERコマンドでプライマリーキーをDROPして、
データを一括でインサートしたあと、
再びALTERコマンドでプライマリーキーをADDしようと思ったんですが。

175 :168:03/09/15 02:24 ID:???
データ投入には、2,3時間、
データ閲覧時はCGIなので、長くて2,3秒で行いたいのですが、
無理でしょうか?

また、keywordは実は複数もってまして、
INSERT時にも、UPDATE時にも、WHEREで複数の条件
で絞り込まないといけないんです。

176 :あぼーん:あぼーん
あぼーん

177 :名無しさん@お腹いっぱい。:03/09/15 08:59 ID:???
で、それを1トランザクションにしなければならないのか?

178 :名無しさん@お腹いっぱい。:03/09/15 10:13 ID:???
トリガ使えば? INSETUP OR UPDATE で...
か、173の言うようにテキスト処理させるのが楽かな?

キー重複のテキスト処理は良くやる。
これからInsertのキーで、あらかじめDeleteしてから、一括Insertとか。
Updateの切り分けロジックいらねし、まま早い。

今回のような加算ロジックはストアドというよりやっぱトリガっしょ?

179 :名無しさん@お腹いっぱい。:03/09/15 10:21 ID:???
ひとまず、打ち込んだcreate table 文か、psql内で \d table_name とやった結果を見せて。
それと、投入するデータの例もいくつか。


180 :168:03/09/15 12:55 ID:???
そっか、こういうときにトリガってものを使うんですね。
BEFORE INSERT とかすればいいんですね。

いったん別テーブルに丸ごとコピーして、
ALTERでキーを外して、一括インサートした後、ALTERで再びキーを付けて、
VACUUM ANALYZEして、それを元のテーブルにリネームしようとおもってたのですが。

ちなみにテーブルは、

CREATE TABLE(key1 int8,key2 int8,key3 int8,
data_total int8, data1 int8, ... , data100 int8,
PRIMARY KEY(key1,key2,key3));

こんな感じです。

途中で、データ投入プログラムに障害が発生したときのために、
トランザクションでやって、発生したらロールバッグする予定です。

181 :168:03/09/15 13:11 ID:???
こんなテーブルが4,5種類あります。

INSERTはこんな感じのが100〜300万件
INSERT INTO VALUES (2321,321551,232,576678678,100,23,233,232,..,232);

ちなみに、key1,key2,key3は実は文字列なのですが、新しいキーがでてくるごとに、
別テーブルで、文字列とユニークな数字(シリアル)を振って、
ハッシュみたいな感じにしています。





182 :168:03/09/15 13:17 ID:???
あ、今気がついたのですが、
トリガを使っても、結局 SELECTしてINSERTかUPDATEか選択する処理を、
DBに毎回やらせることになるので、ストアドでやるのと、
時間はあまりかわりそうにないですね。

やはりキーを外して、一括投入してから同じキーをGROUPBYして、集計して、
キーを付け直して、VACUUM ANALYZEすのがベストなんでしょうか。


183 :名無しさん@お腹いっぱい。:03/09/15 13:29 ID:???
>>180
>途中で、データ投入プログラムに障害が発生したときのために、
>トランザクションでやって、発生したらロールバッグする予定です。

障害が発生したらそれ以前に投入したデータもすべてrollback
しなければならない性質のものなのか?これまで挙げられた
状況を見る限りそういうふうには見えないが。

障害が発生した時点で一旦止めて、残りのデータだけを再投入
するんでも良いような気がするが。だいたい、何百万件のバッチを
1トランザクションで投入するなんてあんまり聞かないし。


184 :168:03/09/15 14:16 ID:???
データ投入時のデータは、一度失敗すると、やりなおしがききません。
やり直ししようと思って、後で途中からはできないんです。
データが、再度やろうとすると、中身が変わってますので。

やるなら、一旦データをファイルに落として保存して、
そのファイルをDBに投入しなければいけません。


185 :名無しさん@お腹いっぱい。:03/09/15 16:51 ID:???
なーんか特殊すぎる要件だな。
つまり途中でなにかひとつでもトラブルがあれば投入データ全体が
パーということか。しかも再実行は最初からやり直さなければならない
けれども、その内容が前回と違ってしまうのは許容できると。
数分で終わるjobならともかく、何時間もかかるものだったらオレなら
素直にファイルに落とすけどな。

186 :名無しさん@お腹いっぱい。:03/09/15 23:24 ID:???
>>185
一票!(気持ち的には百票!)

187 :名無しさん@お腹いっぱい。:03/09/16 09:51 ID:???
最後の方をちらっと見ただけですが、
一時的にテンポラリのTABLEを作成し、そこにINSERTしたらどうでしょ
読むときはその一時的なテーブルを考慮しつつ読み出す仕組みを作ればいいし
あとでマージ処理を部分ごとに行うようにするとかもできるし

188 :名無しさん@お腹いっぱい。:03/09/16 12:01 ID:???

そうゆうのはよくない。

189 :名無しさん@お腹いっぱい。:03/09/16 12:38 ID:???
そうか?
POSシステムで待ちキュー使ったやつが
そんな感じのシステムだが

190 :名無しさん@お腹いっぱい。:03/09/16 14:42 ID:4ovfBvbl
データ投入時にかなり時間と負荷がかかるが一度きり。
通常は普通の検索を行う。

だから、検索時にテンポラリとかちょっとでも面倒なことは避ける。
検索は普通に行い、データ投入をうまくやることを第一に考える。

だろ。


191 :名無しさん@お腹いっぱい。:03/09/18 02:06 ID:F8qSF692
ファイルからテーブルへデータを10万件ぐらいインポートしまして、
select uid,sum(file_size) from file_data group by (uid);

このようにすることによって、各ユーザの、所有ファイルサイズが出るようになっているのですが、
だいたい表示まで7〜8秒かかります。

表示を2〜3秒に縮めることは可能でしょうか?

PostgreSQL 7.3.4を使用しています。


192 :名無しさん@お腹いっぱい。:03/09/18 02:28 ID:???
>>192
そのままだとどうしても全行参照しないといけないから、
DB環境を向上させるしかないんじゃない?

それかユーザ対ファイルサイズの別テーブルをつくって、
元テーブルの更新のたびにトリガで増減させるか。

193 :192:03/09/18 02:29 ID:???
ごめん
192はもちろん>>191

194 :名無しさん@お腹いっぱい。:03/09/18 02:42 ID:F8qSF692
>>192
ありがとうございます。
遊びでやってたら、どっぷりはまってしまいました。

別テーブル作ってやってみようと思います。


195 :名無しさん@お腹いっぱい。:03/09/18 09:43 ID:s2w5UDM+
ADO.NETでPostgreSQLに接続するときの接続文字列は?

196 :名無しさん@お腹いっぱい。:03/09/18 10:37 ID:???
pg_dump実行時に、
pg_dump: handler procedure for procedural language plpgsql not found
というエラーが出てしまいます。

先日までは正常に pg_dump できていたんだけど、50万件ぐらいの
インポートをした後からこんな風になってしまい。

読み書き自体はできているし、psqlで叩くことも出来ているんだけど・・・

どうか知恵を貸してください(_o_)





197 :名無しさん@お腹いっぱい。:03/09/18 13:47 ID:r7COYCkE
>>195
ODBDかますんなら
 Provider=MSDASQL; DSN=PostgreSQL; UID=myid; PWD=myname
直接なら
 Provider=PostgreSQL; UID=myid; PWD=myname

198 :名無しさん@お腹いっぱい。:03/09/18 14:02 ID:???
データベースの権限に関してハマっています。
名前「aaa」、所有者「aaa」というデータベースを作成し
pg_hba.confでのアクセス項目はcrypt、ユーザ「aaa」と「bbb」の権限はno,noとします。
この状態でユーザー「bbb」がデータベース「aaa」にテーブルを作れてしまうのですが
これを出来なくする事は可能でしょうか?。
関係ありそうなgrant等は調べたのですがダメポな雰囲気が漂ってます。これは仕様なのかな・・・

199 :あぼーん:あぼーん
あぼーん

200 :名無しさん@お腹いっぱい。:03/09/18 22:38 ID:FHl51+TU
ローカルアプリケーションからリモートのPostgreSQLに
画像を登録したいのですが、ラージオブジェクトを
使う方法でも、rootでなければならない、登録する画像がリモート
ホストにあるファイルしかだめなど、具体的にどのような
手順で行えばよいか分かりません。どなたか
方法をご教授ください。


201 :名無しさん@お腹いっぱい。:03/09/18 23:00 ID:F8qSF692
double precision 型のデータでどうしても、小数点以下を表示したい場合はどうすればよいでしょうか?

PostgreSQL 7.3.4です。


202 :名無しさん@お腹いっぱい。:03/09/19 02:02 ID:V6D4fNTS

Linux上にてpostmasterを自動起動させる方法が知りたいのです。
パーペキにFAQだとは思うのですが(^^;、うまく検索することが出来ません。
環境はRedhat7.2+postgreSQL7.2です。initdbまでは流せました。



203 :名無しさん@お腹いっぱい。:03/09/19 14:10 ID:???
( ゚д゚) …
http://www.google.com/search?num=50&lr=lang_ja&q=Linux%20PostgreSQL%20自動起動


204 :名無しさん@お腹いっぱい。:03/09/19 14:21 ID:???
>>203
中途半端にURLエスケープされてるなw

205 :名無しさん@お腹いっぱい。:03/09/19 20:39 ID:???
>>202
PostgreSQLをRPMで入れたんならntsysvかchkconfigコマンド
ソースから自分で/usr/localとかに入れたんなら >>203

206 :73:03/09/19 23:01 ID:???
>>203
>>204
>>205
どもでした。chkconfigでイケました。スクリプトも既に用意されていたのでラクチンでした。

……とか思っていたら、7.1→7.2にしたら突然、odbc経由でAccessから覗けなくなりますた(;´∀`)
えと、起動スクリプトに「-i」オプションが付いているのかと思って「postmaster -i -S -D /var/lib/pgsql/data/」と
自分で起動して見ましたが×、pg_hba.confに「host all 192.168.0.100 255.255.255.0 trust」という一文があるのも
確認してあります。この二点のほかにチェックすべき点があればご指摘ください。


207 :名無しさん@お腹いっぱい。:03/09/19 23:19 ID:???
>>206
ODBCドライバ最新にする
最新のやつは日本語対応してるので日本語パッチいらないよ

208 :73:03/09/20 10:44 ID:???
>>207
http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/
にある最新のモノを使っているのですが……ここのは古い?

209 :名無しさん@お腹いっぱい。:03/09/20 22:00 ID:/xl5rns3
基本的なことなのかもしれませんが、教えてください。
例えば、C言語で作ったアプリから、あるDBをオープンするとします。仮にhogeとします。
そして、 PHPからも hogeをオープンして、
Rubyからもオープンしたとします。

同じDBを3つ同時にオープンしに行っても問題ないのでしょうか?

PostgreSQL 7.3.4つかってます。


210 :名無しさん@お腹いっぱい。:03/09/20 22:05 ID:???
PostgreSQLに問題はない。

ただし、使う側に問題がある。
セッションとかトランザクションとか勉強してから使ったほうがよい。

211 :名無しさん@お腹いっぱい。:03/09/21 03:30 ID:???
>>200
まずは日本語から勉強しなければならないわけだが。

212 :名無しさん@お腹いっぱい。:03/09/21 14:56 ID:???
>>208
今の最新は7.03.xxxx
私もそれ使ってたが本体バージョンアップしたら使えなくなって最新にした

213 :208:03/09/21 16:21 ID:???
>>212
どもでつ……でも、これでもダメでした(T_T)
リンクを一旦切って最初からやり直そうとしても、ODBCドライバ選んだ時点でエラーが出て張りなおせません(T_T)

214 :名無しさん@お腹いっぱい。:03/09/21 18:22 ID:???
エラーってどんな?
サーバ側では何も出てないの?

215 :208:03/09/21 19:35 ID:???
>>214
ODBC-呼び出しが失敗しました。

Could not connect to the server.
Could not connect to remote socket(#101)

216 :名無しさん@お腹いっぱい。:03/09/21 19:51 ID:???
>>215
>>206で新しくしたと言っていたが、pg_hba.confがデフォに書き換わったなんて言わないよな?

217 :名無しさん@お腹いっぱい。:03/09/21 19:52 ID:???

書き換わったんじゃなくて参照元な。デフォ以外のディレクトリインストールしていると
良くはまるから。

218 :208:03/09/21 19:55 ID:???
>>216
再度確認しました。ちゃんと「host all 192.168.0.100 255.255.255.0 trust」が入っています。

219 :208:03/09/21 19:56 ID:???
>>218
……え?(;´∀`)
pg_hba.conf以外の名前でですか?

とりあえず「find / -name pg_hba.conf」で引っかかるのは一つだけです。


220 :名無しさん@お腹いっぱい。:03/09/21 20:15 ID:???
念のため聞くけど、postgresql.conf で tcpip_socket = true にはしてるよね?

221 :208:03/09/21 21:08 ID:???
>>220
……ビンゴでした(;´∀`)

すいませんっ、このファイル何ですかっ?!(情け無いことにマジ質問(T_T))

222 :名無しさん@お腹いっぱい。:03/09/21 22:02 ID:???
>>221
7.xからある、postmaster へのオプション定義等の設定ファイル
pg_ctl で起動できるようになったための処置、、なのかなあ

実行時に設定できるパラメタのデフォルト値を設定するファイルでもある
psql で SET RESET SHOW コマンドを調べてみるといいかも
(confファイルはRESETで設定される値でもある)

223 :208:03/09/21 23:38 ID:???
>>222
なるほど。ご丁寧にありがとうございました(拝)
もしかしたら、7.1.xではデフォルトがTrueになっていたんでしょうか?=>問題の箇所

224 :名無しさん@お腹いっぱい。:03/09/22 00:29 ID:???
いままで、デフォルトでtcpipがtrueになってたことは無いけどねえ・・・
rpmとかならありうるかも
あと考えられるのは、、、起動オプションが設定を上書きしてたのかもね

225 :名無しさん@お腹いっぱい。:03/09/22 01:22 ID:???
rpmでも普通offだわなぁ。
最初っからonなのは見たことないや。

226 :名無しさん@お腹いっぱい。:03/09/22 17:42 ID:Ex67H8Sv
PostgreSQL 7.3.2 + PHP 4.2.2 でデータベースとその検索サイトを作っています。
検索する時に、1ページに指定した件数表示というようにするには、
SELECT に LIMIT と OFFSET を指定すればとりあえずできるのですが、
さらに全部で何件あるかとか、
各検索結果ページへのリンクとかも表示したいとなると、
やはり、LIMIT, OFFSET なしで SELECT してから
必要な所だけ表示するしかないのでしょうか。

それだと SELECT に時間、メモリをたくさん使うので
もっとスマート方法ありませんでしょうか。

227 :名無しさん@お腹いっぱい。:03/09/22 17:55 ID:???
オレは、同じ検索条件で count(*) で数を数え、
LIMIT,OFFSET でページ数調整しながら表示する、というのは
よくやるけど。count(*)もまあ、LIMIT無しといえばそうか

228 :226:03/09/22 18:11 ID:???
>>227
ありがとうございます。
count(*) でやってみました。
結果が一行一列なので素早くできそうです。ありがとうございました。


229 :名無しさん@お腹いっぱい。:03/09/23 19:10 ID:???
一般論として、select count(*)はかなりパフォーマンス悪いんだけど。
ポスグレはどうなのさ?

230 :名無しさん@お腹いっぱい。:03/09/23 19:25 ID:???
そりゃ数えるんだからしかたがない。他に手段も無いし
全件SELECTするよりゃまし

231 :226:03/09/23 19:52 ID:???
実際のデータで select させたら結構遅かったです・・・。
全部 select するよりましなぐらいですね。

232 :229:03/09/23 19:59 ID:???
いや、全行確実にデータの入っている列(一般にはIDなどのPK列)を
countする方がずっと早いっしょってこと。
それでも遅いようなら、行数を格納するためだけのテーブル一枚
用意することだってある。
(正規化に反するし、不整合が起きないよう気をつけなければならないけど)

count(*)はまず使わない。

233 :名無しさん@お腹いっぱい。:03/09/23 20:43 ID:???
数万件程度のデータで、そんなに頻繁に使うことが無い状況だから
count(*)使ってるし、不便無いですね

状況によるってこと。行数を格納するテーブルにトリガ使って
書くほうがパフォーマンスに影響することもあるし

234 :233:03/09/23 20:45 ID:???
>>232
もちろん、indexやkeyがわかってるんなら、それを指定するんでもかまわん

235 :名無しさん@お腹いっぱい。:03/09/23 23:21 ID:???
>行数を格納するためだけのテーブル一枚用意することだってある。

検索条件ごとに変わる数を考えられるパターンすべて保存しておくの?
そりゃすごいね

236 :名無しさん@お腹いっぱい。:03/09/23 23:42 ID:???
ちょっと質問
count(*)は慣用句だから変にcount(1)とかするより速いんですよね?

237 :名無しさん@お腹いっぱい。:03/09/24 00:14 ID:???
>>232
どういう実装するとそうなるんだろう。
いまいち理屈がわからん。

238 :名無しさん@お腹いっぱい。:03/09/24 00:25 ID:???
>>235
大規模なDBで、かつ全件数だけはさっさと出したいという用途で
1行1列(設計者の好みで1行2列のことも)のテーブル設けるんだよ。
で、トリガ使って値を増減させるっちゅー話だろ。
countでは時間が掛かりすぎる場合、たまにそういう設計にする。

もちろん検索条件なんか付けないぞ。普通。

>>236
Oracleなんかでは、count(*)は使うな、極力count(列名)にしろといわれる。
まあ速度差が体感できるほどの件数がなけりゃ同じことだとは思うが・・・
PostgreSQLでどんくらい差が出るのか知りたいところ。

239 :238:03/09/24 00:32 ID:???
ああ、インデックス使ってもいいけど。
少なくとも、count(*)は避けるようにしている。

240 :名無しさん@お腹いっぱい。:03/09/24 06:27 ID:???
バイナリデータの挿入の仕方がマニュアルに書いてない
気がするんですが、どうやるんでしょう。
create table images (imagname text, img bytea);
このimg列に /tmp/hoge.jpg を挿入したいです。


241 :名無しさん@お腹いっぱい。:03/09/24 07:04 ID:???
マニュアルだとこれかなあ
http://www.postgresql.jp/document/pg734doc/user/datatype-binary.html#DATATYPE-BINARY-TABLE

実際のところ、0と'と\さえエスケープすればあとはそのままでもいいみたい
コマンドでなにか便利なものがあるかは知らない。phpはあるようだが・・・

242 :名無しさん@お腹いっぱい。:03/09/24 07:11 ID:???
>>241
そこ読んでもサパーリだったんでつ。。
INSERT INTO img VALUES ('myimage','/tmp/hoge.jpg');
みたいにすんなりはいかないんでしょうか。。?
ちとPHPの関数あたってみます。

243 :名無しさん@お腹いっぱい。:03/09/24 22:02 ID:CYynVP14
postgresって中規模用途だとして、中規模ってどのくらいなのか
数字で教えてホスィ。
テーブル構成やらチューニングやらによるとか
使い方による、という結論になるんでしょうが
どっかにレポートとかないもんでしょうか。

普通にDB設計して仮に会員情報テーブルに100万レコード入れたとして
さほど問題ないパフォーマンス?
それとも10万くらいでOK?2万くらいでキツい?

あーこーゆーこと考えるとOracle・MySQL・DB2とかもどれくらいが許容範囲なのか
気になる。
エロい人教えてくらはい。

244 :243:03/09/24 22:33 ID:CYynVP14
「大規模会員管理システムへの PostgreSQL の適用事例
渡部 広志 氏(株式会社 NTT データ)
現在約500万人、将来的には1000万人規模となることが想定される
大規模会員システムの DBMS に PostgreSQL を採用させて頂きました。」

http://www.postgresql.jp/misc/seminar/2003-05-17/
http://www.postgresql.jp/misc/seminar/2003-05-17/A2_watabe.pdf

という記事があるので頑張れば1000万人規模でもイケると。

245 :243:03/09/24 22:38 ID:???
あー今記事みたら複数サーバにデータ分けて
検索ルーチンを工夫してやってる。
主婦のビックリ倹約アイデアみたいな。

んでも単体DBでの運用実績10万というデータを拾えたんでラッキーか。


246 :名無しさん@お腹いっぱい。:03/09/24 23:01 ID:???
>>243
そういうのは第一に要件、そして設計やマシン自体の能力に依存
する部分が大きいからねぇ。10万レコード超えても全然問題ない
という事例があったとしても、>>243の事例で10万レコード大丈夫か
というのは誰にもわからない。
ちなみにうちでは1テーブル3億レコード超えているけど。

>>244の事例はアプリケーション側で力技のパーティショニングを
実装したということか。なかなか興味深いね。

247 :名無しさん@お腹いっぱい。:03/09/25 01:04 ID:???
ガイシュツだったらスマソ

CygwinでPostgresつかってるんですが、最近バージョン上げたら
pg_ctl stopがちゃんと動かなくなった。(killのusageが出る。)

どうもCygwinのkill(/bin/kill, kill(cygwin)1.14)がまずくなったっぽい。
pg_ctlが動かしてる方はこっち。

bash組み込みコマンドのほうのkillならちゃんと殺してくれるっぽいので
pg_ctl頭の#!以下をいじってbash上で動かすようにして応急処置してみた。
これでいいんかな、という疑問は残ったけど。

248 :名無しさん@お腹いっぱい。:03/09/25 14:40 ID:???
レンタルDBのデータをバックアップするのに
ダンプがありますがダンプ中のセキュリティとかは
どうなんでしょうか?絶対とはいえなくても安全
なのでしょうか?
他にもいい方法などあればあわせてお願いします

249 :243:03/09/25 15:51 ID:???
>>246
3億レコードってすごい。
パフォーマンス的には問題なく運用できてるんですよね?
PostgreSQLでの運用実績では賞賛に値する
んではないでしょうか。
よろしければ設計・運用で気配りした点など教えていただけないでしょうか。


250 :名無しさん@お腹いっぱい。:03/09/25 23:06 ID:???
>>248
セキュリティとはなんぞや?
そもそも、何がどうなることを心配しているの?

251 :246:03/09/26 00:43 ID:???
>>249
そこはそれ、要件しだいということで。うちの場合は最終結果が
それなりの量がある場合は検索に1分くらいかかっても許容範囲
だったりするし、同時アクセスもそんなに多くないから。

あとはごく普通に、メモリはめいっぱい割り当てる、きちんと
インデクスが使われるよう確認する、アナライズは定期的に行う、
などさえ注意しておけば。


252 :248:03/09/26 14:29 ID:???
>>250 DBからローカルにダンプする際に
第三者にデータをスキミングされる心配はないの?


253 :名無しさん@お腹いっぱい。:03/09/26 18:53 ID:???
>>252

SCPとか使えよ(;´Д`)

254 :243:03/09/26 21:47 ID:???
>>251
なるほど。情報提供感謝です。

251さんDBの場合は
検索式が大量にHITする場合はしょうがないとして、
3億レコードから適当な検索SQL文で10件ぐらいを
HITさせる、という場合でも一分ほどかかりますか?


255 :名無しさん@お腹いっぱい。:03/09/26 22:39 ID:???
>>252
うんまあでもそういうのってポスグレならではっつーもんでもなかろ。

pg_dumpはDBの中身が平文で標準出力に出るわけだから、
標準入出力が盗聴可能ならごっそり持っていかれるわな。
ファイルにリダイレクトする場合は、パーミッションを気にしなきゃならん
というあまりに当然な話もある。
ダンプしたファイルをネットワーク越しにやりとりするなら
sshトンネリングしたFTPかscpを使うだろうし。

結局、UNIXオペレーション一般で気を使うべきところに
気を使うしかないんじゃないの?

ポート5432経由でDB叩いてるときは・・・何が流れているんだろうねぇ。
誰かキャプチャしてみたことない?

256 :名無しさん@Emacs:03/09/26 22:49 ID:???
SSL使ってない場合は、クエリとかタプルとかが平文で流れてますよ。
ここらへん。

http://www.postgresql.jp/document/pg732doc/developer/protocol.html
http://www.postgresql.jp/document/pg732doc/developer/protocol-message-formats.html


257 :248:03/09/27 14:33 ID:???
カキコありがとうございます
やはりそうなんですか…

telnetとかssh使えない鯖だと困りますね…
他にはアイデア何か無いですかねー?
鯖変えた方がいいのかな…

258 :名無しさん@お腹いっぱい。:03/09/27 16:52 ID:???
ローカルなら通信の盗聴は気にしないでいいんじゃ?
rootはしょうがないが

259 :名無しさん@お腹いっぱい。:03/09/27 23:00 ID:YVKPHFfz
PostgreSQLが使える無料のレンタルサーバってxrea意外に無いのかなあ。

260 :名無しさん@お腹いっぱい。:03/09/27 23:06 ID:???
>>257
シェルがつかえないようなのでネットワーク上暗号化するなら…
a. PerlのCGIかなんかでpg_dumpの出力を暗号化してファイルに保存するかメール送信。暗号化モジュールはCPANにいくつかある。
b. 同じくCGIかPHPなどでpg_dumpの出力をhttpsで転送する。もちろん転送先にWebサーバが必要。

261 :248:03/09/28 13:43 ID:???
>>260 ありがとうございまーす。a.で検討してみまーす

262 :名無しさん@お腹いっぱい。:03/09/30 21:06 ID:1ZGrk1y4
質問です。PostgreSQL 7.3.4 において、

 CREATE TABLE foo (a int4, b int 4, primary key(a));

で作ったテーブルを、

 ALTER TABLE foo RENAME TO bar;
 ALTER TABLE foo_pkey RENAME TO bar_pkey;

で 名前を変えました。

db=# \d bar
:
Indexes: bar_pkey primary key btree (a)

その後、ダンプして、次のように DB を作り直してリストアを行いました。

% pg_dump > backup
% dropdb db ; createdb db
% cat backup | psql -f - db

db=# \d bar
:
Indexes: foo_pkey primary key btree (a)

なぜか、indexが変更前の名前のままでした。
pg_dump の時点で古い名前が出力されています。

これは何故でしょうか?バグなんでしょうか?
それとも、indexの名前変更に特別の手段が必要なのでしょうか?
教えてください。


263 :あぼーん:あぼーん
あぼーん

264 :名無しさん@お腹いっぱい。:03/09/30 22:15 ID:???
>>262
primary key の名が、TABLE名_pkey と決まってるわけじゃない
作成時にそういう名前で作って定義してるだけ

この場合、primary key は消して再定義して作ったほうがよさげ
消すのも新たにkeyを設定するのもALTER TABLEでできる

265 :名無しさん@お腹いっぱい。:03/09/30 22:26 ID:???
なるほど。

先ほど色々調べていたんですが、
PostgreSQL 7.2.x から primary key を後から付けることが
できるようになってたんですね。

一旦、ALTER TABLE で DROP して、再度 ADD するんですね。
となると、名前を変えるだけなのに、
再び VACUUM ANALYZE もしないといけないんでしょうか。

indexの名前を RENAME TO しても、ダンプしなければ、
ふつうに名前が変わっているようにみえるのですが…。
もちろん、普通に新しい名前でアクセスできますし。


266 :名無しさん@お腹いっぱい。:03/10/01 11:13 ID:???
今、上司から、
「postgresql.confのパラメータの意味を全て洗い出しといて」
といわれましたが、ググってみましたが、見つかりませんでした。

postgresql.confの内容の説明が載っているサイトがあれば、教えていただけませんでしょうか?

よろしくお願いいたします。

267 :名無しさん@お腹いっぱい。:03/10/01 16:39 ID:???
>>266
マニュアルみればいいじゃん。
上司もばか。

268 :名無しさん@お腹いっぱい。:03/10/01 20:31 ID:???
>>267
放っておけばいいのに。
優しい奴め(w

269 :名無しさん@お腹いっぱい。:03/10/01 23:50 ID:???
一部のパラメータの「意味」はソース読まないとわかんないよ。

270 :名無しさん@お腹いっぱい。:03/10/03 01:58 ID:cPpR/REg
すでに行ロックされている時に select for update
で待ちたくないのですが、何か方法はありますか?


271 :名無しさん@お腹いっぱい。:03/10/03 09:35 ID:wUcJkeJo
>>270
for update nowait にして、即例外を投げてもらうようにしたら?

272 :名無しさん@お腹いっぱい。:03/10/03 11:04 ID:???
>>271
ポスグレでnowaitできたっけ?

273 :名無しさん@お腹いっぱい。:03/10/03 15:37 ID:???
>>271
手元の7.3.2にはなさそうです < nowait


274 :271:03/10/03 17:25 ID:???
知らん <--無責任なw

275 :名無しさん@お腹いっぱい。:03/10/03 17:58 ID:???


                 ̄ ̄ ̄ ̄-----________ \ | /  -- ̄
      ---------------------------------  。←>>271
           _______----------- ̄ ̄ ̄ ̄ ̄
                     ∧ ∧    / / |  \   イ
                    (   )  /  ./  |    \ /
                 _ /    )/   /  |     /|
                 ぅ/ /   //    /   |    / |
                ノ  ,/   /'    /    |│ /|
 _____      ,./ //    |     /    .─┼─ |
(_____二二二二)  ノ ( (.  |    / ┼┐─┼─
              ^^^'  ヽ, |  |   /  .││  .│



276 :名無しさん@お腹いっぱい。:03/10/03 23:14 ID:???
バージョンが0.1上がるごとにどかっと仕様変えるのなんとかして・・・

277 :名無しさん@お腹いっぱい。:03/10/05 02:50 ID:???
>>270
キャンセルすることはできたと思う。
開発者マニュアル読みあさってみれば?
>>271
nowaitはできないよ。


278 :名無しさん@お腹いっぱい。:03/10/05 15:32 ID:WMw5Qpzo
>277
レスおせーよ

279 :あぼーん:あぼーん
あぼーん

280 :名無しさん@お腹いっぱい。:03/10/06 22:30 ID:???
pg_dump -Fc でダンプしたファイルを pg_restore -t table で特定のテーブルだけを
リストアするとprimary keyとかindexが復元されないのですが、これって仕様ですか?


281 :名無しさん@お腹いっぱい。:03/10/07 00:21 ID:???
多分-tはテーブルだけ。
インデックスは-iでリストアする。

282 :名無しさん@お腹いっぱい。:03/10/09 14:14 ID:???
>>277
nowaitの実装は、WebDBの最新号に、かいてあったけど、
ソース変更しないとだめ。

自分は発行したsql文をある時間でキャンセルすることで対応した。

283 :TREK 5500:03/10/12 05:48 ID:fX3MaFhg
初心者ですけど、教えてください。
ALTER TABLE で、項目を追加したりすると、
マイクロソフトACCESS(2000)からODBC経由でテーブルを参照できなくなってしまいます。
そういうものなのでしょうか?

284 :名無しさん@お腹いっぱい。:03/10/12 09:48 ID:???
>>283
そういうものではないです。
テーブルのリンクをやりなおしてみてください。

285 :TREK 5500:03/10/12 14:08 ID:fX3MaFhg
それでもだめでした。


286 :NAME IS NULL:03/10/13 23:38 ID:J6F486gI
SQLで分からない事があり、
どなたかご教授お願いできませんでしょうか?
環境はPostgreSQL 7.3.3です。

下記のようなテーブルがあり、
CREATE TABLE user_master(
regist_time timestamp(0) without time zone NOT NULL,
id CHAR(8) ,
name VARCHAR(25) ,
mail VARCHAR(50) ,
sex CHAR(1)
);
-------------------------------------------------------------
regist_time | id | name | mail | sex |
2003-10-12 03:57:00 | 111 | tanaka | tanaka@***.jp | m |
-------------------------------------------------------------
※ 性別(sex)は、男:m、女,wとなっております。

上記のテーブルを元に
-----------------------------
regist_time | 男 | 女 |
2003-10-12 | 20 | 10 |
2003-10-11 | 18 | 8 |
-----------------------------
日付別で男女別ユーザーの数をだしたいのですが、
どうSQLを書いていいものかわからず質問させていただきました。

287 :名無しさん@Emacs:03/10/14 00:29 ID:???
SELECT case when nullvalue(men_count.regist_time::date) then women_count.regist_time::date else men_count.regist_time::date end,
case when nullvalue(men) then 0 else men end,
case when nullvalue(women) then 0 else women end
FROM
( SELECT regist_time::date,count(sex) as men
FROM user_master
WHERE sex='m'
AND regist_time::date IN (SELECT regist_time::date FROM user_master GROUP by regist_time::date)
GROUP BY regist_time::date
) AS men_count
right join
( SELECT regist_time::date,count(sex) as women
FROM user_master
WHERE sex='w'
AND regist_time::date IN (SELECT regist_time::date FROM user_master GROUP by regist_time::date)
GROUP BY regist_time::date
) AS women_count
on men_count.regist_time::date = women_count.regist_time::date;


288 :名無しさん@Emacs:03/10/14 00:30 ID:???
もうダメ。オラにはこれが限界。
regist_time | id | name | mail | sex
---------------------+----------+------+------+-----
2003-10-13 23:59:06 | 00000001 | 1 | | m
2003-10-13 23:59:14 | 00000002 | 2 | | w
2003-10-13 23:59:18 | 00000003 | 3 | | w
2003-10-13 00:00:00 | 00000004 | 4 | | w
2003-10-13 00:00:00 | 00000005 | 5 | | m
2003-10-13 00:00:00 | 00000005 | 6 | | m
2003-10-14 00:00:00 | 00000007 | 7 | | w
2003-10-14 00:00:00 | 00000008 | 8 | | w
2003-10-14 00:00:00 | 00000009 | 9 | | w
2003-10-14 00:00:00 | 00000010 | 10 | | m
2003-10-15 00:00:00 | 00000011 | 11 | | w
(11 rows)

SQL実行すると、

regist_time | men | women
-------------+-----+-------
2003-10-13 | 3 | 3
2003-10-14 | 1 | 3
2003-10-15 | 0 | 1
(3 rows)

left outer joinとright outer joinを同時に実行する方法ってないの?


289 : :03/10/14 00:58 ID:c61+ht2N
>>288
full join?

290 :NAME IS NULL:03/10/14 02:17 ID:???
union使ったほうがよさげ。(ぼそ

291 :名無しさん@Emacs:03/10/14 02:18 ID:???
あ、full join ていうのがあったのでつか。。
いや、outer join使ったの初めてだったので。。

>288のright joinをfull joinに変えればできました。
パフォーマンスは知らんけど。


292 :名無しさん@Emacs:03/10/14 02:19 ID:???
>290
unionってどう使うのー? おせーてー。
その単語、今回チラッと知ったんだけど、使い方まで分からんかった。。


293 :NAME IS NULL:03/10/14 03:02 ID:???
select date,sum(men),sum(women)
from
(select regist_time::date as date,count(*) as men,0 as women
from user_master where sex='m' GROUP by regist_time::date
union
select regist_time::date,0,count(*)
from user_master where sex='w' GROUP by regist_time::date) as cnt
group by date;

暇つぶしに作ってみたっす。
要件に合ってるかも不明だし、>>287のSQLも良く見てないです(w
パフォーマンスが変わんないなら、短い方がよいからね。

294 :名無しさん@Emacs:03/10/14 03:37 ID:???
おー、unionってこう使うのか。勉強になるっす。


295 :NAME IS NULL:03/10/14 04:57 ID:???
PostgreSQL固有でないSQLレベルの話は
よそでやってくれって言おうと思ったら、
SQL専門のまともなスレって無いのね..


296 :NAME IS NULL:03/10/14 11:11 ID:???
はじめまして。

今、テーブル作成を行っているのですが、
CREATE TABLE CUSTOMER_LOGS(
CUSTOMER_ID VARCHAR(32) NOT NULL,
DESCRIPTION VARCHAR(255),
ACTION_USER VARCHAR(32),
ACTION_DATE TIMSTAMP(8) NOT NULL
);
で実行したところ、
ERROR: parser: parse error at or near "("
ERROR: parser: parse error at or near "("
と2行エラーメッセージが帰ってきます。
何が原因なのでしょうか?

297 :NAME IS NULL:03/10/14 11:17 ID:???
> TIMSTAMP(8)

「おれたちTIM」

298 :NAME IS NULL:03/10/14 12:52 ID:???
>>297
が!
構文ミスでしたか・・・
アリガトウございました・

299 :NAME IS NULL:03/10/14 13:29 ID:???
>>286は井上タン?

300 :NAME IS NULL:03/10/14 14:40 ID:???
>>296
気になったのだが、IDをVARCHAR型にするの?
INTなりの数字型にしてindexをつけないと重くなるような気がするけど。

301 : :03/10/14 17:31 ID:CXFd3VN7
postgres って、接続してきたユーザを IDENT 認証しようとしてきたとき、
そのユーザが UID=0 つまり root だったら無条件で接続拒否します?

302 :NAME IS NULL:03/10/14 18:27 ID:???
>>301
UID=0とか、関係ない。

303 : :03/10/16 09:31 ID:VFGmw4+V
みんな、ログは syslog 経由?
syslog 経由にする利点って何?

304 :NAME IS NULL:03/10/16 16:31 ID:???
最近面倒なんで、件数少ないのは全部 TEXT にしてるけど
どこかに VARCHAR とのベンチ比較とか無いですかねぇ

305 :NAME IS NULL:03/10/16 18:52 ID:???
PostgreSQL と通信するのに、ODBC とLibpq.dll つかったりしてるけど、
他になんかある?

306 :NAME IS NULL:03/10/16 20:30 ID:???
JDBC

307 : :03/10/16 21:05 ID:VFGmw4+V
7.3 には ALTER DATABASE name RENAME newname
が無いんですが、どうやってデータベースの名前を変更するのでしょうか?

308 : :03/10/16 21:17 ID:VFGmw4+V
7.4beta4 のドキュメントでは
ALTER DATABASE name RENAME TO newname
があるそうです。

309 : :03/10/16 21:41 ID:VFGmw4+V
http://ml.postgresql.jp/pgsql-jp-old/pgsql-jp/2000Aug/msg00063.html からの引用

createdb efgh
pg_dump abcd > abcd.dump
psql -e efgh < abcd.dump



createdb efgh
pg_dump abcd | psql -e efgh

もうまくいきました。

310 :一時的にリードオンリーに:03/10/16 21:59 ID:VFGmw4+V
一時的に特定のデータベースへのアクセスを
リードオンリーに制限するにはどうすればいいのでしょうか?
やはり GRANT で全ユーザ、全テーブルの権限を
書き換えなくてはならないのでしょうか?

311 :psql コマンドで自分が誰かを表示:03/10/16 22:16 ID:VFGmw4+V
psql コマンドで PostgreSQL に接続しているとき、
自分がなんと言うユーザとして接続しているかわからなくなることがあるのですが、
who am i のようなコマンドはあるのでしょうか?

312 :psql コマンドで自分が誰かを表示:03/10/16 22:23 ID:VFGmw4+V
とりあえず show all; でいろいろ見られるかなと思ったんですが、
現在接続しているユーザの名前は見れませんでした。

313 :NAME IS NULL:03/10/16 22:35 ID:???
select getpgusername();

314 :psql コマンドで自分が誰かを表示:03/10/16 22:41 ID:VFGmw4+V
>>313 ありがとうございます。
SELECT CURRENT_USER; でもなにやら表示されるっぽいですが、
これって何かしら内部的に使われているテーブルから SELECT しているんでしょうか?
FROM が省略されているのでしょうか?

315 :Omitted FROM Caluses:03/10/16 22:53 ID:VFGmw4+V
Omitted FROM Clauses
PostgreSQL allows one to omit the FROM clause. It has a straightforward use to compute the results of simple expressions:

SELECT 2+2;

?column?
----------
4

つーことは、CURRENT_USER ってのはタダの内部変数で、
つまりタダの「式」