PostgreSQL 2テーブル目

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
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
1412: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
> テーブルにはユニークな番号が振ってある
この一節読んだだけで嫌な予感がしまつ。
4643: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.関数を作っておく。
テーブル設計がいじれ無い状況で、どれが一般的に速いものなのでしょうか?
5554:03/07/29 23:30 ID:kKpllBVe
誤:PostgreSQLでバラバラの度々同じ条件でテーブルを連結して…
正:PostgreSQLでバラバラのテーブルを度々同じ条件で連結して…
56あぼーん:あぼーん
あぼーん
57名無しさん@Emacs:03/07/30 08:30 ID:???
>54
どれもほとんど変わらんと思われ。
prepare使うと変わるかもしれんけどね。
5854: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も指定してるのはそういうもんなの?
6260: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:???
7773: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あぼーん:あぼーん
あぼーん
8073:03/08/17 13:36 ID:???
>>78
た、確かに……(T_T)
了解しました。この方式を保険にして、まずはPerlでシコシコ書いてみましょう。
アドバイスありがとうございました。
8160: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
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 サイクル以外それぞれの形式には違いはありません。
等価といっていいね。
なので見やすい方を採用しましょう。
9088: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)

オレもあんまし詳しくないんで、もっといいやり方あるかも
109108:03/08/29 16:34 ID:???
あ、これは同じ時刻で違うuidが複数あるとだめだね
110108: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/
112103: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:???
意味がよくわからなくてイメージわかない・・
115113: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:???
あ、テーブル作成時か。関数作るしかないか?
118113: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文はこの問い合わせが開始される直前までにコミットされた
データのみであり、コミットされていないデータや、
このトランザクションと同時に実行されてデータが
変更になったものなどは参照しません。
(しかし、コミットされていないものでも、
同じトランザクションで行われた更新の結果は参照します)
129thanks!: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がいちばんコスト少ない気がするが
138133: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 って実行されますか?
144135: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はどうだか知らんが。
148135: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=>

ありゃ?
149133: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:???
全行とは限らん
151135: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、、問題が出るとは思えないんだが・・・
156153: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;

160153: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に失敗するとエラーとなり、
トランザクション処理中だと処理が停止してしまいます。

こういう場合は、どうやれば効率がいいのでしょうか?
教えてください。お願いします。
169135: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の案でもいいと思うが、
普通は"そりゃないよ"と思う。

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


とにかく質問の背景をはっきりさせないとアドバイスできない。
171168:03/09/15 00:13 ID:/fwmc9rM
はい、

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

ということは、

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

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

トランザクション内だと、少しでもエラーだすと停止しちゃうんですよね。
エラー出しても停止しなければ、楽なのですが。
172169: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度?)だけ行う処理なのかで、
まったく対処が違うのでそこのところは最初にかかないといけないね。
今回は後者の簡単なほうだったのでよかったが。
174168:03/09/15 02:13 ID:???
ええっと、まだDB自体触り初めて間がないのですが、
ALTERコマンドでプライマリーキーをDROPして、
データを一括でインサートしたあと、
再びALTERコマンドでプライマリーキーをADDしようと思ったんですが。
175168: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 とやった結果を見せて。
それと、投入するデータの例もいくつか。
180168: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));

こんな感じです。

途中で、データ投入プログラムに障害が発生したときのために、
トランザクションでやって、発生したらロールバッグする予定です。
181168: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は実は文字列なのですが、新しいキーがでてくるごとに、
別テーブルで、文字列とユニークな数字(シリアル)を振って、
ハッシュみたいな感じにしています。



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

やはりキーを外して、一括投入してから同じキーをGROUPBYして、集計して、
キーを付け直して、VACUUM ANALYZEすのがベストなんでしょうか。
183名無しさん@お腹いっぱい。:03/09/15 13:29 ID:???
>>180
>途中で、データ投入プログラムに障害が発生したときのために、
>トランザクションでやって、発生したらロールバッグする予定です。

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

障害が発生した時点で一旦止めて、残りのデータだけを再投入
するんでも良いような気がするが。だいたい、何百万件のバッチを
1トランザクションで投入するなんてあんまり聞かないし。
184168: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環境を向上させるしかないんじゃない?

それかユーザ対ファイルサイズの別テーブルをつくって、
元テーブルの更新のたびにトリガで増減させるか。
193192: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:???
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
20673: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ドライバ最新にする
最新のやつは日本語対応してるので日本語パッチいらないよ
20873: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
私もそれ使ってたが本体バージョンアップしたら使えなくなって最新にした
213208:03/09/21 16:21 ID:???
>>212
どもでつ……でも、これでもダメでした(T_T)
リンクを一旦切って最初からやり直そうとしても、ODBCドライバ選んだ時点でエラーが出て張りなおせません(T_T)
214名無しさん@お腹いっぱい。:03/09/21 18:22 ID:???
エラーってどんな?
サーバ側では何も出てないの?
215208: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:???

書き換わったんじゃなくて参照元な。デフォ以外のディレクトリインストールしていると
良くはまるから。
218208:03/09/21 19:55 ID:???
>>216
再度確認しました。ちゃんと「host all 192.168.0.100 255.255.255.0 trust」が入っています。
219208: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 にはしてるよね?
221208: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で設定される値でもある)
223208: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無しといえばそうか
228226: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するよりゃまし
231226:03/09/23 19:52 ID:???
実際のデータで select させたら結構遅かったです・・・。
全部 select するよりましなぐらいですね。
232229:03/09/23 19:59 ID:???
いや、全行確実にデータの入っている列(一般にはIDなどのPK列)を
countする方がずっと早いっしょってこと。
それでも遅いようなら、行数を格納するためだけのテーブル一枚
用意することだってある。
(正規化に反するし、不整合が起きないよう気をつけなければならないけど)

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

状況によるってこと。行数を格納するテーブルにトリガ使って
書くほうがパフォーマンスに影響することもあるし
234233: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でどんくらい差が出るのか知りたいところ。
239238: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とかもどれくらいが許容範囲なのか
気になる。
エロい人教えてくらはい。
244243: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万人規模でもイケると。
245243: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のデータをバックアップするのに
ダンプがありますがダンプ中のセキュリティとかは
どうなんでしょうか?絶対とはいえなくても安全
なのでしょうか?
他にもいい方法などあればあわせてお願いします
249243:03/09/25 15:51 ID:???
>>246
3億レコードってすごい。
パフォーマンス的には問題なく運用できてるんですよね?
PostgreSQLでの運用実績では賞賛に値する
んではないでしょうか。
よろしければ設計・運用で気配りした点など教えていただけないでしょうか。
250名無しさん@お腹いっぱい。:03/09/25 23:06 ID:???
>>248
セキュリティとはなんぞや?
そもそも、何がどうなることを心配しているの?
251246:03/09/26 00:43 ID:???
>>249
そこはそれ、要件しだいということで。うちの場合は最終結果が
それなりの量がある場合は検索に1分くらいかかっても許容範囲
だったりするし、同時アクセスもそんなに多くないから。

あとはごく普通に、メモリはめいっぱい割り当てる、きちんと
インデクスが使われるよう確認する、アナライズは定期的に行う、
などさえ注意しておけば。
252248:03/09/26 14:29 ID:???
>>250 DBからローカルにダンプする際に
第三者にデータをスキミングされる心配はないの?
253名無しさん@お腹いっぱい。:03/09/26 18:53 ID:???
>>252

SCPとか使えよ(;´Д`)
254243: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
257248: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サーバが必要。
261248: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
274271: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文をある時間でキャンセルすることで対応した。
283TREK 5500:03/10/12 05:48 ID:fX3MaFhg
初心者ですけど、教えてください。
ALTER TABLE で、項目を追加したりすると、
マイクロソフトACCESS(2000)からODBC経由でテーブルを参照できなくなってしまいます。
そういうものなのでしょうか?
284名無しさん@お腹いっぱい。:03/10/12 09:48 ID:???
>>283
そういうものではないです。
テーブルのリンクをやりなおしてみてください。
285TREK 5500:03/10/12 14:08 ID:fX3MaFhg
それでもだめでした。
286NAME 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?
290NAME 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ってどう使うのー? おせーてー。
その単語、今回チラッと知ったんだけど、使い方まで分からんかった。。
293NAME 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ってこう使うのか。勉強になるっす。
295NAME IS NULL:03/10/14 04:57 ID:???
PostgreSQL固有でないSQLレベルの話は
よそでやってくれって言おうと思ったら、
SQL専門のまともなスレって無いのね..
296NAME 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行エラーメッセージが帰ってきます。
何が原因なのでしょうか?
297NAME IS NULL:03/10/14 11:17 ID:???
> TIMSTAMP(8)

「おれたちTIM」
298NAME IS NULL:03/10/14 12:52 ID:???
>>297
が!
構文ミスでしたか・・・
アリガトウございました・
299NAME IS NULL:03/10/14 13:29 ID:???
>>286は井上タン?
300NAME 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 だったら無条件で接続拒否します?
302NAME IS NULL:03/10/14 18:27 ID:???
>>301
UID=0とか、関係ない。
303 :03/10/16 09:31 ID:VFGmw4+V
みんな、ログは syslog 経由?
syslog 経由にする利点って何?
304NAME IS NULL:03/10/16 16:31 ID:???
最近面倒なんで、件数少ないのは全部 TEXT にしてるけど
どこかに VARCHAR とのベンチ比較とか無いですかねぇ
305NAME IS NULL:03/10/16 18:52 ID:???
PostgreSQL と通信するのに、ODBC とLibpq.dll つかったりしてるけど、
他になんかある?
306NAME 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 で全ユーザ、全テーブルの権限を
書き換えなくてはならないのでしょうか?
311psql コマンドで自分が誰かを表示:03/10/16 22:16 ID:VFGmw4+V
psql コマンドで PostgreSQL に接続しているとき、
自分がなんと言うユーザとして接続しているかわからなくなることがあるのですが、
who am i のようなコマンドはあるのでしょうか?
312psql コマンドで自分が誰かを表示:03/10/16 22:23 ID:VFGmw4+V
とりあえず show all; でいろいろ見られるかなと思ったんですが、
現在接続しているユーザの名前は見れませんでした。
313NAME IS NULL:03/10/16 22:35 ID:???
select getpgusername();
314psql コマンドで自分が誰かを表示:03/10/16 22:41 ID:VFGmw4+V
>>313 ありがとうございます。
SELECT CURRENT_USER; でもなにやら表示されるっぽいですが、
これって何かしら内部的に使われているテーブルから SELECT しているんでしょうか?
FROM が省略されているのでしょうか?
315Omitted 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 ってのはタダの内部変数で、
つまりタダの「式」 ってこと?
316NAME IS NULL:03/10/16 22:57 ID:???
>>311
\set PROMPT1 '%n@%/%R%# '

とかどうよ?
気にいったら.psqlrcに書いておくと良い。

というかこれで現在のsearch path(schema)も表示させたいんだけどなー。
今は無理みたい。commandとして入れればいいのかなぁ。
とついでに質問してみたり。
317NAME IS NULL:03/10/16 23:16 ID:???
>314
getpgusername()がCURRENT_USERを返してると思われ。
318Omitted FROM Caluses:03/10/16 23:22 ID:VFGmw4+V
>>316 ほほう、PROMPT1 なんていうものもあるんですね、勉強になります。
(単にマニュアルを読みこんでないだけという話もありますが)

>>317 そのあたりの関数などの一覧も、まだちゃんとチェックしていないので、
これから勉強したいと思います。ありがとうございました。

あと、>>310 ですが、pg_hba.conf で禁止することにしました。
319NAME IS NULL:03/10/16 23:23 ID:VFGmw4+V
なんで接続を禁止したかったかというと、
安心してデータベースのメンテナンスをしたかったから、ということなんですが、
僕みたいに個人の Web サイトのバックエンドにしている人ならまだしも
仕事で使っていて PostgreSQL をむやみに停止できない人は困るんでしょうね…
320NAME IS NULL:03/10/20 13:56 ID:???
仕事でPostgreSQLを使うことになって調べているのですが、
PostgreSQLって画像を格納することができるんでしょうか?
ご存知の方教えてください。。。
321 :03/10/20 15:12 ID:0xhXC68G
>>320
私だったら、ラージオブジェクト使うか、
base64 でテキスト化して扱う。
322NAME IS NULL:03/10/20 16:06 ID:???
コンテンツのバックエンドの場合は、ファイルで持っておいたほうがいいという結論になるわけだが。
323NAME IS NULL:03/10/20 16:17 ID:???
中身を舐める必要のないデータをDBMSに入れる必要はない。
メタデータだけ入れておけばいいんじゃない?
324NAME IS NULL:03/10/20 17:23 ID:???
バックアップとか、元データと寿命を同期させることを考えると、入れておいたほうがいいこともある。
325 :03/10/20 18:06 ID:0xhXC68G
>>320-324
という議論がいろんなところでされてたなあ。
あとはケースバイケースでしょ。
326NAME IS NULL:03/10/20 19:35 ID:???
俺も場合によると思うけどなぁ。
なんで>>322-323みたいに言い切れるのかが謎。
327NAME IS NULL:03/10/20 19:54 ID:???
僕が聞いたのは画像を扱えるかどうかだけです。
余計な話は結構です。。。
328NAME IS NULL:03/10/20 20:01 ID:cUZE6nZ9
PostgreSQL に MS Access とかで扱っている OLE Object を突っ込みたいって言われたんだけど、
できるんだろうか…もしできなければ MS SQL Server にしなきゃならん…
329NAME IS NULL:03/10/20 20:02 ID:cUZE6nZ9
>>327 まぁそういわずに。ゆっくりしていってくださいね。
330320:03/10/20 20:03 ID:???
>321-326
アドバイスありがとうございました。
私の方ではファイル名だけをDBに入れるつもりでいたのが
「画像も入れよ」との上司命令を賜って迷っていたんですが、
やっぱり画像を入れるのはやめにします。。

331NAME IS NULL:03/10/20 20:07 ID:cUZE6nZ9
>>330 データをファイルとして別に持つときには、
MD5 ハッシュも一緒に持っておくといいと思います。
332NAME IS NULL:03/10/20 20:52 ID:???
byteaを使うという方法もあるわけだが。
画像みたいに大きくなりやすいデータではやんないだろうけど。

>>328
少なくとも、そんな型はない。
BLOBで突っ込むだけだね。

ttp://ml.postgresql.jp/pgsql-jp-old/pgsql-jp/2000Nov/msg00038.html
ただしこんな話もある。
3年前だし今はどうなっているか?はわかりませぬ。
手元にAccessないもんで。
333NAME IS NULL:03/10/20 21:21 ID:???
>>331
そだね。後ファイルサイズとかmime typeとか持ってると、楽なことが多い。

メリットは運用で手抜きできるってことかな。
それ以上のことはないと思うけど、運用で手抜きできるのは、
運用にあまり人を割けない組織ではかなりありがたい。
334333:03/10/20 21:22 ID:???
>>333
あ、間違った。>>331は別で持つ場合のことを言っているのね。
俺は一緒に持つ場合の意見でした。
すみません。
335NAME IS NULL:03/10/20 21:37 ID:cUZE6nZ9
>>332 なるほど、情報ありがとうございます。

いままで PostgreSQL でバイナリデータを扱ったことが無かったんですが、
SQL 文を発行する際にはバイナリデータは何らかの方法でエンコードされるんでしょうか?
336NAME IS NULL:03/10/20 21:43 ID:cUZE6nZ9
3.4. バイナリ列データ型
http://www.postgresql.jp/document/pg721doc/user/datatype-binary.html
Table 3-9. SQL99 バイナリ文字列と PostgreSQL BYTEA データ型の比較
http://www.postgresql.jp/document/pg721doc/user/datatype-binary.html#DATATYPE-BINARY-COMPAT-COMP
337NAME IS NULL:03/10/20 21:45 ID:cUZE6nZ9
4.1.BLOBの書き込み
http://www.techscore.com/tech/Java/JDBC/4.html
338NAME IS NULL:03/10/21 00:13 ID:???
UPDATE t_sample2 SET t_sample2.部門cd = t_sample1.部門cd
FROM t_sample1
WHERE t_sample2.code = t_sample1.code;

t_sample2テーブルのcode っていうフィールドを、t_sample1 のcode
テーブルの内容に更新するという処理だけど、これ実行したら 3,794,550行
の更新に7.6時間かかった。

実行環境は Pen3-800MHz ,1024MB ,
Debian 3.0 ,PostgreSQL 7.2.1 ,GCC 2.95.4
339NAME IS NULL:03/10/21 01:01 ID:???
>>338
独り言ですか、それとも何か?
340NAME IS NULL:03/10/21 04:41 ID:???
こんなに時間かかるもんなのか、と聞いてるんでない?
知らんけど。あと日本語とSQL文も少しずつ違う気がする。

秒あたり140件が速いか遅いのかはわからない。
トランザクション切ってるかどうかにもよるし。

案外、updateワンセットよりも、insertツーセット(うち1回は
テーブル作成と同時)の方が早く終わるかもよ。

CREATE TEMP TABLE t_temp
AS SELECT t_sample1.部門cd, t_sample2の残りのフィールド
FROM t_sample1, t_sample2
WHERE t_sample1.code = 1_sample2.code;
TRUNCATE TABLE t_sample2;
INSERT INTO t_sample2 SELECT * FROM t_temp;

実行してないから内容は保証しません。
もちろん、実行中はどのテーブルも他所からはuntouchableです。
341NAME IS NULL:03/10/21 12:13 ID:/vGrIqy+
>>[pgsql-jp: 31237] Akira Atsumi
儲からないなら、無償で公開した方がスマートって自己中心な願望に過ぎないYO!
単にオープンソースで無償にしか目が行かずにポスグレで稼ごうと企んで、全銀協から金払って買えないようなヘボヘボビジネスやってる貧乏企業なんだろうけど(w
342NAME IS NULL:03/10/21 12:34 ID:Dy5xJv2p
[pgsql-jp: 31237] Re: 銀行番号データの情報源
http://ml.postgresql.jp/pipermail/pgsql-jp/2003-October/006379.html
これのこと?
343338:03/10/21 21:47 ID:???
>>339,340
 すまそ、主題を忘れてた。
ようは、こんな環境でこんな処理を実行したら、こんなに時間が
かかったってダケです(^^;;

>340
こんどそれやってみます〜
344NAME IS NULL:03/10/22 11:22 ID:zOSB2GEx
PostgreSQL って、Access のテーブルと同期させることが出来るんでしょうか?

メインのデータがサーバに入ってて、
外回りの人のノートパソコンの Access のテーブルと時々同期させたいんです。
345NAME IS NULL:03/10/22 11:26 ID:zOSB2GEx
[pgsql-jp 18420] データベースの同期運用
http://ml.postgresql.jp/pgsql-jp-old/pgsql-jp/2000Oct/msg00459.html
ここに同じようなことをしたい人が居ました。
346NAME IS NULL:03/10/24 11:54 ID:ESRhBeXa
PostgreSQL の Windows 用 ODBC ドライバが
HTTP プロトコルでダウンロードできるところ知りませんか?
日本語版じゃなくて本家のやつ。MSI のパッケージ。
347NAME IS NULL:03/10/24 11:58 ID:???
>>346
なんでDLLじゃだめ?
348NAME IS NULL:03/10/24 11:58 ID:???
あ、おれもpostgresqlx.x.x.tar.gzがhttpでダウンロードできるところ、知りたい。
349NAME IS NULL:03/10/24 12:02 ID:ESRhBeXa
>>347 Access アプリといっしょに社員さんに渡さないといけないんだけど、
インストーラつきじゃないとインストールしてもらえそうにないから。
350みつけた:03/10/24 12:08 ID:ESRhBeXa
351みつけた:03/10/24 12:21 ID:ESRhBeXa
>>197
> ODBDかますんなら
>  Provider=MSDASQL; DSN=PostgreSQL; UID=myid; PWD=myname
> 直接なら
>  Provider=PostgreSQL; UID=myid; PWD=myname

後者の方では、サーバはどこで指定するんでしょうか?
352NAME IS NULL:03/10/25 07:32 ID:???
[pgsql-jp: 31306]
こういうメールも久しぶりにみるな。
353NAME IS NULL:03/10/26 16:01 ID:QzGBD7qq
PostgreSQL メーリングリストアーカイブ
http://ml.postgresql.jp/pgsql-jp-old/index.html
このアーカイブは1995年から2002年2月まで運用された
旧 pgsql-jp MLのアーカイブです。
354NAME IS NULL:03/10/26 16:02 ID:QzGBD7qq
355NAME IS NULL:03/10/26 16:03 ID:QzGBD7qq
http://ml.postgresql.jp/pipermail/pgsql-jp/2003-October/006448.html
このメーリングリストから脱退したいのですが、方法を教えてください。
356NAME IS NULL:03/10/27 15:10 ID:ppzoizRm
MS Access 2000 で PostgreSQL のデータベースに接続して、
グラフィカルに、なすがままに、GUIで、テーブルを作りまくるにはどうすればいいのでしょうか?

ADP で何とかなるんでしょうか?
その際、やっぱり ODBC 経由ですか?
それとも PostgreSQL 専用の OLE DB データプロバイダがあるのでしょうか?
357NAME IS NULL:03/10/27 15:13 ID:ppzoizRm
>>356 MS Access 2000 の ADP (Access Database Project) で接続できるのは
MS SQL Server だけのようなので、断念しました…
358NAME IS NULL:03/10/27 15:19 ID:ppzoizRm
>>351
OLE DB データプロバイダとして PostgreSQL を指定するといいみたい。
自分で試したわけではないけど。

string connectionString =
"Provider=PostgreSQL;" +
"Addr=127.0.0.1;" +
"Database=test;" +
"User ID=postgres;" +
"Password=fun2db";

http://www.go-mono.com/oledb.html
359NAME IS NULL:03/10/27 15:26 ID:ppzoizRm
Native OLE DB. What do you think about it
http://archives.postgresql.org/pgsql-odbc/2002-06/msg00056.php

PostgreSQL 用の OLE DB データプロバイダって、まだ開発途上なのかな?
現状では OLE DB -> ODBC -> PostgreSQL で開くしかない?
360NAME IS NULL:03/10/27 15:28 ID:ppzoizRm
.NET 用データプロバイダはかなりホットに開発されているみたいですね。
http://gborg.postgresql.org/project/npgsql/projdisplay.php
Npgsql is a .Net Data Provider for PostgreSQL.
A .Net Data Provider is the functional equivalent in the .Net Framework
to a jdbc driver in the Java Framework.
361NAME IS NULL:03/10/27 15:29 ID:ppzoizRm
確かに >>358 も go-mono.com だし…
OLE DB 用のネイティブなドライバはないのかも。
362NAME IS NULL:03/10/27 15:35 ID:ppzoizRm
Re: FUD!! ODBC will not be supported by Microsoft in the future.
http://archives.postgresql.org/pgsql-odbc/2003-10/msg00019.php
Date: Mon, 29 Sep 2003 17:55:04 -0700

このスレッドが ODBC, OLE DB, .NET あたりの話題としては最新かな。
363NAME IS NULL:03/10/28 12:05 ID:aMgZya+1
HTTP Proxy しか外部との接続手段がない場合、
もはや外部の PostgreSQL を利用するには
その鯖で Apache でも立てて CGI で Web インターフェイスをつけるくらいしかないのでしょうか?
364NAME IS NULL:03/10/28 12:33 ID:???
httptunnel
ただし、何のためのfirewallが存在してるのか考えてからな。
365NAME IS NULL:03/10/28 13:34 ID:???
http://www.nocrew.org/software/httptunnel.html
これか…激しく危なそうなソフトだ…
366NAME IS NULL:03/10/28 13:36 ID:???
管理者に頼んで SOCKS 開けてもらうという手もあるんだけど、
psql なんかも対応してないしなぁ…

SSH が使えるように頼むほうがセキュリティ的には安心だなぁ。
367NAME IS NULL:03/10/29 16:49 ID:???
timestamp型のカラムなんですが、INSERT文のときエポック秒のままでは扱えない
のでしょうか?

いつも書式変換してINSERT文に入れてますが、どうもこの処理が無駄に思えます。
368NAME IS NULL:03/10/29 17:40 ID:???
こんにちは。
突然ですがlibpqの使い方を勉強してます。
で、下のコードをGCCでコンパイルすると
PQ〜のリファレンスがわかんな〜いって返ってきます・・・
どうしてですか??
わかる人おせーてください。
369NAME IS NULL:03/10/29 17:42 ID:???
*
* testlibpq.c
*
* PostgreSQL のフロントエンドライブラリである libpq の
* C 版のテスト
*/
#include <stdio.h>
#include <libpq-fe.h>

void
exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(1);
}

main()
{
char *pghost,
*pgport,
*pgoptions,
*pgtty;
char *dbName;
int nFields;
int i,
j;

/* FILE *debug; */

PGconn *conn;
PGresult *res;
370NAME IS NULL:03/10/29 17:42 ID:???
/*
* バックエンドとの接続に必要なパラメータをセットしてプログラムを開始します。
* パラメータが NULL であれば、環境変数を探して妥当と思われる値を
* 使おうとしますが、見つからない場合は、システムデフォルトの定数を使います。
*/
pghost = NULL; /* バックエンドサーバのホスト名 */
pgport = NULL; /* バックエンドサーバのポート番号 */
pgoptions = NULL; /* バックエンドサーバの起動オプション */

pgtty = NULL; /* バックエンドのデバッグ用 tty */
dbName = "template1";

/* データベースに接続します */
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);

/*
* バックエンドとの接続が成功したことを確認
*/
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}

/* debug = fopen("/tmp/trace.out","w"); */
/* PQtrace(conn, debug); */

/* トランザクションブロックの開始 */
res = PQexec(conn, "BEGIN");
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "BEGIN command failed\n");
PQclear(res);
exit_nicely(conn);
}
371NAME IS NULL:03/10/29 17:43 ID:???
/*
* メモリリークを防ぐため、必要がなくなったら、すぐに
* PQclear(PGresult) しましょう
*/
PQclear(res);

/*
* データベースのシステムカタログ、pg_database からインスタンスを
* 取り出す
*/
res = PQexec(conn, "DECLARE mycursor CURSOR FOR SELECT * FROM pg_database");
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "DECLARE CURSOR command failed\n");
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
res = PQexec(conn, "FETCH ALL in mycursor");
if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr, "FETCH ALL command didn't return tuples properly\n");
PQclear(res);
exit_nicely(conn);
}

/* まず属性名を表示 */
nFields = PQnfields(res);
for (i = 0; i < nFields; i++)
printf("%-15s", PQfname(res, i));
printf("\n\n");

/* 次にインスタンスを表示 */
for (i = 0; i < PQntuples(res); i++)
{
for (j = 0; j < nFields; j++)
printf("%-15s", PQgetvalue(res, i, j));
printf("\n");
}
PQclear(res);

/* カーソルを閉じる */
res = PQexec(conn, "CLOSE mycursor");
PQclear(res);

/* トランザクションをコミット */
res = PQexec(conn, "COMMIT");
PQclear(res);

/* データベースとの接続を閉じ、後始末 */
PQfinish(conn);

/* fclose(debug); */
return 0;

}
372NAME IS NULL:03/10/29 19:32 ID:QnJL2XQc
gcc -lpq main.c ってすればいいんじゃないの?
漏れの OS (Debian GNU/Linux) では
#include <postgresql/libpq-fe.h> だけど。
373NAME IS NULL:03/10/29 19:40 ID:QnJL2XQc
ちなみにうちの環境ではコンパイルは通りました。
実行してないけどね。
374あぼーん:あぼーん
あぼーん
375NAME IS NULL:03/10/30 22:10 ID:sTbt+zO/
正直PostgreSQLのWindows版を待ち続けています。
376NAME IS NULL:03/10/31 06:12 ID:???
>>375
インストーラー付きのネ
377NAME IS NULL:03/10/31 10:50 ID:???
業務で使うなら石井さんのとこの買っちゃえばいい気がするけど
個人で使うのには抵抗あるしね…
378NAME IS NULL:03/10/31 11:23 ID:s8J5VFuX
>>377 cygwin じゃだめかな。
漏れは psql コマンドは cygwin の奴をつかってるよ。
サーバは別のところの Linux だけど。
379NAME IS NULL:03/10/31 12:03 ID:???
postgreSQLのWindows版が無いので仕方なくmySQLを使っております。
380NAME IS NULL:03/10/31 13:30 ID:s8J5VFuX
>>379 それでいいじゃん?だめ?
381NAME IS NULL:03/10/31 13:41 ID:n6ZftDmf
Windowsマシンを端末に、ADO+ODBCを使ってPostgreSQLサーバに
繋いでいたシステムが最近エラーで繋がらなくなってしまいました。

Unexpected protocol character during authentication;
Error while reading from the socket.

ネットワーク管理者もDBサーバ管理者も設定を変えてないと
言っており、また端末側も設定は変えていません。

端末側のODBCドライバにログを出させると、下のような流れで
SOCKET通信レベルでエラーが起こっているようなのですが....

[xxxx]connecting to the server socket...
[xxxx]connection to the server socket succeeded.
[xxxx]sizeof startup packet = 292
[xxxx]sent the authentication block.
[xxxx]sent the authentication block successfully.
[xxxx]gonna do authentication
[xxxx]read -1, global_socket_buffersize=4096
[xxxx]auth got '\0'
[xxxx]CONN ERROR: func=PGAPI_DriverConnect,
   desc='Error from CC_Connect', errnum=210,
   errmsg='Unexpected protocol character during authentication'

似た事例、発生原因をご存知の方、おられませんか?
382NAME IS NULL:03/10/31 14:41 ID:s8J5VFuX
>>381 PGAPI_DriverConnect でエラーが起こっているのだから、
Winsock 周りの話ではないと思います。
認証に失敗しているのではないですか?

おそらくパスワードのハッシュ方法の違い (DES と MD5) ではないかとおもうのですが。
383NAME IS NULL:03/10/31 14:43 ID:s8J5VFuX
つまり PostgreSQL サーバの設定で、認証方法が変更されているのではないでしょうか?
でも DB の管理者は変更していないといっているんですよね??
384NAME IS NULL:03/10/31 14:47 ID:s8J5VFuX
postgresql.conf でのパスワードの暗号化に関する設定か、
pg_hba.conf の method の指定が適切でないと思います。
385NAME IS NULL:03/10/31 16:58 ID:???
ご意見ありがとうございました。
DB管理者にもう一度確認してみます。
386367:03/11/01 12:34 ID:???
誰か答えてちょーだいよ。367だけどさア。。。
387NAME IS NULL:03/11/02 03:11 ID:???
388NAME IS NULL:03/11/03 17:07 ID:0aIYxvkt
Microsoft の
ノースウインド.mdb
を勉強の為にPostgresで使いたいのだけど一発でインポートする事なんてできますか?
389NAME IS NULL:03/11/03 17:33 ID:???
pgAdminiII
390NAME IS NULL:03/11/04 00:01 ID:HVSpp1ON
PHPで開発しています。auto incriment のフィールドがあって、
insert した時にその insert した行の番号を知りたいです。
どうすればいいのでしょうか?
391NAME IS NULL:03/11/04 00:23 ID:???
insertするのと同じトランザクションでselectすりゃいいんじゃないの?
392NAME IS NULL:03/11/04 00:32 ID:???
>>390-391 すんまへん自己レスです。
nextval をとって、その値で insert すればよかったです。。

# 最近自己レスが多いなあ。。
393NAME IS NULL:03/11/04 09:41 ID:???
>>392
同時書き込みがあったときに保証できるの?
素直にpg_lastoidとって、select
394NAME IS NULL:03/11/04 10:06 ID:???
>>393 はトランザクションを理解しる!
395393:03/11/04 12:25 ID:???
>>394
読み込みようのロックを使うとかの話?
そもそもserialのnextvalを自力でとってinsertしてもインクリメントされんような気がするのだが。


396NAME IS NULL:03/11/04 13:04 ID:???
>>395
おいおい大丈夫かー。
397393:03/11/04 13:42 ID:???
>>396
煽るのはいいけど、インクリメントされるかどうか、書いてもらえるか?
398NAME IS NULL:03/11/04 14:56 ID:???
399393:03/11/04 15:21 ID:???
nextvalって値とっただけでインクリメントされるんだな。
トランザクションの理解がどこで必要になるのかはわからなかったけど。
どっちにしろ、serialフィールドならpg_lastoid使うほうがいいと思うが。
400393:03/11/04 15:40 ID:???
pg_getlastoidね。
401NAME IS NULL:03/11/04 16:22 ID:???
402NAME IS NULL:03/11/04 16:29 ID:???
403NAME IS NULL:03/11/04 19:48 ID:RtJ+FOnV
プライマリキー指定を解除しようと思って
ALTER TABLE test DROP PRIMARY KEY;
としたのですが、
ERROR: parser: parse error at or near "primary" at character 23
と言われてしまいました。間違っているのでしょうか…。
404NAME IS NULL:03/11/04 20:34 ID:???
>399
incrementalなserial値とlastoidは全然別の話だと思うが。。。

なぜ誰も突っ込まない?
405NAME IS NULL:03/11/04 22:52 ID:ytHQNcHv
お願いします。

[test1]
name | divno | postno |
------+-------+--------+-
x | | 1 |
y | 1 | |
z | 2 | 2 |

[test2]
divno | divname |
-------+-----------+-
1 | marketing |
2 | sales |

[test3]
postno | postname |
--------+----------+-
1 | syacho |
2 | kacho |


上の様な3つの表があります。
外部結合で以下のようなSQL文をpsqlで発行しました。

select t1.name , t2.divname , t3.postname
from (test1 t1 left join test2 t2 on t1.divno = t2.divno)
left join test3 t3 on t1.postno = t3.postno ;

すると以下のようなメッセージが返されました。

sisdb->
ABORT BEGIN COMMENT ……
ALTER CLOSE COMMIT ……
ANALYZE CLUSTER COPY ……
sisdb-> left join post p on e.postno = p.postno

結果はちゃんと返されるのですが…
これは警告なのでしょうか?
SQL文に何か問題があるのでしょうか?

バージョンはpostgreSQL7.3.4で
redhat9です。
よろひくお願いします。

406NAME IS NULL:03/11/04 23:19 ID:???
>>404
lastoidつかってINSERTした列をSELECTするってことじゃ?
407406:03/11/04 23:20 ID:???
列→行
408NAME IS NULL:03/11/05 11:02 ID:???
>406
あーそーゆーことか。
いや、serial値なら同一トランザクション内でmax取りゃいいじゃん、と思ってた。
409NAME IS NULL:03/11/06 12:34 ID:C3LKLBj/
root で postmaster を起動しようとすると

"root" execution of the PostgreSQL server is not permitted.

The server must be started under an unprivileged user id to prevent
a possible system security compromise. See the documentation for
more information on how to properly start the server.

といわれて何もしません.

postmaster の権限を調べてみても,
root に実行権限があります.

どうすればいいのかわからなくて途方にくれています.
410NAME IS NULL:03/11/06 12:49 ID:???
>>409
書いてある通りだけど、
危険だからrootで実行できないようになってるんでしょ。
ユーザーを作ってそいつに実行させれば解決。
411NAME IS NULL:03/11/06 13:30 ID:C3LKLBj/
>>410

postgres ユーザで実行したら無事動きました.
ありがとうございます.

ついでに質問です.

(1) Unix の起動ファイルに,postgres のサーヴィスが
動くようにするのが普通ですが,これは root が実行する
ものではないのでしょうか?

(2) 今の私のシステムでは root 権限で,

su - postgres

として,PostgreSQL の管理ユーザになれますが,
一般ユーザから su しても,パスワードを求められ,
postgres ユーザになれません.
一般ユーザから postgres ユーザになるには,
どうすればいいのでしょうか?
412NAME IS NULL:03/11/06 13:49 ID:???
(1)
それが危険だから、PostgreSQL専用ユーザを作って起動させているのでは?
(2)
ユーザpostgresのパスワードを設定すれば?
やり方は自分で調べてね。
413NAME IS NULL:03/11/06 14:39 ID:???
いいこと教えてあげますね
つい先ほどですね、本見て適当にトリガーっつうの入れてたんです
なんか動いてるような気がしなかったから、なんつーかそのー
ばんばん打ち込んだんですね、そしたらですね
先ほどからメインサーバーがですね、落ちたんですね
はい!ですけど、まだ自分が疑われてないので

今から急いで情報調べるんですね。はい
414NAME IS NULL:03/11/06 15:18 ID:???
>>413
スレ違い

データベース破壊録カイジ
http://pc2.2ch.net/test/read.cgi/db/1057198362/l50
415NAME IS NULL:03/11/06 16:51 ID:???
>>411
>一般ユーザから postgres ユーザになるには,
>どうすればいいのでしょうか?

あまりその必要はないと思うのだが・・・
416NAME IS NULL:03/11/06 17:34 ID:???
>>411
「起動時 特定ユーザー プロセス 起動」でぐぐれば?
417NAME IS NULL:03/11/06 17:35 ID:???
あ、起動がダブった... 首吊ってきまツ
418NAME IS NULL:03/11/06 19:28 ID:???
phpPgAdmin に関する質問はここでよいのかな?
419NAME IS NULL:03/11/07 00:18 ID:???
>>411
(1)
rootが実行するが、rootが他の人の権限で動かすという格好だ。
su -l postgres -c コマンド名 とでもしているんじゃないだろうかね。
これは「非常に」よく使う方法。
サービスが何でもかんでもroot権限で走るっつーのはあんまり
好ましいことじゃない。

(2)
一般ユーザからpostgresユーザにsuできる可能性はできるだけ摘み取るべき。

ちなみにこれはPostgreSQLの話じゃなくてUNIXのアカウント管理の話に
なるのだけれど、「パスワードが設定されていない」状態には2種類あってね。
「rootからしかsuできない」「誰でもパスワード抜きでsuできる」だ。

通常useraddされたばかりのアカウントはパスワードが
設定されておらず、この状態は前者に相当する。
後者にしたければ/etc/paswdファイルを手でいじるか、passwd -dするか。
まあそんな穴をわざわざ用意する必要はないぞ。
420NAME IS NULL:03/11/07 05:04 ID:???
いまどきのUnixだとおもうからsudoつかおうよ。
421NAME IS NULL:03/11/07 05:18 ID:???
なんだかそれ以前に、createuser とかしていない感じがする。
422NAME IS NULL:03/11/07 09:16 ID:???
-Uオプションを知らないとか。
423NAME IS NULL:03/11/07 12:42 ID:???
PgSQLのバックアップ のダンプファイル ****.dump
なんですが、レンタル無料Xrea サーバ内では復元できますが、

その****.dumpをダウンロードしまして、自宅サーバーで
(RHL7.3 PgSQLは同梱包のRPM)で
以下のようにすると

$ pg_restore -d **** ****.dump
pg_restore: [archiver] input file does not appear to be a valid archive 

で、復元できません。つまり互換性がなかった。まあ中身はいろいろパスが通っている
-d  このオプションも色々かえたり、直接 ****.dump の中を
書き換えたりしても、
pg_restore: [archiver] input file does not appear to be a valid archive
でした。
何かいい方法見つけた方いらしゃいますか?

Xrea サーバでのダンプするときはいろいろパスが通っているようなので
ノーマルのpg_dump -d **** > ****.dump 
に戻す何か方法ありませんでしょうか。
424NAME IS NULL:03/11/07 13:13 ID:???
>>423
psql **** < ****.dump
少なくともパスは関係ない。
425NAME IS NULL:03/11/07 14:03 ID:A52L86Yg
データベースのコピーはどのようにするのですか?
426NAME IS NULL:03/11/07 14:29 ID:???
>>424

ありがとうございます。なるほど、ヒントになりました。

Table全部消してから
psql **** < ****.dump
You are now connected as new user ****.
CREATE
CREATE
CREATE
ERROR: parser: parse error at or near "("
invalid command \.
ERROR: parser: parse error at or near "1"
invalid command \.
ERROR: parser: parse error at or near "2"
invalid command \.
ERROR: parser: parse error at or near "001"

エラーがでましたが
****.dump のエラーを直接書き直してやってみます。
427NAME IS NULL:03/11/07 16:34 ID:???
>>426
ダウンロードか編集したときに文字化けしてねーか?
428NAME IS NULL:03/11/07 18:24 ID:1AJ04Jch
Cygwin→ipc-daemon→PostgreSQL7.2.3をWindowsで動かしております
pgAdminiIIでの操作ができたので今度は同じようなものを自分でつくって
見ようかとVS.NETを起動させましてサーバーエクスプローラーというところで
は接続できるようになりました。

手元にあるテキストではOleDbDataAdaputerを使えと書いてあったのでその
ようにODBCからPostgreSQLの日本語ドライバを指定したのですが

作成した接続は現在のアダプタでは使えません

といわれてしまいます。
なにか根本的にやり方を間違えてますか?
429NAME IS NULL:03/11/07 20:17 ID:eFEFRmnp
>>425
pg_dump --blobs --format=c $1 | pg_restore --format=c --dbname=$2

こんな感じでやってる。
430NAME IS NULL:03/11/07 23:27 ID:???
>>427
いえ、vi で開いていますが、化けてなく
日本語もきれいです。
431NAME IS NULL:03/11/12 16:25 ID:aQ88b7gt
あるテーブルの列ごと削除するには
どうすればいいですか?
432NAME IS NULL:03/11/12 16:52 ID:???
ALTER TABLE .. DROP COLUMN ..

マニュアル嫁 > 431
433ナミ:03/11/12 17:15 ID:aQ88b7gt
コマンドラインから psql を使って,
databasename というデータベースの
tablename というテーブルを
tablename1 という名前で
丸ごとコピーするには?
434NAME IS NULL:03/11/12 18:00 ID:???
マニュアル嫁 > aQ88b7gt

435NAME IS NULL:03/11/12 21:15 ID:???
>>431
バージョンによっては使えない。
436NAME IS NULL:03/11/13 07:28 ID:HSJGrKBs
mySQLでいうところの「phpMyAdmin」みたいに、
ウェブブラウザからpostgresをいじれるツールってないでしょうか?
437NAME IS NULL:03/11/13 07:31 ID:???
>>436
phppgadmin。
438NAME IS NULL:03/11/13 08:30 ID:???
(WinXPPro-SP1の)MS-ACCESS2003から、
(テーブルのリンクで)レンタル(共有)サーバ上ののpostgresにアクセスしようとすると、

ODBC--呼び出しが失敗しました。
Unknown authentication type (#211)

と怒られてしまいます。

ps -auxしたら、
postmaster -i -S -D /usr/local/pgsql/data (postgres)
とちゃんと「-i」オプションがついてて、

pg_hba.confは、
host all 0.0.0.0 0.0.0.0 trust
と書いてあり、

postgresql.confは、
tcpip_socket = true
にしています。

いったい、何が原因なのでしょうか?
439NAME IS NULL:03/11/13 08:41 ID:???
>>438
おまえ
440438:03/11/13 10:12 ID:???
マジレスきぼんぬ
441ナミ:03/11/13 11:20 ID:bLb02GzT
データベースの持ち主を変更するには
どうすればいいんですか?
442NAME IS NULL:03/11/13 12:26 ID:???
>>438

ver7.3、それともそれ以下?

調査しますので
IPアドレスかホスト名、ユーザ名、パスワード、
データベース名を教えてください (w
443NAME IS NULL:03/11/13 13:30 ID:???
>>438
問題の切り分けのため、
ODBCじゃなくlibpgsql使うフロントエンドで接続したらどうなん?
444NAME IS NULL:03/11/14 23:04 ID:???
portがあいてないとかだったら爆笑
445NAME IS NULL:03/11/15 02:04 ID:???
>>444
想像だけど
Unknown authentication type (#211)
なので接続はしているのではないかと。
で、認証でコケているように見える。
446NAME IS NULL:03/11/15 03:01 ID:???
しかし trust だしなあ
パスワードからにしてる?
447NAME IS NULL:03/11/15 03:16 ID:TwEtqxvX
すみません。いろいろ手を打ったのですがだめだったのでここで聞きます。

CREATE TABLE message (
id int,
type smallint,
message VARCHAR(300),
post_time timestamp without time zone);
CREATE INDEX message_idx1 ON message (post_time);

で作ったテーブル(Rows: 57万件)で
EXPLAIN SELECT id FROM message
WHERE type = 1 and post_time >= now() - interval '48 hours';
とやってもINDEX message_idx1を使ってくれなくてSEQSCANで結果が出るのに
時間がかかってしまいます。

SET ENABLE_SEQSCAN=off;

SET EFFECTIVE_CACHE_SIZE=80000;

ALTER TABLE message ALTER COLUMN post_time SET STATISTICS 100;
ANALYZE message;
もやったのですが結果が変わりません。

timestamp型だからindexを使ってくれないんでしょうか?

ちなみにバージョンは7.2.1です。
448NAME IS NULL:03/11/15 08:11 ID:???
その57万件のうち、type=1が何件かにもよるな。
449447:03/11/15 10:48 ID:???
>>448
typeの値は0か1の2通りなんですがtype=1は49万件あります。
かなり偏ったデータです。
450NAME IS NULL:03/11/15 17:34 ID:???
便乗質問だけど、PostgresはINDEXの使い方がヘタ?

>>448のケースだと、どうせインデクス使ってくれない前提で
(id, message)を別テーブルにして
(id, type, post_time) のみのテーブルにした方が
検索パフォーマンス高かったりする?

(ところで id は、PRIMARY KEY にしてもいいよね?)

このスレでも他スレでもさんざん指摘されてたことだけど、
単なるCOUNT(*)で、明らかにインデクス数えた方がいいだろうと
思われるケースでもsequential scanに逝っちゃうからなぁ。

という漏れは無料Sybaseに転びますた。
451NAME IS NULL:03/11/15 23:47 ID:???
ちょっと前までのPostgresはオプティマイザの挙動が変なところが
あったのは事実だな。7.3になってけっこうまともになったような記憶が
あるが。
>>447の例は単純すぎるから原因は別だと思うが、特に7.2はできが
悪かった。

>このスレでも他スレでもさんざん指摘されてたことだけど、
>単なるCOUNT(*)で、明らかにインデクス数えた方がいいだろうと
>思われるケースでもsequential scanに逝っちゃうからなぁ。

Postgresでなくても、count(*)を index scan で済ませる実装はあまり
見たことがないが。
452NAME IS NULL:03/11/16 00:05 ID:???
COUNT(*)でIndex使ったらそれはそれでアレなような気が。
COUNT(PK列)ならわからんでもないけど
453NAME IS NULL:03/11/16 00:07 ID:???
言い忘れ
7.3使ってるけど、PostgreSQLのオプティマイザは
たまにどうしようもなく遅い選択をすると思う。
他のDBMS(OracleやSQL Server)では問題なく
実行速度が出るようなSQL文でも、
PostgreSQLでやると途方もなく時間がかかったり。
ま、SQL文はシンプルに書けということですな。
454NAME IS NULL:03/11/16 02:04 ID:???
>>453
経験的に、適当にセッティングしたDB上で、
いいかげんに書いたSQLが一番早く走るのは、
SQL Server , PostgreSQL , Oracle の順だな。

しっかりとチューニングした場合はOracleがだんとつに早くて、
SQL ServerとPostgreSQLは同じくらい。

Oracleはちょっとしたことですぐ御機嫌が悪くなるイメージがある。
PostgreSQLは素直に無難に動く感じ。

いい加減な環境で動かすならSQL Serverが一番だと思う。
インストールも楽だし、運用も楽。
いい加減にやる場合にはね。さすがMS。
455NAME IS NULL:03/11/16 02:38 ID:???
Windowsがいい加減な環境だとでもいうのですか?
456447:03/11/16 03:21 ID:???
>>451
一応バージョンアップも考えていたのでテスト環境で7.3入れて試してみます。
今インスト中。あと、7.4RC2もあったのでこいつも試してみます。

457NAME IS NULL:03/11/16 11:20 ID:???
>>454
SQL文に限らず、Oracleはしょーもないところでつっかえやすいねぇ。
悩んで悩んで、知ってる人に聞くと「えっ?そんなことだったの?」とか。
あんま細かいこと気にせずに、ぱっぱとやるならSQL Serverか。
プラットフォームが限定されるのをどう捉えるか、だね。

PostgreSQLはちょっとのバージョン違いで挙動がコロコロ変わるのが・・・
進化中なのは構わないけどそろそろ落ち着いてほしい。
458NAME IS NULL:03/11/16 13:21 ID:evY8/QEJ
>>457
物凄く抽象的過ぎてイメージが湧かない。
具体例をそれぞれあげてくれるとありがたい。
459NAME IS NULL:03/11/17 11:21 ID:cPuto3eS
あるデータベースのあるテーブルの属性とその型たちを
チェックするようなシェルスクリプトを書きたいんだけど,
どうすればいいの?
460NAME IS NULL:03/11/17 13:04 ID:???
>>459
Perlで書いた方がよいと思われ
どうしてもというならばシェルスクリプトで書くの止めはせんが

で、マジレスなのだが、
pg_*** を片っ端から眺めれば自ずと答えは見えてくるよ。

長い間Postgresの運用から外れてるのでsage
461NAME IS NULL:03/11/17 15:20 ID:???
いまさらですが、
J-PHONEのメアド(@jp-x.ne.jp)が
Vodafone(x.vodafone.ne.jp)に変わりましたが、
DBに格納されてるアドの
ホスト名部分だけを一括変換って出来ないでしょうか?

正規表現の前方参照さえ使えれば出来そうですが、無理でしょうか?
462NAME IS NULL:03/11/17 17:16 ID:???
>>459
`psql (option) -c "select hogehoge"`とやってやれば、むしろ日常ツールとしてぱっと作るのなら、
コネクションとかの作成をしないですむかららくな気が。
まあ、これはPERLでもできるけど。

んで、テーブルはpg_classに入っていて、relkind がrのもの。
テーブル名はrelname.
データタイプはpg_typeにある。
詳しくはドキュメントの開発者ガイドをどうぞ。
463NAME IS NULL:03/11/17 17:37 ID:???
>>461
むりして調べるより、
ぱっとあなたが使える前方参照の正規表現がある言語でアクセスして
アップデートかけてやった方が早いような気もするけどねぇ。
一回しかやらないのでしょ?
#いや、おれもしらないけど。

perlにて
$mail = 'psql -t -c "select mail_address from hogehoge where mail_address like '%@jp-x.ne.jp'";
@mails = split(/\n/,$mail);
for $oldmail (@mails){
$newmail = $oldmail;
$newmail =~s/jp-x\.ne\.jp/x\.vodafone\.ne\.jp/;
`psql -c "update hogehoge set mail_address = $newmail where mail_address = $oldmail`;
}
みたいに
464NAME IS NULL:03/11/17 17:38 ID:???
あー、正規表現のスラッシュが消えてる。脳内補完しておいて
465NAME IS NULL:03/11/17 17:39 ID:???
`psql -c "update hogehoge set mail_address = '$newmail' where mail_address = '$oldmail'"`;
もうちょっと忘れてた。後、テキスト型だろうから、こうか。
466NAME IS NULL:03/11/17 17:42 ID:???
'psql -t -c "select mail_address from hogehoge where mail_address like '%@jp-x.ne.jp'"`;
これも間違ってた。スマソ。
467NAME IS NULL:03/11/17 18:01 ID:???
>>463-466
なるほど。
結構件数が多いんでUPDATE一発で出来たら幸せだったんだけど、
無理っぽいですね。PL/pgSQLを組むんだったら負荷的に変わらないし
でもありがとう。そのコード使わせてもらいます。
468NAME IS NULL:03/11/18 00:02 ID:???
>>467
~ で正規表現使って選び出し、substrで切り出してくっつけてUPDATEって
できなくもないが、、失敗するとショックでかいのでスクリプト書いたほうがいいね
469NAME IS NULL:03/11/18 10:02 ID:iZZGOnRs
PostgreSQL 7.4 Released

http://www.postgresql.org/news/160.html
470NAME IS NULL:03/11/18 10:45 ID:???
うぇーん、日付がはいってないよー
     ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ∧_∧
     ( ´Д⊂ヽ
    ⊂    ノ
     人  Y
    し (_)
http://www.postgresql.org/presskit/jp/presskit74.html
471NAME IS NULL:03/11/18 13:02 ID:/fCQ8oFr
こんな過疎スレでも、この板では最人気スレ。
472NAME IS NULL:03/11/18 14:05 ID:???
寝不足でぼーっとしてて、template1に初期構築用のSQL文流し込んでしまいますた。
DROPして作ればもとにもどってくれるかな?
473NAME IS NULL:03/11/18 16:57 ID:u72w5U2h
create table test(
hoge int4,
fuga int4
);

としてテーブルを作ったとき,
hoge 列と fuga 列がダブることのみ禁止する
# どっちかが異なれば許す
ような制約の設定方法は?
474NAME IS NULL:03/11/18 17:46 ID:???
>>469
source/v7.4は全てのdownload用ftpサイトにミラーされていますが
binary/v7.4はまだミラーされてないサイトが多いですね。
日本のftpサイト(ftp.jp.postgresql.org)もbinary/v7.4はまだです。

なおbinaryは今のところbinary/v7.4/suse(SUSE Linux用)しかありません。
Windows用binaryを楽しみにしていますが本当にv7.4から対応するんでしょうか?
475NAME IS NULL:03/11/18 22:28 ID:???
7.4.2になるくらいまでは様子見かなぁ・・・
476NAME IS NULL:03/11/18 22:42 ID:JKZi6+sT
7.3 -> 7.4 などに変えるときは、データを一度吐き出してからupgradeするんでしたっけ?
477NAME IS NULL:03/11/19 00:50 ID:???
そだな
pg_dumpall > file


psql template1 <file
478NAME IS NULL:03/11/19 18:39 ID:???
5k くらいあるほとんど一意なテキストデータを text カラムに入れています。
= で抽出することがあるので CREATE INDEX しようとしたら
デフォルトの btree は 2733byte までと怒られたので USING HASH にしました。
今のところ INDEX なしと比べて 1/300 の速度で検索できて快適なのですが、マニュアルの
「完全に動的」や「静的 hash」の意味が分からず不安です。
http://www.postgresql.jp/document/pg734doc/user/indexes-types.html

定期的に vacuum full analyze かけているのですが、あるタイミングで
hash が btree になったりすることがあるということでしょうか?
もしくは急にパフォーマンスが悪くなるとか?
ご存知の方、何かアドバイスをいただければと思います。
479NAME IS NULL:03/11/19 21:42 ID:???
マニュアル読んでも分からないんですが、バイナリをデータベースに
格納するSQL文を教えて下さい。

テーブル hoge に、bytea型で定義されたphotoという列があります。
ここに /home/mona/photo/mona.jpg を格納したいんです。よろしく
お願いします。
480NAME IS NULL:03/11/20 00:38 ID:???
>>479
8進数わかる?

基本的にバイナリもそのまま入れられるが、
一部をエスケープしなければならない(\\に3桁の8進の数字ををつけたもの)
全部エスケープしてもいいので、スクリプトで全部変換してしまうのも手だね
481NAME IS NULL:03/11/20 02:13 ID:7oqjaIhk
7.3.4リリースされました。
ttp://www.postgresql.org/news/160.html

副問い合わせなどの性能向上、IPv6サポートなどがされた
ようです。

喜んでアップグレードしてみたところ
FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 7.3, which is not compatible with this version 7.4.

なんてメッセージが(´・ω・`)ショボーン
482 :03/11/20 09:07 ID:T0Vee6QX
>>481
ふつーダンプしてリストアして移行する。
そもそもそんな簡単にバックエンドDBを移行しないよ。
検証してからやるべし。
483NAME IS NULL:03/11/20 14:14 ID:???
7.3.4 ってなんだ
7.3.x -> 7.4 かな?
484NAME IS NULL:03/11/21 00:48 ID:???
>>480
その説明聞いてもピンと来ないです。
出直してきますね。。
485NAME IS NULL:03/11/21 03:14 ID:DWtGky6Z
7.4 で configure の時に --java オプションつけて、jdbcドライバも一緒に作ろうとしたんですが、
/home/postgres/postgresql-7.4/src/interfaces/jdbc/build.xml:114: Old driver was detected on classpath or in jre/lib/ext, please re
move and try again.
このようなエラーが出てうまくいきません。

7.3.4の時の、jdbcドライバはclasspathから切り離してみたのですが、結果は同じでした。

どのようにしたら、いいでしょうか?

java 1.4.2
Apache Ant version 1.6beta2
kernel 2.4.22
RedHat 9 を使用しています。
486NAME IS NULL:03/11/21 04:19 ID:mYYJI5kx
>>485
jre/lib/extには無いのか?
487NAME IS NULL:03/11/21 11:20 ID:???
>>484
INSERT INTO table VALUES ('\\001\002\003・・・\\255')
こんな感じ
printf("\\\\%03o", data); を繰り返せば\\xxx の羅列はできる
488487:03/11/21 11:22 ID:???
あ、、、8進だから最後は、\\377 だったな・・・
489NAME IS NULL:03/11/21 12:53 ID:uP23HR97
DBサーバー: Red Hat Linux 3.2.2-5 , PostgreSQL7.3.4
開発環境1  : VB6(SP5) , ADO2.7SP1Refresh
開発環境2  : VB6(SP5) , ADO2.7SP1Refresh

この環境で FOR UPDATE のついたSELECT文を
実行すると開発環境1では正常に実行できるのですが
開発環境2では次のようなエラーが出てしまいます。
  「ODBCドライバは要求されたプロパティをサポートしていません」

ADOのRecordsetをOpenするときにの設定は次の通りです。
RecObj.CursorType = adOpenStatic
RecObj.LockType = adLockReadOnly

開発環境1と2で何が違うか調査しているのですが
なかなか違いがわかりません。
どこが一番怪しいかわかりますか?
よろしくお願いします。
490489:03/11/21 13:23 ID:uP23HR97
自己レスです・・・

読み返してみたら文章変でした。

開発環境1と2はインストールしているソフトは同じにしているつもりなのですが
何かのバージョンや設定が違う可能性があります。

この設定の違いを確認しろ!!というような項目はあるでしょうか?
491NAME IS NULL:03/11/21 19:17 ID:9uyKcBIr
>>486
/usr/local/j2sdk1.4.2/jre/lib/ext
のなかなんですが、postgresql.jar は、引っかからないように、__postgresql.jar__ という名前にリネームしてるんですけど

やっぱり、同じエラーが出てきてしまいます。
492NAME IS NULL:03/11/22 10:47 ID:OD6R5Gpt
>>491

.jar じゃないからじゃないの?
493NAME IS NULL:03/11/22 13:23 ID:g+cwdB3d
>>492
postgresql.7.4/src/interface/jdbc のREADMEから抜粋
Once you have ANT, run the configure script in the top-level directory with
the --with-java option. Then proceed with 'make' and 'make install' as
usual. This will compile the correct driver for your JVM, and build a .jar
file (Java ARchive) called postgresql.jar. The file will be installed in
the directory PREFIX/share/java.

That jar file will contain the driver for _your_ version of the JDK.

トップディレクトリで configure --with-java オプションを使用すれば,貴方の環境でantは実行されます。
通常は、make,そして make installを実行してください。
これは、あなたのJVMのための正確なドライバをコンパイルし、postgresql.jarと呼ばれる.jarファイル(ARchiveなJava)を構築するでしょう。
ファイルは、ディレクトリーPREFIX/share/javaにインストールされるでしょう。 < これは、/usr/local/pgsql/share/java になる postgresql.jar だとおもっています。
そのjarファイルは、貴方のバージョンのためのドライバが入っています。

と・・書いてあったので(英語もあんましよくわかってないがこんな感じなんだと思うんですが)、postgresql.jarが、jdbcドライバだと思うんですが、どうなんでしょうか?

もちろん、/share上にある、postgresql.jar も消してためしています。

494NAME IS NULL:03/11/22 23:57 ID:???
>286
超遅レスですが、下記のSQL 文はどうでしょう?
もはや手遅れだと思いますが、アンケートの結果集計等で結構使えます。

SELECT TO_CHAR(A.REGIST_TIME,'YYYY/MM/DD') AS REGIST_DATE -- 日付
,SUM(CASE WHEN A.SEX = 'M' THEN 1 ELSE 0 END) AS MALE -- 男
,SUM(CASE WHEN A.SEX = 'M' THEN 0 ELSE 1 END) AS FEMALE -- 女
FROM USER_MASTER A -- ユーザーマスタ
GROUP BY TO_CHAR(A.REGIST_TIME,'YYYY/MM/DD')

また入荷予定表なんかも作れます、下記の様なSQL かな。
'2003/11/23'の日付の文字列をプログラム側で設定したりすればよい。
また横軸を日単位から1時間単位に集約を製品、日時にすると何月何日何時に入荷す
るかがわかるクエリーになるかな。

CREATE TABLE PRODUCT_UKEIRE_INFO( -- 製品受入情報
PRODUCT_NO INTEGER -- 製品番号
,UKEIRE_DATE TIMESTAMP -- 受入日時
,UKEIRE_COUNT INTEGER -- 数量
);

SELECT A.PRODUCT_NO -- 製品番号
,SUM(CASE WHEN TO_CHAR(A.UKEIRE_DATE,'YYYY/MM/DD') = '2003/11/23' THEN A.UKEIRE_COUNT ELSE 0 END) AS DAY1 -- 日
,SUM(CASE WHEN TO_CHAR(A.UKEIRE_DATE,'YYYY/MM/DD') = '2003/11/24' THEN A.UKEIRE_COUNT ELSE 0 END) AS DAY2 -- 月
,SUM(CASE WHEN TO_CHAR(A.UKEIRE_DATE,'YYYY/MM/DD') = '2003/11/25' THEN A.UKEIRE_COUNT ELSE 0 END) AS DAY3 -- 火
,SUM(CASE WHEN TO_CHAR(A.UKEIRE_DATE,'YYYY/MM/DD') = '2003/11/26' THEN A.UKEIRE_COUNT ELSE 0 END) AS DAY4 -- 水
,SUM(CASE WHEN TO_CHAR(A.UKEIRE_DATE,'YYYY/MM/DD') = '2003/11/27' THEN A.UKEIRE_COUNT ELSE 0 END) AS DAY5 -- 木
,SUM(CASE WHEN TO_CHAR(A.UKEIRE_DATE,'YYYY/MM/DD') = '2003/11/28' THEN A.UKEIRE_COUNT ELSE 0 END) AS DAY6 -- 金
,SUM(CASE WHEN TO_CHAR(A.UKEIRE_DATE,'YYYY/MM/DD') = '2003/11/29' THEN A.UKEIRE_COUNT ELSE 0 END) AS DAY6 -- 土
FROM PRODUCT_UKEIRE_INFO A -- 製品受入情報
GROUP BY A.PRODUCT_NO

では血尿も出てきてるので、今日は帰って寝ます。
495NAME IS NULL:03/11/24 15:54 ID:W7Ky1Nr4
SQL中級車です。exceptとnot existsってSQLをネストして使う場合
どっちが早いの?
496NAME IS NULL:03/11/24 17:48 ID:???
レッツexplain
497NAME IS NULL:03/11/24 19:42 ID:???
explain analyze もいいよ。
498NAME IS NULL:03/11/24 23:10 ID:???
>>497の方法は実際に問い合わせが実行されちゃうから注意してね♪
begin; rollback;ではさむとかね。
499NAME IS NULL:03/11/25 13:58 ID:l5fvlImG
質問です。
RedHat9+Postgres7.3.2 で構築中なんですが、サーバを量産しなきゃ
ならんのでできる限りデフォルトで入っている環境をそのままで使いたい
ですよ。ところがデフォルトのデータフォルダがどこかさっぱりで。。。
FreeBSD+Tar玉 とはエラく構成が違うようで悩んでます。
そのあたりをごっそり書いてあるようなサイトってありますか?
500NAME IS NULL:03/11/25 14:14 ID:db7RU1wF
>>499
機器構成が同じなら、バイナリコピーでいいんじゃない?
501499:03/11/25 14:25 ID:???
postgres アカウントでログイン後 pwd したらありますた。逝ってきまつ。
 bash-2.05b$ pwd
 /var/lib/pgsql/data

>>500
先立つ不孝をお許しください。
502NAME IS NULL:03/11/25 14:36 ID:db7RU1wF
>>501
罰としてpgsql-jp-MLに入会して、[pgsql-jp: 31584]に対して
「メールマガジン専用さんは書きました」
という引用から返答をかくべし
503NAME IS NULL:03/11/25 15:12 ID:???
あれー、みんな7.4にして問題出てないっすか?
initdb でできたpg_hba.conf が使えないんですけど・・・

結局、255.255.255.255がおかしいってエラーだったんで
アドレス、マスク指定を 127.0.0.1 255.255.255.255 -> 127.0.0.1/32 に
したら使えるようにはなったんだけど、
1台にいくつも違うバージョンいれてるせいでこんがらがったのかなぁ・・・
504499:03/11/25 15:32 ID:???
>>502
ユーザー会のMLで同じ質問が出ているなら答えてやろうと思って
入会した「後で」件の発言見たら、全然違う内容ぢゃないですかぁw

先にアーカイブ見てから入会するんだったw
505NAME IS NULL:03/11/25 17:26 ID:db7RU1wF
>>504
それは悪いことをした。
506NAME IS NULL:03/11/26 21:03 ID:K19juM7H
7.2から7.3で結構スピード速くなってるんだけど、なんでだっけ?
7.3から7.4はそんなにかわってない。サブクエリー使わなかったら同じかな。
507NAME IS NULL:03/11/27 00:52 ID:???
7.2はコスト予測のバランスがおかしかったから。
508NAME IS NULL:03/11/27 01:06 ID:???
toastじゃなかったっけ
509NAME IS NULL:03/11/27 07:51 ID:poQ5XUV+
phpPgAdmin を入れてみたのですが、
どうも、日本語をvalueに入れると文字化けしているようです。

これに対する対処法はないでしょうか?

また、他にも、ウェブからpostgresをいじれるツールがあれば、
教えていただければ幸いです。
510NAME IS NULL:03/11/27 08:01 ID:???
FreeBSD4.7とPostgres7なのですが、
アクセスからODBC経由でテーブルのリンクを作成しようとしても、
また、CSEから(非ODBC経由で)アクセスしても、

fe_sendauth: authentication type 5 not supported

というエラーが発生してしまいます。

いったいなぜなのでしょうか?
ぐぐってみても、実際にそのエラーがでちゃってるページしか見つからず。。。

教えていただければ幸いです。
511510:03/11/27 08:20 ID:???
すいません、SSHのIDとDBのユーザ名がごちゃごちゃになっていた模様です。。
ちょっと勉強しなおしてきます。
512510:03/11/27 08:35 ID:???
たびたびすみません、勘違いしてたように見えたのですが、正しくなってました。
DBのユーザ名入れるところにSSHのログイン名を入れたかと思っていましたが、
ちゃんとDBのユーザ名が入ってました。
513NAME IS NULL:03/11/27 19:14 ID:???
MS SQL のデータ(*.mdf) を読みこんで、
PostgreSQL で使うにはどうやったらいいですか?
(てか可能ですか?)
514NAME IS NULL:03/11/28 06:58 ID:???
>>513
SQL文に展開して読み直せば大抵のことはできるだろ。
つーか普通別プラットフォームに移すときゃそうする。
あとはテーブル定義部の非互換に気をつけれ。
515NAME IS NULL:03/11/28 19:27 ID:xhqz25qz
シーケンスを使用すると、シーケンス管理用のテーブルが作成されると思いますが、
その中に、log_cnt というカラムがあると思います。
このカラムの値が、不規則に変化するのですが、どういう意味があるのかわかる方は
いらっしゃいませんでしょうか?
よろしくお願いします。
516NAME IS NULL:03/12/01 23:48 ID:???
Tom Lane さんが知っているみたい http://www.cubik.ca/archives/pgsql-general/msg00376.html
517NAME IS NULL:03/12/03 08:17 ID:p9askHyN
どなたか教えて下さい。3つのテーブルがあり、
hudousan(id serial, area_id char(4), type_id char(4), menseki int)
area(area_id char(4), area varchar(32), area_yomi varchar(64))
type(type_id char(4), type varchar(32), type_yomi varchar(64))
としています。area,typeには漢字, area_yomi,type_yomiにはカタカナが入ってます。
select hudousan.id, area.area, type.type from
((hudousan inner joint area on hudousan.area_id=area.area_id)
inner join type on hudousan.type_id = type.type_id)
としたいのですが、漢字が表示されません。
このクエリはおかしいでしょうか?
どなたか解決のヒントをいただけないでしょうか?

ちなみに漢字でなくカタカナなら、たとえば
select hudousan.id, area.area_yomi, type.type_yomi~
とすると正常に表示されます。
また、3つの結合ではなく2つなら、たとえば
select * from hudousan.id, area.area from hudousan inner join
hudousan.area_id=area.area_id
とすると正常に漢字は表示されます。        
518NAME IS NULL:03/12/03 16:51 ID:???
表示されないとは?
psql なのか?文字コードは何にしてる?
519517:03/12/03 17:54 ID:Q2KFNKSm
518さんレスありがとうございます。
psqlです。
select hudousan.id, area.area, type.type from
  (hudousan inner joint area on hudousan.area_id=area.area_id)
    inner join type on hudousan.type_id = type.type_id)
として
  id | area | type
--------------------------------
1 |  何処  | 一戸建
のように表示したいのですが
  id | area | type
--------------------------------
| |
のように何も表示されないのです。
areaをarea_yomi、tyypeをtype_yomiにすると
  id | area_yomi | type_yomi
--------------------------------
1 | ドコカ | コダテ 
のように表示できるのですが・・
同じテーブルのあるカラムは表示できて別のカラムは表示できないので
文字コードの問題ではなくテーブルの型やSQLの問題のような気がする
のですがよくわかりません。

520NAME IS NULL:03/12/03 18:53 ID:???
Encoding は EUC_JP になってる?
521517:03/12/03 19:24 ID:y3FHYBXx
520さん、レスありがとうございます。
psql -l で調べるとEUC-JP になってます。
ちなみに postgresql-7.2.3 on vine2.6 です。
522NAME IS NULL:03/12/03 20:17 ID:???
select hudousan.id, area.area, type.type from ((hudousan inner join area
on hudousan.area_id=area.area_id) inner join type on hudousan.type_id = type.type_id) ;
id | area | type
----+------+--------
1 | 何処 | 一戸建
(1 row)

普通に出るけどな・・・
PostgreSQL 7.2.1 on i386-pc-solaris2.8 で
523NAME IS NULL:03/12/03 21:24 ID:???
すいませんが教えてください。

infoというテーブル

Column |      Type       | Modifiers
--------+-----------------------------+-----------
id   | character varying(128)   | not null

があり、これをdeleteしたときにinfo_deletedという以下のような
テーブルにいつ消されたかバックアップをとりたいと考えています。

  Column  |      Type       | Modifiers
------------+-----------------------------+-----------
id     | character varying(128)   | not null
deleted_at | timestamp without time zone | not null

そこで以下のようなinfo_del_backupというルールを作成しました。

create rule info_del_backup as on delete to info do insert into info_deleted (id,deleted_at) SELECT id,'now' from info wehre id = old.id;

たしかにinfoからレコードを消したらinfo_deletedにバックアップしてくれるのですが、
deleted_atに消した日時が入ってほしいのになぜかルールを作成した日時が入ってしまいます。

ルールを作成したときに'now'が展開されてしまっているのかなと思いましたが、これを
動的な'now'にするにはどのようにすればよいでしょうか。
postgres7.4を使っております。
初めての書き込みですので厨房な質問でしたら申し訳ありません。

524523:03/12/03 21:27 ID:???
googleで調べたら
'now'じゃなくてnow()をつかえばいいと書いてありました。
1分で自己解決してしまった。
スレ汚しすいませんでした。
525NAME IS NULL:03/12/03 22:03 ID:???
>>521
EUC-JPなDBにSJISを突っ込んでいるとか?
でも、INSERTするときにエラーが出るはずか?
526NAME IS NULL:03/12/04 01:51 ID:???
>>524に便乗質問だが

昔は DEFAULT 'now'::text
にしてたんだが、今はそうしない方がいいの?
527NAME IS NULL:03/12/04 04:43 ID:6qT9TARo
>>526
昔から、ルールとかファンクションとかビューには'now'使えないと思うのだが。
528あぼーん:あぼーん
あぼーん
529NAME IS NULL:03/12/05 10:22 ID:???
TABLE作成時に now が展開されないようにtextにキャストする
のは、最近のやつは必要なくなってる、みたい
しかし、pg_dumpから持ってくると展開されてるし
常に注意が必要だな
530NAME IS NULL:03/12/05 12:30 ID:cBAsm9bR
PostgreSQL へのクエリを SOAP などの
XML ベースのフレームワークを用いて行いたいと考えています。

たとえば SQL 文を XML 文書で表現する場合の XML スキーマなどは
どこかで標準化されているのでしょうか?
531NAME IS NULL:03/12/05 12:47 ID:cBAsm9bR
PostgreSQL and SOAP, version 7.4/8.0
http://archives.postgresql.org/pgsql-hackers/2003-03/msg01151.php
将来的にはXML-RPCベースでもいいかもね、という結論のようですね。
532NAME IS NULL:03/12/06 18:22 ID:A0+Y6Cuw
ご存知の方教えてください。
ODBC(7.03.200)+ADOをVBから接続しているのですが、
レコードセットでchar,varchar型の列から全角文字を読み出すと、
列定義長の半分しか読み出せません。
例えばchar(8)と定義した列には全角文字が8文字まで格納でき、
psql上では読み出しもOKです。しかしODBC+ADOのレコードセット
で読み出すと、先頭4文字しか読み出せません。同様の現象は
windows上のpgAdminIIでも発生してます。
ところがAccessのテーブルリンクでは正常に読み出せます。
なにか設定がおかしいのでしょうか?
データベースはEUC_JPです。
533NAME IS NULL:03/12/06 20:10 ID:???
ODBCのバージョンとパッチは?
534NAME IS NULL:03/12/06 20:12 ID:???
あ、書いてあったか。失礼
PostgreSQLのバージョンによってはあわんかもしれんが
7.3.xぽいしなあ
535NAME IS NULL:03/12/06 21:46 ID:???
7.3.3と7.2.3で検証しています。
ODBCログを見てるとデータ自体は届いてるようで、
Accessテーブルリンクは97/2000ともに読み出せてます。
ADO経由だとだめのようなのです。
536NAME IS NULL:03/12/07 06:14 ID:???
単純にSQLの書き方なのでスレ違いかもしれませんが、pgsqlを使っているのでココで質問します。

ID(varchar),日付(date),数量(int) のテーブルで日付順にソートしながら、
その日までの累計も出力したいのですが、どのように書けばいいのでしょうか?

ID |  日 付  |数量|累計
A1| 2003-12- 1 |  5 |  5
A1| 2003-12- 2 |  3 |  8
A1| 2003-12- 3 |  2 | 10
A1| 2003-12- 4 |  7 | 17

よろしくです。
537:03/12/07 18:05 ID:kXPpNlp0
テーブルのバージョン管理を試みているのですが、
ちょっと質問です。

あるテーブルに対して、UPDATE等をしたときに、
古い情報も残しておきたいので、
その方法として、RULEを作って
UPDATEしたときに、前(old)のテーブルをまるまる テーブルv1 としてコピーして、
テーブルを更新しようと考えています。

そのときに、テーブルそのものに”テーブルのバージョン”を
つけたいのですが、どうすればいいか誰かご存知の方いらっしゃいましたら
教えてください。
もし、テーブルそのものにバージョンがつけれたら、
RULE でテーブルをコピーする際に、 テーブル_v[バージョン] というような
ことをしたいと考えてます。

ところで、通常、SQLでは、UPDATE等した時のバージョン管理は
どうなっているのでしょうか?
CVSなら、差分とってるので、いざ前バージョンのものを使いたいときでも
簡単なのですが・・・。


538NAME IS NULL:03/12/07 20:07 ID:???
RDBMSをCVSと同じような感覚で語られてもな。
539NAME IS NULL:03/12/08 01:27 ID:???
>>538
CVSに慣れてくると、
なんでファイルシステムとかDBに履歴とかブランチが
つけれないんだよーとか思うようになるのでつ。

Rajeev Nager本を読んだからといって、NT向けのファイルシステムドライバが
そうそう簡単に書けるわけでもないし…

閑話休題。Postgresの設計だったら、任意の時点に
チェックポイント打ち込んでその時点の状態を参照できるように
する改造は不可能ではない予感(簡単じゃねーと思うが)
VACUUMは、最古チェックポイントより手前のみで行うという
運用にすれば…
540NAME IS NULL:03/12/08 01:57 ID:IhBabMF7
>>539
> CVSに慣れてくると、
> なんでファイルシステムとかDBに履歴とかブランチが
> つけれないんだよーとか思うようになるのでつ。

なんか、ナントカを覚えたサルみたい。
541NAME IS NULL:03/12/08 02:59 ID:???
>539
そんな話なら、タプルヘッダが持ってるデータと同じような情報を
テーブルに自分で追加すればいいだけだと思うがな。

>540
postgresは追記型だから云々とかゆーことを知ったばかりなんだろうね。
オプソだからソースいじれるんだぜ!とか思っちゃったんだろうね。
542NAME IS NULL:03/12/08 04:35 ID:???
>>539
RDBはRDBとして歴史が長いので、
その枠組みの中で解決した方がいいと思うよ。
素人が独自なことを考えてもろくなことにならない。
543NAME IS NULL:03/12/08 07:44 ID:???
>>539
その機能昔のバージョンにあったよ。今は消えたけど。
544NAME IS NULL:03/12/08 10:32 ID:???
>>539
スレ違いだけどZODBとかどうです?
545NAME IS NULL:03/12/08 11:05 ID:???
>>537>>539は別の人じゃないの?
546NAME IS NULL:03/12/08 11:16 ID:???
>>532です。
追加ですが、
VBからDAO3.6でアクセスしてみると大丈夫でした。
逆にAccessVBAからADOでアクセスすると先の不具合は再現します。
(ADO2.1〜2.8で検証)
また、SQL文の時点で当該項目にTRIMをかけておいてやると
問題なく読み出せるようになります。なんとなくプロバイダとのスキーマ
情報のやりとりでミスってるような気が。。。

改めて質問ですが、ODBC+ADOで使用されている方はこのような
現象に遭遇していないでしょうか?
ウチの環境の問題だけであってほしいのですが。。。
547NAME IS NULL:03/12/08 12:00 ID:kFaI7gRU
>>539
RDBだから、というのが一番君が押さえておくポイントだと思うよ。
まぁ有っても良い機能だが、RDBという考え方の再考が求められる
ような機能だな。
548NAME IS NULL:03/12/08 12:08 ID:kFaI7gRU
>>547
を書いて思った。
RDBは、静的な分析を対象にしているなぁと。
確かにこれはデータ-ベースという枠組みとして欠点かも知れないね。

これに対する全く違った解答で、OODB(オブジェクト指向データベース)
と言うものが過去(今も現役だけど)注目された事が有った、
君が求めているように、オブジェクトの成長や改変に合わせて対応するような
仕組みも有った。
しかし、基本的にRDBMSに比べてオーバヘッドが大きく、OODBとして使うのが
精一杯(それでRDBより遅い)で、あまり普及していない。

549539:03/12/08 12:40 ID:???
起きたらビクーリだ(w

考え直してみると、保守のためにそのような機能をつけたところで
みんなその機能を運用のために使うようになってしまい、
パフォーマンス・安定性の新たな火種になってしまうことを
想像すべきだった。昔は実装されてたというのは、7.0の頃からの
ユーザだったのでしらんかった。

サル呼ばわりも含め勉強になった。thx
550NAME IS NULL:03/12/08 13:59 ID:???
つーか、RDBMSは、常に変化していくデータの中で、
如何に「一瞬を取り出すか(そしてACID制約のもとで更新するか)」という
問題だと思う。

PostgreSQLの場合は、それを「Snapshot」と呼んでいるわけだが。
551NAME IS NULLNULL:03/12/09 03:57 ID:OBdz5fAC
http://www.postgresql.jp/document/pg734doc/programmer/plpgsql-declarations.html
にある、例

CREATE FUNCTION use_two_tables(tablename) RETURNS TEXT AS '
DECLARE
in_t ALIAS FOR $1;
use_t table2name%ROWTYPE;
BEGIN
SELECT * INTO use_t FROM table2name WHERE ... ;
RETURN in_t.f1 || use_t.f3 || in_t.f5 || use_t.f7;
END;
' LANGUAGE 'plpgsql';

を参考に、tablenameを引数にとるような FUNCTION をつくりたいのですが、

ERROR: Type "tablename" does not exist
hoge=#

と怒られてしまいます。
環境は、FreeBSD 4.8 release上で、

 psql (PostgreSQL) 7.3.2

を使っています。
FUNCTIONでテーブル名を引数にとる場合、引数の型はどうのようにしたらいいのでしょうか?





552536:03/12/09 09:36 ID:???
誰か、お願いします。m(_._)m
553NAME IS NULL:03/12/09 10:15 ID:???
基本的にそれは無理
EXECUTE を使えばいけるかも
554553:03/12/09 10:15 ID:???
>>551宛てでした。
555NAME IS NULL:03/12/09 10:17 ID:???
>>536のも普通無理でないか
Group by でまとめたやつと範囲指定で集計したやつをくっつければ
できるかもしれんが、そもそも考え方がおかしい
556NAME IS NULL:03/12/09 10:29 ID:???
>>536
まあ、無難なのは一時表作ることだろうねぇ。
気合いを入れてSQL書いてもメンテナンス性が悪くなるだけで、
ろくなことにならないと思う。速度もたいして変わらないし。
557536:03/12/09 11:12 ID:???
>>555-556
どもありがとう。
出来ないなら出来ないとわかったので、すっきりしました。
558NAME IS NULL:03/12/09 13:16 ID:???
PostgreSQL 7.1.3 ドキュメント(日本語版 1.6) によると

character(n), char(n) (4+n) バイト SQL互換性あり 固定長文字列(空白可)
character varying(n), varchar(n) (4+n) バイト SQL互換性あり 制限付の可変長文字列
text (4+n) バイト もっとも柔軟性がある 制限無しの可変長文字列

text はもっとも柔軟性がある、と書かれているのですが、もっとも
柔軟性があるのに、char や varcha をあえて使う理由はあるのでしょうか?

text にした場合のメリット、デメリットは何でしょうか?



559NAME IS NULL:03/12/09 15:07 ID:???
>>558
たまたまPostgresの実装が、
CHARおよびVARCHARの実装=制約付きTEXTの実装
となってるということだと思われ。

他システムに移植するとき、TEXTは制限がキツいことが多い。
たとえば、SybaseおよびMS SQLだと TEXT は BLOB で実装されているので、
・記憶容量が1ページ(数KBほど)以上取られてしまう
・インデクスをつけられない、もちろん主キーに設定できない
・その他もろもろ

逆にPostgres以外のRDBMSだと、
CHAR最強だったりVARCHAR最強だったり、いろいろあったりする。

というわけで、
メリット 柔軟性が高まる
デメリット 他システムに移植するときに困るかも
みたいな感じだろう。
560558:03/12/09 15:12 ID:???
>> 559
詳細な解説ありがとうございます。

という事は、Postgres でのみの稼働の場合(移植を考慮する必要全くなし)
は、文字列のフィールドにはあらゆる text を使っておけばよい
という事ですかね。

ありがとうございました。
561NAME IS NULL:03/12/09 20:05 ID:???
藻前様方は NUMERIC って使ってまつか?
使った感じはどうでつか?いい感じでつか?
562NAME IS NULL:03/12/09 23:44 ID:???
7.3.5には興味ないのね・・・
563NAME IS NULL:03/12/10 09:42 ID:???
先生と、いわれるほどの馬鹿でなし
564NAME IS NULL:03/12/10 19:28 ID:YxYB+J4x
シェルスクリプトの中で,
例えば,$SQL というシェル変数に,
ある sql 文の文字列をもっているとします.

この sql を(シェルスクリプトの中で)
psql を使って,database という名前のデータベースに
かましてやるにはどうしたらいいのでしょうか?
565NAME IS NULL:03/12/10 21:21 ID:???
>>564
pgbash?
566NAME IS NULL:03/12/10 21:23 ID:???
item に商品名、dt に売れた日が入っているとして
売れた日順に item を並べたいのですが

select distinct item from T1 order by dt desc;

と書くと

ERROR: For SELECT DISTINCT, ORDER BY expressions must appear in target list

と言われるのですが、こういう場合はどう書くのでしょうか。
567NAME IS NULL:03/12/11 11:33 ID:???
>>566
distinct やめて group by item でいいんじゃね?

便乗質問なんだけど、>>566の例でいうと、売れたitemが何種類あるか、
って一発でわかる方法ってある?group by して count(item) ってやっても

item | count
-----+-----
A | 3
B | 2
C | 5
(3 rows)

みたいになっちゃうと思うんだけど、この場合はA、B、Cの三種類ということで
3という値が欲しいんです。今は仕方なく pg_numrows() でやってる。
568NAME IS NULL:03/12/11 11:40 ID:???
>>567
select count(*) from (select count(item) from t1 group by item);
569NAME IS NULL:03/12/11 12:39 ID:???
>>568
そうでした。お騒がせしました。
570566:03/12/11 12:55 ID:???
>>567
ありがとうございます。group by はこれでいいですよね?
select item,max(dt) from T1 group by item order by max(dt) desc;
571NAME IS NULL:03/12/11 15:54 ID:???
調べても分かりませんでしたので、恥を忍んで質問させてください。

レコードが20件も無いテーブルで単純に
select * from mytable;
としただけで15秒近く検索に時間がかかってしまい困ってます。
他の数万件もレコードのあるテーブルは一瞬なのに
そのテーブルだけ何故か時間がかかります。

そのテーブルは22個の項目から出来ていて、以下のような感じです。
integer 5個
timestamp 1個
text 2個 (最大500文字くらいの日本語です)
smallint[]  12個(配列は最大10個くらいのデータを格納)
boolean   2個

select count(*)でも同じ時間がかかります。
VACUUMや、共有メモリを増やしてもどうにもなりませんでした。
配列やtextの型が駄目なのかと思い、CHARに変えたりしても駄目でした。
どなたかこの問題の原因がお分かりになる方いらっしゃいますか?

FreeBSD4.8 Release
postgresql 7.3.3
Xeon 2.0GHz
mem 512MB( sharebuffer = 8192 , sortmem = 1024 )
572NAME IS NULL:03/12/11 16:00 ID:???
>>571
explain select * from mytable;
573NAME IS NULL:03/12/11 17:24 ID:???
お客さん用の管理画面をウェブ上で作ろうとしているのですが、
操作履歴テーブルを用意して担当者の操作の履歴を書き込むのに
トリガやルールを使うのはどうかなと思ったのですが、
実行時にパラメータを渡すようなことってできますでしょうか?
574NAME IS NULL:03/12/11 17:28 ID:???
>>572
ご返答ありがとうございました。
explainというのは知りませんでしたが、便利ですね。
教えていただいた文を試しましたところ、

Seq scan on mytable ( cost=0.00..47934.17 rows=47 width=565 )

という結果が出ました。いかがでしょうか?
575NAME IS NULL:03/12/11 17:57 ID:???
>>574のrowsは17でした。手コピーなので間違えました。すいません。
576NAME IS NULL:03/12/12 04:19 ID:???
>>574
「順スキャンをやっています」「ものすごく時間がかかります」
ということがわかる。

それにしても、基準値変えてないとしたらその程度のクエリで
コスト見積もり48000てのは異常だなぁ・・・
INDEX使うとかなんとかならんの?
577NAME IS NULL:03/12/12 05:53 ID:???
あの程度の行数(17行)ならIndex云々じゃないと思う。
システムカタログぶっ壊れとか、ファイルシステムそのものが逝っちゃっているとか。
ちょと異常杉。
578NAME IS NULL:03/12/12 22:02 ID:???
なぜ手コピー。TeraTerm って C-c でコピーできないからというオチじゃないよね。
579554:03/12/12 22:49 ID:???
遅れてすいませんでした。DION規制があって書き込めませんでした。

>>559さん
レスありがとうございます。
INDEXを検索に使う項目につけてみましたが速度は相変わらずでした。
他の10000件以上レコードのあるテーブルに同じ事をやると0.00..197.24という数字なので
リソース不足ではないと思うんですが、謎です・・・

>>560
助言ありがとうございます。
やはり異常でしょうか((( ;゚Д゚)))ガクガクブルブル
前に同じ事があった時はテーブルをtruncateして早くなりましたが、
数十件をINSERTすると、すぐ今の遅さに戻ってしまいます。
また、性質上何度もtruncate出来ないテーブルなので、これによる解決は出来ません。
もしかしたらなんですが、このテーブル名がinfoであることは何か関係ないでしょうか?

>>561
つっこみありがとうございます。
サーバーマシンと、Windowsマシン(2chはこっち)を切り替えて使ってるというだけです。
580NAME IS NULL:03/12/12 22:57 ID:???
配列やめても変わらん?
581NAME IS NULL:03/12/12 23:06 ID:???
vaccum full analyze とか。
582554:03/12/12 23:20 ID:???
慌ててて、さん付けしてませんでしたw失礼しました。

>>563さん
即レスありがとうございます。
実を申しますと配列の前はCHARで実現していたテーブルなんですが、それが同じように遅くなってしまい、
藁にもすがる思いで配列ならと思って配列に変えてみたんです。
しかし結果はごらんの通り変わらず、嘆いています。
性質上それほど参照するテーブルでもないので我慢すれば済むんですけど、
もし同じ経験をされた方がいれば、知恵をお貸し出来ればと思った次第です。

>>564さん
提案ありがとうございます。
VACUUM ANALYZEは行いましたが、FULLオプションは付けませんでした。
物理的に今は出来ないので、次会社に行った時にやってみます。
ところで、説明を読んだんですが、これは完全にDBを止めてしまうんですよね?
これが、ちょっと怖かったんですが、
単純にpg_dump > mydbとした時のmydbサイズが1MBだとした場合に
VACUUM FULL ANALYZE;はどの程度時間がかかるものなんでしょうか?
583NAME IS NULL:03/12/13 01:27 ID:???
>>582
数秒。これで数分かかったらディスク異常かな。
規模とマシン性能からみて数十秒でも長いと思う。
584571:03/12/13 02:05 ID:???
レス番号激しくズレてました。openjane.
上の名前554は>>571の質問した人です。見づらくってすみませぬ。。。

>>582
日本語変でした。
知恵をお貸し=>知恵をお借り
貸すほど知恵余ってませんw


>>583さん
なるほど、ありがとうございます。
おかげさまで安心しました。
こっそり試してみまつ。

そういえば、HDD性能書き忘れてましたが、
内臓SCSIのU320のRPM10000、RAID無しでした。
容量は幸か不幸か全てのパーティションでかなり余ってますので、
一見問題なさそうに動いてますがディスク異常は仰る通り疑ってみたいです。
585NAME IS NULL:03/12/13 02:42 ID:???
つか、pg_dump したやつ晒してみろや(゚Д゚)ゴルゥア!
586583:03/12/13 03:08 ID:???
ああ、ダンプ後で1MBの話か・・・
数秒はどうだろう?でも分単位はかからない、はず。
587NAME IS NULL:03/12/13 06:13 ID:???
>>584
1行当たり精々3KBぐらいなので、17行で51KB程度のテーブルなのに、
見積もりコスト48000x8KB=375MBってのがそもそも異常。
1ページ=1Byteで計算しているような値だ。

pgsql本体が壊れている感じもしないわけでもないが、他のテーブルで
問題ないというのも摩訶不思議

なお、vacuumはDBそのものを止めるのではなくて、vacuum中のテーブルだけ
ロックするので、
vacuum full analyze 問題のテーブル;
とすればよろし。

#なんか、create tableがうまく出来なくなっている感じがしないわけでもない。
#他のテーブル=過去に作成したテーブルのときは問題なくて、ある時点を
#境に、まともなtableを作れなくなってしまっているとか。
#ま、外している可能性大なので、独り言モードw
588571:03/12/15 15:38 ID:???
レス遅れてすみません。

教えて頂いた通り
VACUUM FULL ANALYZE info;
を実行したら、驚くほど早くなりました。
前と全く同じSQLをexplainで計測すると
cost=0.00..2.23
という数字でした。素人の私でも相当早くなった事が分かります。
FULLつけたくらいで、と半信半疑でしたが反省してます。
すごすぎます。偉すぎます。FULL
1分くらいかかり、その間アクセス不可でしたが、
これから遅くなったらまずFULLを試してみます。

皆さんありがとうございました。
長々と居座ってしまいすみませんでした。
何故このような状態になったかだけが引っかかりますが、
結果よしということで、満足しています。聞いてみてよかったです。
589NAME IS NULL:03/12/15 16:54 ID:???
よかったですね。
FULL 付けないと UPDATE/DELETE のゴミが残ります。
頻繁に更新があるなら毎時間 VACUUM; して、
アクセスの少ない時間に VACUUM FULL; するといいかも。
590NAME IS NULL:03/12/16 05:13 ID:???
>>588
>長々と居座ってしまいすみませんでした。

このスレの存在意義があったってことだな(w
591NAME IS NULL:03/12/16 15:40 ID:yb6Py4Lp
postgresql7.4でeRserverを組み込んで
レプリケーションをしたいと思っているのですが、
eRserverのREADMEを読んでもレプリケーションの
方法がわかりません。
また、eRserverがJAVAベースで動くって事は、
JDK 1.2.2orJDK 1.3.1が要りますよね。
FreeBSD4.4にJDKインストールしたときに
JDKが落ちまくってた経験があるので、
二の足を踏んでいます。
どなたかアドバイスをお願いいたします。
592NAME IS NULL:03/12/16 19:51 ID:???
postgres7.3に保存してあるデータをoracle9iに移行したいのですが。

自分が考えてるのが、一度CSVファイルに落としてからoracleにインポートする
という方法なのですが、もっと手軽にデータを移行できる方法ってないでしょうか?
593NAME IS NULL:03/12/17 01:06 ID:???
>>592
Access挟んで全件SELECT→INSERT
594NAME IS NULL:03/12/17 02:11 ID:p/6HMCOu
よく分かんないけど、OracleかMiracleあたりにマイグレーションツールが
あるんじゃない?
595592:03/12/17 03:49 ID:???
>>593
>>594
お返事ありがとうございます。

マイグレーションツール探してみましたが、どれも製品化されているものばかりでした。
oracle絡んでるので当然といえば当然でしょうが、できればコストをかけずに移行したいです。

あと説明不足で申し訳なかったのですが、テーブル単位ではなくDB単位で移行する方法はないでしょうか?
pg_dumpで落としたファイルをperlなどでデータのみ抽出したりできますか?
596NAME IS NULL:03/12/17 09:49 ID:???
pg_dump -D で insert 形式にして
perl で oracle 用に置換する
のを 592 が公開する。
597NAME IS NULL:03/12/17 20:31 ID:???
> pg_dumpで落としたファイルをperlなどでデータのみ抽出したりできますか?

pg_dump -a(or --data-only) でデータだけ落とせると思うけど。

pg_dumpだけでも、結構いろんなことできるよ。
598NAME IS NULL:03/12/17 21:43 ID:???
599NAME IS NULL:03/12/18 11:58 ID:???
  id | sinamono | suuryou
--------------------------------
1 |  りんご  | 100
2 |  みかん | 200

こういったテーブルで、id,sinamono,suuryouを取得する方法はありませんか?
id,sinamono,suuryouの値(「1」「りんご」「100」)じゃありません。
「id」「sinamono」「suuryou」といった項目名がほしいのです。
600NAME IS NULL:03/12/18 12:45 ID:???
>>599
phpならpg_num_fieldsで取れますけど。
601NAME IS NULL:03/12/18 13:06 ID:???
>>600
多分 pg_field_name() と言いたかったんだろうね
602NAME IS NULL:03/12/18 13:28 ID:???
>>599
ちょっと長いけどこんなのは?

select
attname
from
pg_attribute
where
attnum > 0 and
attrelid = (select relfilenode from pg_class where relname = 'hoge_table')
order by attnum
;
603599:03/12/18 14:16 ID:???
>>600-601
すいません。環境書いてませんでした。
Perlだったのですが近いうちにPHPも使おうと思っているので記憶しておきますね。

>>602
ありがとうございます!
ためしたところ、ちゃんと取得できるようになりました。
自分でもいろいろやってみたのですが、cmaxやらxmaxやらも出てきて
これじゃないのかなぁ・・・とか思ってみたり・・・

attnumを使えばよかったのですね。
使わせてもらいます。
604NAME IS NULL:03/12/18 21:48 ID:QiHxPYDL
postgreSQLってshift-jisの文字列は格納できないのでしょうか?
605NAME IS NULL:03/12/18 22:06 ID:???
>>604
できない。
けど、Client_EncodingでSJISと指定すれば、
バックエンド側でSJIS<->EUC-JP変換してくれる。
(のだったと思う)
606NAME IS NULL:03/12/18 22:49 ID:???
>>605
そうですか。その場合DoCoMoの絵文字が入った文字列を格納したら
取り出した時には文字化けしてでてくるんでしょうか?
ちょっと手元にないので分からないのですが。
607NAME IS NULL:03/12/18 23:17 ID:???
>>605
それはネタだよね。
マジレスすれば、データベース作成のときに-eで指定すればいい。
608NAME IS NULL:03/12/18 23:21 ID:???
>>607
い?
SJIS指定できたっけ?
だとしたらゴメソ。>>604
609NAME IS NULL:03/12/18 23:26 ID:???
>>608
スマソ
SJISの指定ができるのは7.0のバグだったらしい。
610NAME IS NULL:03/12/18 23:33 ID:???
>>609
それじゃぁ、気をとりなおしてw

>>606
EUC-JPオンリーな環境しか使ってないので、試したことない。
実際、SJISのまま突っ込んだことがないので、あれなんだが、
「EUC-JPの範疇じゃねぇよ」って怒られた記憶があるので、
SJISのまま強引に突っ込むことは出来ないものと思っている。

で、機種依存文字がEUC-JP(の範疇)に変換されるのかどうかも
しらんし。glibcのiconv()なんて、○数字も変換できなかったと思うが
pgsqlがどのようにコード変換しているかもシラネ。

つうことで、がんばって検証してくれ。
もしくはもっとエロい人が答えてくれるかな。
検証したら報告よろしく。
611NAME IS NULL:03/12/19 00:56 ID:???
この板の雰囲気っていいよね。
612訂正:03/12/19 00:57 ID:???
×板
〇スレ
613NAME IS NULL:03/12/19 01:22 ID:???
PostgreSQLのShift_JISはCP932と同等だといつかMLに書かれていたと思う。
614NAME IS NULL:03/12/19 23:59 ID:???
615NAME IS NULL:03/12/20 04:12 ID:???
ってかさ。
Oracleでもその他でもSJIS入れられるよね。
PostgreSQLは対応の予定はないのかな?
よくMLとかでEUC_JPで入れてClient_Encodingで変換するのが「常套」って
いう回答がつくけど、客の要件によっちゃそれが許されないことも有るよね。
それだけでpgsqlが却下になるのが寂しい。
責めてるわけじゃないです。もっと使い勝手とか良くなるといいなと思ってるだけ。
延び延びになってるWin版だとSJISになるんだろうか。
616NAME IS NULL:03/12/20 13:19 ID:???
>>615
PowerGresはどうなってんだろうか。

ま、下手にSJISつかって5C問題あたりに悩むより、
EUC-JPのみの方が手間減るのでイイ派なんだけど。
617NAME IS NULL:03/12/20 14:52 ID:???
>>615
> 客の要件によっちゃそれが許されないことも有るよね

たとえばどんな用件?
618 :03/12/20 15:38 ID:???
>>617
2ちゃんねる過去ログ保管 DB とか?
619NAME IS NULL:03/12/20 17:29 ID:???
それだったらUTF-8でいいような。EUC-JPじゃ無理だろうけど。
620NAME IS NULL:03/12/20 18:09 ID:???
UTF-8使うぐらいならMULE_INTERNALの方がまし。
漏れはデータベース内部コードにUTF-8は禁忌だと思う。
621 :03/12/20 18:12 ID:???
>>620
サイズが大きくなっちゃうから?
622NAME IS NULL:03/12/20 18:45 ID:???
>>620
近畿ってどんなふうに?
MULE内部コードがどう優れているのか知識はないが、少なくとも
SJISやEUCはUTF8より劣ると思うがね。

>>621
MULE内部コードとUTF8じゃあたいしてサイズは変わらんと思うが。
623NAME IS NULL:03/12/20 19:37 ID:???
外字のせいでSJISのままでないと困ることがある。
EUC-JPやUTF-8だとマッピングが不十分だし。
624NAME IS NULL:03/12/21 00:39 ID:FmsnEdAt
>>617
他人だけど、簡単に思いつくのが、

ちんけなDBアクセスソフトを使って、エクセルであんな事したり、
こんな事したい時なんじゃないかな?

エンドユーザにも分析データ提供したいけど、エンドユーザに
コード変換のわずらわしさを説明するのが大変な時。

625NAME IS NULL:03/12/21 00:50 ID:???
いわゆる外字ってのはSJISですらないからなぁ。
626NAME IS NULL:03/12/21 00:58 ID:???
>>622
MULE内部コードとSJIS/EUC-JPは数式的な変換で逝ける。

UTF-8を使うとテーブルマッピングになる。この変換表が
各社各様バラバラで「混ぜるな危険」なのですよ。
多少の文字化けを全く気にしないなら好きにしていいと思う。
627NAME IS NULL:03/12/21 01:58 ID:???
>>626
UTF8を内部コードに用いるのに何か致命的な欠点でもあるのかと
思ったが、その程度の話だったのかな?
要は混ぜなきゃ良いわけだし。というか、Postgresの内部⇔外部
コードのマッピングの話なワケだから、そこに「各社各様バラバラ」な
変換表という話が関係してくる理由がよくわからない。
628NAME IS NULL:03/12/21 11:29 ID:???
>>627
UTF-8のまま外に引っ張り出すclientがいたらそれが風穴になってしまう。
629NAME IS NULL:03/12/21 12:36 ID:???
それ内部コードの話じゃないじゃん。
630NAME IS NULL:03/12/21 12:52 ID:???
>>628
それは、SJIS->UTF-8だと解決できるのか?
631NAME IS NULL:03/12/24 20:29 ID:NdhqK1Dk
postgresql7.3.5で、./configure --prefix=/usr/local/pgsql --with-java
makeとすると、下記エラーが出て、インストールできません。

PCの環境は下記です。
OS:RedHatLinux7.3
コンパイラ:jdk1.3.1_07
JDBC:ant-1.5.1
DB:PostgreSQL7.2.3
Web:Apache1.3.29
Tomcat 3.2.4
※ApacheとTomcatは連携の設定をしています。


/home/postgres/.bashrcには、下記の値が入力されています。

#PATH=$PATH:$HOME/bin:/usr/local/pgsql/bin
export JAVA_HOME=/usr/java/jdk1.3.1_07
export ANT_HOME=/usr/local/jakarta-ant-1.5.1
export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin
export POSTGRES_HOME=/usr/local/pgsql
export PATH="$PATH":/usr/local/pgsql/bin
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH="$MANPATH":$POSTGRES_HOME/man
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
export
CLASSPATH=/usr/local/pgsql/share/java/postgresql.jar:/usr/local/pgsql/share/java/postgresql-examples.jar

/etc/profileには、下記の値が入力されています。

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
export JAVA_HOME=/usr/java/jdk1.3.1_07
export TOMCAT_HOME=/usr/local/jakarta-tomcat-3.2.4
export PATH=$PATH:$JAVA_HOME/bin:$TOMCAT_HOME/bin
#export PATH=$PATH:$JAVA_HOME/bin:
#export TOMCAT_HOME=/usr/local/tomcat
export
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:/usr/local/jakarta-tomcat-3.2.4/lib/servlet.jar:/usr/local/pgsql/share/java/postgresql.jar

for i in /etc/profile.d/*.sh ; do
以上がPCの設定です。

エラー内容は次に続きます。
632631:03/12/24 20:32 ID:NdhqK1Dk
compile:
[javac] Compiling 50 source files to /usr/local/pgsql/postgresql-7.3.5/src/interfaces/jdbc/build
[javac] /usr/local/pgsql/postgresql-7.3.5/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2
ResultSet.java:244: シンボルを解釈処理できません。
[javac] シンボル: コンストラクタ Array (org.postgresql.PGConnection,int,org.postgresql.Field,java.sql.ResultSet)
[javac] 位置 : org.postgresql.jdbc2.Array の クラス
[javac] return (java.sql.Array) new org.postgresql.jdbc2.Array( connection, i, fields[i - 1],
(java.sql.ResultSet) this );
[javac] ^
[javac] /usr/local/pgsql/postgresql-7.3.5/src/interfaces/jdbc/org/postgresql/jdbc2/
AbstractJdbc2ResultSet.java:424: 互換性のない型
[javac] 出現: java.sql.Statement
[javac] 要求: org.postgresql.jdbc2.Statement
[javac] return statement;
[javac] 注: 一部の入力ファイルは推奨されない API を使用またはオーバーライドしています。
[javac] 注: 詳細については、-deprecation オプションを指定して再コンパイルしてください。
[javac] エラー 11 個

BUILD FAILED
file:/usr/local/pgsql/postgresql-7.3.5/src/interfaces/jdbc/build.xml:104: Compile
failed; see the compiler error output for details.

Total time: 5 seconds
make[3]: *** [all] エラー 1
make[3]: 出ます ディレクトリ `/usr/local/pgsql/postgresql-7.3.5/src/interfaces/jdbc'
make[2]: *** [all] エラー 2
make[2]: 出ます ディレクトリ `/usr/local/pgsql/postgresql-7.3.5/src/interfaces'
make[1]: *** [all] エラー 2
make[1]: 出ます ディレクトリ `/usr/local/pgsql/postgresql-7.3.5/src'
make: *** [all] エラー 2
というエラーになってしまいました。
別PCで、
antやjdkのバージョンを同じ環境でテストしてみたのですが正常に
インストールできるのてしまいました。なぜ今回はできなかったのでしょうか?
アドバイスお願いできませんでしょうか?長くてすいませんでした。。。
633NAME IS NULL:03/12/24 22:23 ID:???
イヴに質問です。

PostgreSQL 7.3.4 を使って DBを構築してます。
全てのテーブルに update_time カラムを設けて、
そのレコードに UPDATE のSQLクエリが来た時は、
常に update_time カラムに更新された日時(CURRENT_TIMESTAMP)を入れたいです。

CREATE TABLE 時にこういったオプションはあるのでしょうか?

ON UPDATE というのがあるんですが、これは外部キーだけのようなので…。
634NAME IS NULL:03/12/24 23:22 ID:???
任意の乱数をn個まとめて得る SQL って書けますか?

 SELECT random() LIMIT 10;

ではもちろんダメですた…
635NAME IS NULL:03/12/25 00:15 ID:???
>>634
select random() from n行以上あるテーブル limit n;
こんなんじゃダメか?
636NAME IS NULL:03/12/25 00:19 ID:???
>>633
updateするときにupdate_timeもnow()で更新すればいいじゃないの。
637NAME IS NULL:03/12/25 00:51 ID:???
>>635
やっぱそれしかないっすかねぇ…

>>633
MySQLにするとか…
638NAME IS NULL:03/12/25 00:56 ID:???
>>637
つーか、一度に複数の乱数が要る(用意する)必要性がわからない。
639633:03/12/25 02:27 ID:???
>>636

UPDATE 時に update_time も CURRENT_TIMESTAMP でアップデートすればいいんですけど、
それを CREATE TABLE 時に設定して自動でいかないかなーと思ってました。
むりぽですかね…

>>637

MySQL ではそんなことできるんですか…!?
ってスレ違いですね。逝ってきます。。
640NAME IS NULL:03/12/25 09:50 ID:???
>>638
実際にはそのまま INSERT したいんでつ。

INSERT INTO table (column) SELECT 複数行;

みたいな感じで。

そういう意味ではいきなりランダムでなく、一旦 INSERT してから UPDATE でも
いいんでつが、そもそもダミーで複数行を SELECT する方法がわかりません。

諸般の事情のため、ファイルから COPY するというのは却下でお願いします。
最悪それしかないかとも思っていますが…

641NAME IS NULL:03/12/25 09:52 ID:???
>>639
MySQL の TIMESTAMP は常に現在時間

ポスグレでやるならトリガかな。
642NAME IS NULL:03/12/25 10:03 ID:???
>>640
まだ、なにがしたいかさっぱりわからん。
乱数のcolumnのみを持つテーブルが必要行いるってことかな?

なんか根本(設計)的に間違っているような気がする。
643NAME IS NULL:03/12/25 10:16 ID:???
>>642
つか君はわかったつもりで何にもわかってないタイプだな。
644NAME IS NULL:03/12/25 10:24 ID:???
>>642
ちょっと具体的には書けないんです、すいません。
フィールドはもちろん乱数だけではありません。
設計自体は普通だと思うのですが、運用が多分普通じゃないんだと思います。

要は管理者がブラウザでボタンをクリックすると、自動的に複数行の
レコードを作成する(しかもレコード数は任意)、みたいな仕組みを
作りたいのですが、やはり一旦外部ファイルを作成するか、
>>635みたいにダミーのテーブルを用意するしかないですかねぇ…
645NAME IS NULL:03/12/25 10:44 ID:???
乱数を複数レコード返す関数(ストアド)書きゃいいんじゃないの?
646NAME IS NULL:03/12/25 10:53 ID:???
>>645
えらい!そうです、そうでした… なんで気づかなかったんだろ、胃って期末
647NAME IS NULL:03/12/25 11:09 ID:???
>>643
そうかもしれん。いまだにさっぱりわからんw

乱数以外のcolumnに挿入すべき値が用意されているのなら、
乱数のcolumnはdefault randum()でいいような...
648NAME IS NULL:03/12/25 12:28 ID:???
>>644

ブラウザ使うなら、

>要は管理者がブラウザでボタンをクリックすると、自動的に複数行の
>レコードを作成する(しかもレコード数は任意)、みたいな仕組みを

ここまではブラウザ用のHTML作成するときにソフト(perl,PHP,servlet,etc...)で
乱数振ってテーブルに複数行INSERTしちまうってのもありでは?
649NAME IS NULL:03/12/25 14:00 ID:???
>>647
複数行というのが…

>>648
それでもいいんですけどね、時間かかるじゃないですか。
できれば SQL の中で完結したいんですよ。

ちなみに PL/pgSQL だと複数レコード返せなかったですね。
開発コスト考えると、ダミーテーブル用意するのが手っ取り早い気が
してきますた。
650NAME IS NULL:03/12/25 15:35 ID:???
>>649
その時間がもったいないほどパフォーマンスに影響するのかと小一時間。
651NAME IS NULL:03/12/25 16:09 ID:???
> ちなみに PL/pgSQL だと複数レコード返せなかったですね。
返せますけど。
652NAME IS NULL:03/12/25 17:05 ID:???
>>650
時間がもったいないとは、CGIプログラムを作るのにスキル的に時間が
かかるってことかもしれない。
653NAME IS NULL:03/12/25 18:26 ID:???
管理者がたまに使う程度の機能に、パフォーマンス気にしてもね。
654NAME IS NULL:03/12/26 00:04 ID:???
>>652
しかし実際にSQLでやろうとして時間を無駄にしてるし。
655649:03/12/26 00:21 ID:???
>>653がいいこと言った!

ちなみにこの処理、ボツになりました。今回は要らないそうです。
どうもお騒がせしました。


656NAME IS NULL:03/12/26 02:01 ID:???
>633
'now'
657NAME IS NULL:03/12/26 18:21 ID:???
psql で、全テーブルに対して権限を与える方法を教えてください。

GRANT ALL PRIVILEGES ON *.* TO `db_name`;

のように *.* や * では

ERROR: parser: parse error at or near "*" at character25
のようにエラーになります。

一括で権限を与えるにはどのように記述すればよいのでしょうか?
658NAME IS NULL:03/12/26 22:14 ID:???
>>657 ああ、俺も知りたい。なさげだよね。
659NAME IS NULL:03/12/27 14:26 ID:???
----------
MySQL で以下は問題なく動きます。
------------


<?php
header("Content-Type: text/xml");
?>
<?xml version="1.0" encoding="EUC-JP" standalone="yes" ?>
<?xml-stylesheet type="text/xsl" href="table.xsl" ?>
<result>
<?php
mysql_connect("localhost","root","root");
$rs=mysql_db_query("sample","SELECT * FROM master");
while($aryCol=mysql_fetch_assoc($rs)){
$aryKey=array_keys($aryCol);
print("<data>\n");
foreach($aryKey as $key){
print("<".$key.">".$aryCol[$key]."</".$key.">\n");
}
print("</data>\n");
}
?>
</result>

-----------
以上をpostgresSQLに接続させ表示させるには

-----------

<?php
header("Content-Type: text/xml");
?>
<?xml version="1.0" encoding="EUC-JP" standalone="yes" ?>
<?xml-stylesheet type="text/xsl" href="table.xsl" ?>
<result>
<?php
pg_connect("dbname=k user=k");
$rs=pg_query("select * from categ");
while($aryCol=pg_fetch_assoc($rs)){
$aryKey=array_keys($aryCol);
print("<data>\n");
foreach($aryKey as $key){
print("<".$key.">".$aryCol[$key]."</".$key.">\n");
}
print("</data>\n");
}
?>
</result>

--------------------

以上動かないので、間違っている点を誰か教えてください

660NAME IS NULL:03/12/27 14:27 ID:???
age
661NAME IS NULL:03/12/27 18:36 ID:???
connectの返り値とエラーコードをチェックしる

662NAME IS NULL:03/12/29 00:59 ID:7uvR8b1+
CREATE TABLE test ( timestamp timestamp );
こんなテーブルに
timestamp
-----------------------
2003-12-27 17:09:59+09
2003-12-27 18:15:12+09
2003-12-27 18:19:14+09
2003-12-27 23:40:40+09
なレコードが入ってるんですが、
これを時刻単位で集計して、

time | count
--------------+-------
2003-12-27 00 | 0
2003-12-27 01 | 0
2003-12-27 02 | 0
2003-12-27 03 | 0
2003-12-27 04 | 0
2003-12-27 05 | 0
2003-12-27 06 | 0
2003-12-27 07 | 0
2003-12-27 08 | 0
2003-12-27 09 | 0
2003-12-27 10 | 0
2003-12-27 11 | 0
2003-12-27 12 | 0
2003-12-27 13 | 0
2003-12-27 14 | 0
2003-12-27 15 | 0
2003-12-27 16 | 0
2003-12-27 17 | 1
2003-12-27 18 | 2
2003-12-27 19 | 0
2003-12-27 20 | 0
2003-12-27 21 | 0
2003-12-27 22 | 0
2003-12-27 23 | 1

みたいな感じで、時間単位で集計し、0件のところも表示したいの
ですが、どうすればよいでしょうか。

現在、下記のようにしてますが、0件の表示がもちろんできません。
SELECT to_char(timestamp, 'YYYY-MM-DD HH24') as time , count(*) from event group by time;
663NAME IS NULL:03/12/29 16:15 ID:SUbPADvC
しいていうなら、0から23までの値を1行ずつ格納した
1列24行のテーブルを作っておいてJOINするとか。
664NAME IS NULL:03/12/29 16:33 ID:???
ストアド使えばいいんじゃ・・・。何でもSQL一発でやろうとしない。
665きこあん:03/12/29 20:44 ID:???
substringで頭のほうだけでgroup化できない?
試してないけど。

group by substring(time,from 1 for 8)

みたいな感じで。やってないのでうまくいくかはわからんが
666NAME IS NULL:03/12/30 00:57 ID:???
662じゃないが
>>665 ちゃんと嫁
>>664 それもありだな。
あんまPostgreSQL使いはストアドとかいわないけど。
ドキュメントにもストアドなんて言葉出てこないし。
ちなみにちょっと前にplpgsqlで複数行返せないといってた
香具師がいたがあれはウソです。
ttp://ml.postgresql.jp/pipermail/pgsql-jp/2002-November/003257.html
667NAME IS NULL:03/12/30 01:03 ID:???
>>666
その香具師です。すんません。シーラカンス本第一版読んでました。失礼しました。
668NAME IS NULL:03/12/30 01:12 ID:???
>>666-667
ま、複数行返せるようになったのは7.3以後ね。
669NAME IS NULL:03/12/30 03:49 ID:???
PostgreSQLはちょっとのバージョン違いでそーとー機能変わるからなぁ。
670NAME IS NULL:03/12/30 11:27 ID:???
template1 に接続し、pg_database.datname で得られる DB の
テーブル名と、そこに含まれるカラムとそのデータを得る方法はありませんか?
671NAME IS NULL:03/12/30 13:03 ID:???
シーラカンス本で思い出したが新版いつでるんだろう。。。
もう第3版が出て2年以上たつけど
672NAME IS NULL:03/12/30 13:50 ID:???
本を出すタイミングとしては PITR に対応したあたりが丁度よさそう。
673NAME IS NULL:04/01/01 12:58 ID:yO6vqSyj
Postgreはリカバリ関係はどのように行うのですか?
ロールフォワードって対応されているのですか?
674NAME IS NULL:04/01/01 14:39 ID:???
>>670
ない
675NAME IS NULL:04/01/01 20:28 ID:???
>>673
ロールフォワードは実装されていない。
676NAME IS NULL:04/01/01 21:48 ID:???
リスタート時のログからのリカバリのredo処理のことなら実装されてるぞ。
WALがあるからにはredo実装しないと意味ないし。
undoは必要ないから実装されてないが。

チェックポイント以前のWALに関しては捨てられる(再利用に回される)から、
PITRには使われてない(PITRが実現されてない)。
677NAME IS NULL:04/01/01 21:52 ID:???
詳細は backend/access/transam/xlog.c の StartupXLOG() だな。
678NAME IS NULL:04/01/01 22:36 ID:k6svQpA+
>>676
WALってなんでしょうか??
679 :04/01/01 22:42 ID:???
>>678
Write Ahead Log
つーか、ぐぐれ。
680NAME IS NULL:04/01/01 22:48 ID:oVaNdYRg
そのredo処理はあくまでもインスタンス障害のリカバリであって、メディア
障害のリカバリではないんだよな。
それも広義のロールフォワードかもしれないけど、ふつうロールフォワードと
いったら、メディア障害に対してバックアップ/アーカイブログからのリカバリ
処理のことを言うと思うが。

ポイントインタイムリカバリというのは、さらに特定のポイントインタイムまでの
ロールフォワードを行うということだから、ちょっと意味合いが違う。
681NAME IS NULL:04/01/01 23:09 ID:???
「ロールフォワード」の意味するところって、
チェックポイント以降の更新レコードを
WALを使ってredo処理することだと思うだと思ってますた。

だから、

「リスタート時の自動リカバリ」、
「バックアップ時点から最新状態までの反映(アーカイブログ)」
「それの寸止め(PITR)」

の、どれもロールフォワードだと思ってますた。
682NAME IS NULL:04/01/02 00:31 ID:mdzOBQVK
Kさん 好循環  Aさん 悪循環  
 (健康体)  (喘息)

1.(神が喘息であるかないかを決める)

2.K 喘息でない人 A 喘息の人は
は体力がある    体力がなくなる

3.K        A 行動力、
          五感(嗅覚)が鈍り感性が変化する

4.K&A 神は異常な感性の人間は本来人に迷惑をかけ
るから外に出てはいけないと思っている。

5.K 変化なし   A アトピーになる

6.K 正常な感性  A 外に出なくなりさらに異常な感性になる

7.K 正常な人間   A 異常な人間(レッテル)
683NAME IS NULL:04/01/02 00:31 ID:mdzOBQVK
8.K&A 死

9.K&A      来世

10.K&A 神は異常な人間は人に迷惑をかけるので行動
を抑制する必要があると思っている。

11.K&A 神が喘息であるかないかを決める

12.K 喘息でない  A 喘息である

13.K&A    1.に戻る

これは事実。広めようぜ

解決法:寝て起きて、やな気分でも、続けるけること。
体力をつけると感覚が正常に戻り、
    アトピーも快癒に向かう。
    目安としてグランドを10週くらい。
あとはウォーキング
    2.3時間を目安にウインドーショッピングや本屋めぐり
684NAME IS NULL:04/01/02 00:33 ID:mdzOBQVK
 (健康体)  (喘息)

1.(神が喘息であるかないかを決める)

2.K 喘息でない人 A 喘息の人は
は体力がある    体力がなくなる

3.K        A 行動力、
          五感(嗅覚)が鈍り感性が変化する

4.K&A 神は異常な感性の人間は本来人に迷惑をかけ
るから外に出てはいけないと思っている。

5.K 変化なし   A アトピーになる

6.K 正常な感性  A 外に出なくなりさらに異常な感性になる

7.K 正常な人間   A 異常な人間(レッテル)
685NAME IS NULL:04/01/02 13:22 ID:/PhbzFDe
PostgreSQLはSQLServerなみに使えるんか?
企業でPostgreSQLを使っているとこって結構あるんですか?
686NAME IS NULL:04/01/02 14:13 ID:???
( ´д)ヒソ(´д`)ヒソ(д` ) <今時SQLServerだってサ…
687NAME IS NULL:04/01/02 14:22 ID:???
( ´,_ゝ`)プッ
688NAME IS NULL:04/01/02 17:21 ID:8W+JCqZ9
>>686
SQL Serverは今時なんだぁ。へぇ〜
689NAME IS NULL:04/01/02 17:31 ID:???
685ではない。

SQLServerは別に悪くないと思うけどなぁ。
MS製品でもSQLServerとExcelは悪くないと思う。
あとOEもデフォルトの設定を除けば悪くない。
(ああいう系のメールソフトで、あれ以上のものを見たことない)
ま、いいけど。

で、>>685
基本的にSQLServer並に使える。
690NAME IS NULL:04/01/03 09:01 ID:W6xNd8e6
最近postgresをいじりはじめたのですが・・・

rootでSSHに入って、
>psql -l
psql: FATAL: user "root" does not exist
と怒られてしまいます。
rootユーザなんて削除してないのに、、、。

ひょっとして、根本的なところで勘違いしてるのでしょうか・・・
どなたか教えていただければ幸いです。
691NAME IS NULL:04/01/03 09:40 ID:???
根本的な勘違いをしています。
システムのユーザーと、PostgreSQLのユーザーは違います。
createuserコマンドあたりを見るように。
692NAME IS NULL:04/01/03 10:41 ID:???
MS製品で最強なのは
プ ロ ジ ェ ク ト
693NAME IS NULL:04/01/03 12:58 ID:R8QdxRgC
694NAME IS NULL:04/01/03 13:28 ID:???
>>685
5W1H が必要なわけよ。
雑誌なり Web を見てご覧。
もりもり PostgreSQL 使われているから。
とりあえず公式サイトを見てみな。まずはそれから。
695NAME IS NULL:04/01/03 14:04 ID:???
>>690
どもです。やっとわかってきますた
696 :04/01/04 20:20 ID:XHsDwE5w
Kさん 好循環  Aさん 悪循環  
 (健康体)  (喘息)

1.(天国・霊界が喘息であるかないかを決める)
2.K 喘息でない人 A 喘息の人は
は体力がある    体力がなくなる

3.K        A 行動力、五感(嗅覚)が鈍り感性が変化する。
4.K&A 天国・霊界は異常な感性の人間は本来人に迷惑をかけ
るから外に出てはいけないと思っている。

5.K 変化なし   A アトピーになる
6.K 正常な感性  A 外に出なくなりさらに異常な感性になる。
7.K 正常な人間   A 異常な人間(レッテル)
8.K&A 死  9.K&A      来世
10.K&A 天国・霊界は異常な人間は人に迷惑をかけるので行動
を抑制する必要があると思っている。

11.K&A 天国・霊界が喘息であるかないかを決める 12.K 喘息でない  A 喘息である
13.K&A    1.に戻る

これは事実。広めようぜ
解決法:寝て起きて、やな気分でも、続けるけること。
体力をつけると感覚が正常に戻り、
アトピーも快癒に向かう。 目安としてグランドを10週くらい。
あとはウォーキング 2.3時間を目安にウインドーショッピングや本屋めぐり
鼻に変な違和感があったり、気分の悪い時は、
お腹の中の空気を出さなくてはならない。
口をしっかり閉じたまま、口の中に空間を作り、
口の中にできた空気を吐き出す。
これを100回から200回。
697NAME IS NULL:04/01/07 20:56 ID:???
>>690
なんにしろ、rootはpgsqlとは一切関わりないようにしといたほうがいいと思うが
698NAME IS NULL:04/01/08 00:59 ID:???
>>685
ttp://www.amazon.co.jp/exec/obidos/ASIN/4822223434/
この本にコニカのオンラインラボの事例とかが載ってる
699NAME IS NULL:04/01/08 07:36 ID:chRu+yOv
PostgreSQL ODBC ドライバは、ADO 経由で使うと使えるのに、
同じ接続文字列を ADOX の ActiveConnection プロパティに
代入したとたんにエラーになります。

エラーコード -2147352566
理由 Out of present range.

このエラーに関する情報ってなかなか見つからないんですよね。
ADOX で使えたらテーブルの作成とかも簡単にできるのになぁ。
700NAME IS NULL:04/01/08 19:22 ID:???
postgresql-7.3.4 を使っています。
しばらくvacuumdb をさぼっていたせいか、1Gbyte くらいのデータファイルが
いくつか出来上がってしまいました。サイズを縮めたいのですが、
max_fsm_pages に1000000000/8192*10 の数値を指定して
vacuumdb -f -a するだけで良いのでしょうか?
マニュアルを読むと、REINDEX じゃないと削ってくれない領域がある
ようにも取れるのですが・・・。
701NAME IS NULL:04/01/09 09:44 ID:???
いつも vacuumdb -f -a だけ。
reindex して壊れるわけでもなし、試して結果を公開してよ。
702NAME IS NULL:04/01/09 15:32 ID:???
>>701 あう・・ 了解しました。今晩遅くに実行してみます。
703NAME IS NULL:04/01/09 20:18 ID:???
>>702 よろしくー。
704NAME IS NULL:04/01/10 11:18 ID:p5AcCRjd
一度作成したデータベースのエンコードを変更することは
出来ないんでしょうか?
705NAME IS NULL:04/01/10 13:57 ID:???
PostgreSQLで、データベースパスワードとpostgres(ルートユーザ)のパスワードのかけ方がわからず、
ネット検索は、断念・・・
Amazon.co.jpで、シーラカンス本を購入・・・
PostgreSQLにもSQLServerのようなGUIマネージャがホスィよ
かといって、Oracleみたいなごちゃごちゃしててわかりずらく、糞重いのは勘弁・・・
706NAME IS NULL:04/01/10 14:39 ID:???
>>705 断念はやすぎ、マニュアル嫁。
707NAME IS NULL:04/01/10 15:43 ID:???
708NAME IS NULL:04/01/11 03:25 ID:???
709NAME IS NULL:04/01/11 04:56 ID:M1e9HI0k
705
とりあえずwebminからでも操作しろ。
俺はかなり楽になった。
相変わらずテーブルの作成でコケてるが(わかってない)
710NAME IS NULL:04/01/11 23:29 ID:???
マシンを買い換えたのでwin版postgresを落としに行ったら
もうダウンロードできなくなったの?
つーか有料版オンリー?
711 :04/01/12 00:16 ID:Qdx2iOKd
>>710 Windows だったら MSDE でいいじゃん。
712NAME IS NULL:04/01/12 00:30 ID:???
>>711
じゃofficeくれ
713NAME IS NULL:04/01/12 00:39 ID:???
>>712
バカかおまえは。

無料で公開されて居るんだから拾ってきなさい。
714NAME IS NULL:04/01/12 00:41 ID:???
>>711
それ答えになってないじゃん。

>>710
有料版しかないから、素直にcygwin入れれ
715NAME IS NULL:04/01/12 01:36 ID:???
>>714
710じゃないけど710の書き込みをみて、ring鯖からcygwin版バイナリが見当たらなかった。
某ネイティブ版はあったけど。
716NAME IS NULL:04/01/12 01:44 ID:???
>>715
ソースからじゃまずいのか?
ソースは落とせるだろ
717NAME IS NULL:04/01/12 12:18 ID:go8WkgCe
ぽすげれすきゅーえる なんてやめたほうがいい
SQLサーバDeveloperEditionなら5000円で買えるよ
718NAME IS NULL:04/01/12 12:23 ID:???
>>717
実運用は?

DEでも5000円もかかるし。10台にインストールしたら50000円か。
719NAME IS NULL:04/01/13 21:25 ID:OWM2TxrV
アクセスの.mdbをPostgreで使えるようにコンバートする事は出来ますか?
具体的には勉強用にNorthwindを使いたいのです。

アドバイスよろしくお願いします。
720NAME IS NULL:04/01/13 22:29 ID:iZxk1Ltn
CSVにして、インポートとか
ADO通すとか、
いろいろあると思う
721NAME IS NULL:04/01/13 23:49 ID:YQxfit1L
ResultSet rs = db.getResultSet("update hoge set hoge=1 where hogehoge='uma-'");

Javaで上記のようなSQLを発行した場合、何件Updateされたかを
知る方法はありますか?
DBのバージョンは7.3.xです。
722NAME IS NULL:04/01/14 01:50 ID:???
>>715
cygwin使ってso-netからpostgresのバイナリ落とせたぞ。
723NAME IS NULL:04/01/14 01:51 ID:???
>>721
おまえJavaの勉強し直し。むしろ板違い。
724NAME IS NULL:04/01/14 02:23 ID:???
dbってのは何のインスタンスなんだか
725715:04/01/14 08:35 ID:???
>>722
so-netのring鯖みたけど、sygwinのバイナリ見当たらないYO。

いや、まぁ俺はそんなものどうでもいいんだ。
715の時は、>>710がどのバイナリを指しているかわからない。Win版バイナリといっても、
cygwin用バイナリ。
PowerGres
WinNative版
の3種類あるからな。
726 :04/01/14 12:40 ID:???
>>715
Cygwin + PostgreSQL
Cygwin 1.5.5-1 の PostgreSQL 7.4-1の初期設定を行います。
http://discypus.jp/pc/cygwin/postgresql.shtml
727NAME IS NULL:04/01/14 21:00 ID:???
>>725
ring.so-netからpostgresql 7.4.1-2 バイナリ落とせたよ。
728NAME IS NULL:04/01/15 09:16 ID:???
てめえら、素直にsetupでインスコしろよ
729NAME IS NULL:04/01/15 13:21 ID:???
えー データベースファイルが肥大したので、vacuumdb -a -f をしたいが、
マニュアルを読むとREINDEX も必要っぽいけど、どうなの??とカキコした者です。

実際にREINDEX を実行してみましたが、ファイルサイズに大きな差は
見られませんでした。しかしながら、vacuumdb -a -f した直後でも
わずかに容量が減りましたので、VACUUM FULL 以外にREINDEX は
必要っぽいです。ほんとにわずかですが。。。

相変わらず1ギガ超のファイルはそのまま残ってました。
こんなに使ってたのか・・・。
730NAME IS NULL:04/01/15 13:51 ID:???
>>730 へぇー。勉強になった。
あとはDB内のデータの持ち方だよね。
zipというカラムに「〒123-4567」とあったり、
sexに「男」「女」とあるDBがあった。
zipは「123-4567」、sexは0,1とかすれば小さくなるし。
731NAME IS NULL:04/01/15 14:16 ID:???
>>730
>zipというカラムに「〒123-4567」
問題外です

と言いたいが、実際そういうの多いよな
732NAME IS NULL:04/01/15 17:21 ID:???
男・女はどうして、付け合わせるパワー(時間)がもったいないから
正規化しないということはあるよね。

〒123-4567は問題外。
733730:04/01/15 17:21 ID:???
>>731 多いよー。
そこは数万件たまった Access を PostgreSQL に移行する仕事。
都道府県で集計取りたいというのに zip と address しかカラムがなくて address は
札幌市...
北海道札幌市...
東京都港区...
中央区...
みたいに都道府県ありなしがバラバラ。
電話番号も 03-1234-5678(内線5), 03(1234)5678(○○様) とか文字入り&フォーマットばらばら。
各地の支店の人がエラーチェックなしのフォームに思い思いの入れ方してたからね。
734730:04/01/15 17:23 ID:???
>>732
駆け出しのころ、郵便番号は 3 桁と 4 桁の必須チェックをして
海外の zip が入らない、というミスをしたなぁ。
735NAME IS NULL:04/01/15 19:16 ID:???
>>733
どういう項目が入力されるのか(必要なのか)の検討が甘かったということだろうね。
内線や担当者のコラムを持つべきだったとか、都道府県名は別コラムとかね。

でも往々にして甘くなるんだよなあ・・・
それに後から集計単位が追加されることもあるから一概に責められない。
というか、責めないでくれ頼むから(泣
736NAME IS NULL:04/01/16 03:19 ID:???
正規化しすぎたために、left join をしまくらないと名称が持って来られなくなってしまい
テーブルのエイリアスをAから順につけてSまで行ったときは嫌になった。
737730:04/01/16 11:44 ID:???
>>735
うむ。責められない。
会社の合併や市町村統廃合、姓と名を各40byteにしていたら
インド人の名前が入らなかったり、といろいろ経験しないと見えてこないよね。
>>736
エイリアスを a, b, c や t1, t2, t3 とかよく見るけど、
せめて 2, 3 文字の意味ある名前にしてほしいな。引き継いだ時の保守が楽になるので。
例えばテーブル名 customer を a や t1 ではなく cu、position を pos など。
t1 〜 t23 までのを見たことあるよ。
738735(=732):04/01/16 14:45 ID:???
>>737
>インド人の名前が入らなかったり
名前にシングルクォーテーションがある人のことなんて普通考えないしね。
Del'Angeloさんにはまいったよ(外資系じゃなかったし)。
ま、これはテーブルの設計じゃなくてInsert文を作るルーチンが悪かったんだけど。

>せめて 2, 3 文字の意味ある名前にしてほしいな。
これはやるだけで全然違うよね。どのテールブルを指してるのか
想像しやすいし、複数の問い合わせ(ビューでも)で名前が統一される
ことにもなるし。

739NAME IS NULL:04/01/16 14:58 ID:???
>>737
「テーブル名は全て『○○TBL』」「○○は五文字以内」という規約があり
「○○」部分をローマ字の母音抜きで表す、たとえば
「取引先テーブル」を「TRHKSTBL」とかつけられてる
そんなテーブルばかりだと
そんな気力はなくなります
かしこ
740735:04/01/16 15:08 ID:???
>>739
確かにそういう規約もあるなあ。
コラム名も全部頭からの連番(c001,c002とか)で、
テーブルが変わると同じ項目でもコラム名が変わっちゃうし
対応表がないと何がなにやら分からんしで、大変だった覚えがある。
741730:04/01/16 16:44 ID:???
>>738
' が問題ではなく 40byte 以上の名前だったのです。世界は広い。

>>739
会社独自の変態コーディング規約は困るね。
20年前じゃないんだし、変に略したりケチるのは害悪ですね。

ただ、そんな我社も text 型が使えない。
Oracle や SQL Server への移行の可能性を考えて varchar のみ。
742735:04/01/16 17:44 ID:???
>>741
>' が問題ではなく 40byte 以上の名前だったのです。世界は広い。

ごめん、自分の失敗のことしか頭になかった。
743NAME IS NULL:04/01/17 00:19 ID:???
>>739-740
激しく同情
xxx_ID, xxx_CD, xxx_CODE, xxx_NO, xxx_NUM
とかごちゃまぜになったりとかは見かけるね。
コーディング規約はよく見かけるけど、
テーブルやフィールドの命名規則って見かけないもんなぁ。
744NAME IS NULL:04/01/17 01:03 ID:???
PostgreSQL は _idx や _seq, p_ なんてのを付けるね。
745NAME IS NULL:04/01/17 01:59 ID:???
>>743
金融とか証券とかは多いよ>テーブルやフィールドの命名規則
ふた昔も前のメインフレームを殺せないからそうなっちゃうんだけど。
746NAME IS NULL:04/01/17 02:16 ID:???
>>745
>ふた昔も前のメインフレームを殺せない

というよりもそれに馴染んだもと開発者どもが譲らないんだよな。


ああ、それを「殺せない」って書いてるのか。
747NAME IS NULL:04/01/20 16:48 ID:???
保守
748NAME IS NULL:04/01/21 21:23 ID:???
「スキーマ」は具体的にどういう時に使うと便利なんでしょうか。
749NAME IS NULL:04/01/21 22:39 ID:???
>>748

お金が無くて、テスト機を用意できないとき
750NAME IS NULL:04/01/21 22:48 ID:???
>>748
アクセス権限のコントロール、、、ぐらいしか思い浮かばない。
751NAME IS NULL:04/01/21 23:26 ID:???
>>748
基本的には別システムを構築するんだけど、
場合によっては連係が必要な場合があるときに便利だと思うよ。
DBを分散させちゃうとトランザクションとかややこしいことになるしね。
もちろんメリット・デメリットがある話だから良く考える必要あるけど。
752750:04/01/21 23:27 ID:???
>>751
日本語がわかりづらかった。
一行目
「基本的に、別システムなんだけど、」
753NAME IS NULL:04/01/22 02:17 ID:???
>>748
あるいは、テーブルの所属を明確にするということかな。
サーバは1台でもアプリは複数あるかもしれないし、
アプリが1つでも日替わりデータとマスタを分けた方がいいこともあるだろう。

偉そうなことを書くけど、そこにある機能をどう使うかだと思うよ。
お勉強用サーバならお勉強する人の名前を付けるのもすごく便利。
754NAME IS NULL:04/01/22 02:26 ID:???
スキーマ変えると、プログラムの中に書いてるSQLも修正しなくちゃいけなくなるから
それだったら全く同じテーブルを用意したデータベース一個作っちゃった方が楽なんだよね。
データベース変えるだけなら接続先情報変えるだけで済むし。
755NAME IS NULL:04/01/22 02:29 ID:???
>>754
そういうあなたのためのSET search_path TO hoge
756NAME IS NULL:04/01/22 02:39 ID:???
>>755
だから、それじゃだめだろ
複数のチームがそれぞれ別のデータでテストしたい場合はどうすんだよ

チームAは1000000件のパフォーマンス調査
チームBは○○機能の結合テスト(専用データ)
チームCは××機能の結合テスト(専用データ)
チームDはモジュール単位の不具合対応(単体テスト用データ、整合性考えずに手動でどんどん動作確認用データ追加)
こういうときがあるから
757NAME IS NULL:04/01/22 02:48 ID:???
>>756
ああ、そういう場合か。
そういう場合はDB分けた方がいいね。
そういう用途にスキーマ使うのはなんか違う気がするし。
俺が言いたかったのは>>751のケースでした。
失礼しました。
758753753:04/01/22 02:54 ID:???
>>754
もちろん、設計段階でそういう構造にするべきだろうね。
途中から変えるのは大変だと思うよ。

>>756
そういうときは(スキーマとかにとらわれず)そういうときに応じたものを作るべき。
俺が>>753で書いたのは「こういう使い方もできますよ」ということね。
だから「こういうときにはそれじゃだめ」といわれても困るよ(w

繰り返すようだけど、ある機能があったら、それをどう便利に使うかと
どういうときに使うべきではないかを考えるのが吉じゃないかな。
スキーマという機能はどんなときに使えるかということに皆答えてるわけだから
個別のケースは抜きにしたい。
759753753:04/01/22 02:55 ID:???
ごめん>>758はもちろん>>753
760753:04/01/22 02:56 ID:???
ごめん・・・
761NAME IS NULL:04/01/22 02:58 ID:???
やだね
762NAME IS NULL:04/01/22 02:58 ID:???
深夜に急に活発だな。
3人はいそうだ。
763NAME IS NULL:04/01/22 02:59 ID:???
すいませんすべて自演でした
764753:04/01/22 03:06 ID:???
実際何人いるんだ?
765753:04/01/22 03:17 ID:???
僕一人ですけど、一応質問してみました。
766NAME IS NULL:04/01/22 03:26 ID:???
スキーマのアドバイスをした人二人と、
なんか勘違いな反応をした人一人と、
少なくとも三人はいるな。

もう、寝たかもしれんが。
767753:04/01/22 03:35 ID:???
>>766
もう何人いるんだか(w

といっても俺のブラウザだと>>764>>765は区別がついたりするんだが。
768NAME IS NULL:04/01/22 03:48 ID:???
>>767
ああ、Navi2chだと区別がつくな
769NAME IS NULL:04/01/22 03:54 ID:???
>>767-788
なんでなんで?
俺もnavi2chだけど全然わからん。
770748:04/01/22 09:49 ID:???
スキーマの元質問者です。イメージが掴めました。ありがとうございました。
771NAME IS NULL:04/01/22 10:13 ID:???
マジか
772NAME IS NULL:04/01/25 00:23 ID:IMLQDJ4u
列の領域を拡張したいんだけど、
やり方がわからん。
773NAME IS NULL:04/01/25 01:14 ID:???
>>772
psqlで
\h alter table
してみよう。
774NAME IS NULL:04/01/26 18:53 ID:05VDMtbF
データベース内の一つのテーブルだけを、
pg_dumpのようにバックアップ取りたいんですけど方法はありますか?
775NAME IS NULL:04/01/26 19:06 ID:kvn9DY8q
pg_dump -t
776774:04/01/26 20:29 ID:05VDMtbF
thx
777NAME IS NULL:04/01/27 19:55 ID:???
他のユーザーにDBのすべての権限を与えるにはどうするの?
table毎とかしかやり方が見つからない
778NAME IS NULL:04/01/27 21:06 ID:???
>>777
ないね。grant all on * to user できるといいのに。
779NAME IS NULL:04/01/27 22:06 ID:l591xAXQ
MD5ハッシュ値とかの、多バイトデータって皆さんどうやって格納してらっしゃるんですか?
780NAME IS NULL:04/01/27 22:09 ID:???
>>779
text
781NAME IS NULL:04/01/27 22:38 ID:l591xAXQ
>>780 げ、やっぱりそうなんですか…
128ビット整数とかの型はないんですか?
782NAME IS NULL:04/01/27 22:51 ID:???
>>781
お前さぁ、仮にそれがあったとして、効率いいと思う?
まぁ試しに number とか使ってみたら?
783NAME IS NULL:04/01/28 00:39 ID:???
配列を含むカラムを group by したいときはどうすればいいですか?無理ですか?
784NAME IS NULL:04/01/28 01:42 ID:???
設計が糞
785NAME IS NULL:04/01/28 09:57 ID:???
配列型を使ったことないけど、
Web のチェックボックスのデータを格納するのにいいなぁ、と思ってる。
使っている人いる?問題点があれば聞きたい。
786NAME IS NULL:04/01/28 10:15 ID:???
別テーブルにすればいいのに
787NAME IS NULL:04/01/28 10:59 ID:???
>>785
group by できない
ただ、別に配列の要素を個別に取り出すということをしないのなら text でも充分

>>786
create table parent (
  id serial,
  attr int[]
);
create tabel child (
  child_id serial,
  parent_id int,
foreign key (parent_id) references(parent, id)
);
みたいなテーブルがあって、parent の一覧と、それにぶらさがる child の数を出したいんです。

select p.id,p.attr,count(c.child_id) from parent p left outer join child c on c.parent_id = p.id group by p.id,p.attr;

やっぱ配列使った時点でマズーだったですか?

788NAME IS NULL:04/01/29 15:24 ID:???
多分ね。
789NAME IS NULL:04/01/30 00:01 ID:???
790NAME IS NULL:04/01/30 20:37 ID:40bIuutY
7.4系使ってると、普通User認証ってMD5使うよね?
もちろん7.4.1のJDBCドライバってMD5暗号化に対応してるよね?
なにせ、俺には確認する技術が無いため、ちょっと不安です。
791NAME IS NULL:04/01/31 08:03 ID:0XWRRZlI
INSERT されたときの serial の値を取得したいのですが、どのような方法がスマートでしょうか?

LOCK
INSERT
SELECT currval('hoge_seq');

くらいしか思いつかなかったけどこれでいいのかしら....
792NAME IS NULL:04/01/31 12:56 ID:???
>>791
insertしたレコードのoidを取得して、select
793NAME IS NULL:04/01/31 13:06 ID:???
漏れは

$seq = SELECT nextval('t1_hoge_seq');

してから

INSERT INTO t1 (hoge) VALUES ($seq);

ってやってる。
794 :04/01/31 16:31 ID:???
>>791
ふつー SELECT currval('hoge_seq');
795NAME IS NULL:04/01/31 16:47 ID:???
so-ka?
796NAME IS NULL:04/01/31 18:21 ID:???
gakkai?
797NAME IS NULL:04/02/01 09:33 ID:???
senbei?
798NAME IS NULL:04/02/01 12:49 ID:n6BRvHRb
SELECT * FROM table WHERE fname = 'あああ'
とやると fname に全角 3 文字が入力されている全てのレコードが出てきてしまいます。
SELECT * FROM table WHERE fname LIKE 'あああ'
ならば fname が 'あああ' のレコードのみ取得できます。
こういうものなのでしょうか?

ちなみに fname の属性は以下のとおりです。
fname | character varying(256) | not null
Indexes: table_fname_idx btree (fname)

バージョン
fedora-1
postgresql-7.3.4
799NAME IS NULL:04/02/01 15:41 ID:???
char型の配列で定義されてる列の末尾にデータを挿入したい場合って
何かスマートな方法あります?

SELECT array_dims(hoge) FROM mytable;
して返ってくる値は 1:50 のようにコロンで区切られてるので、そいつを分解して
50 に 1 を足してそこに挿入。としてるんですが。。
800NAME IS NULL:04/02/01 17:01 ID:???
俺なら文字列を分解しようとせず、カラムを分解する。
801NAME IS NULL:04/02/01 17:45 ID:???
唐突で申し訳有りませんが
Windows上で動くPostgreSQLはいつごろ出て来るのでしょうか。
802NAME IS NULL:04/02/01 17:59 ID:???
誰か、SFUでPostgreSQLコンパイルした香具師いないの?
803NAME IS NULL:04/02/01 18:33 ID:jqi2fyXh
postgres7.1 を使用しています。

テーブル作成後にカラムに not null を設定したいのですが、
ALTER TABLE で default などは設定できるのですが、
not null が設定できません。

どなかた教えてください。
804NAME IS NULL:04/02/01 18:52 ID:???
何か、.....な輩が混入してるな。
ポスグレファンよ、自由を守ろう。


805NAME IS NULL:04/02/01 18:53 ID:???
無理。
806NAME IS NULL:04/02/01 18:55 ID:???
>>803
別にpostgresは関係ない。SQL勉強しろフンカス
807NAME IS NULL:04/02/01 18:59 ID:???
あえてPostgreSQLと言うなら、\h ALTER TABLE
808NAME IS NULL:04/02/01 19:17 ID:???
あるテーブルのレコードの保存件数をMAX10件にして、
11件目が登録されたら一番古いレコードを消したいのですが、
SQLでどうあらわせばいいのでしょうか?

新しい順で10件目以降をとってくるSELECT文とLIMITの組み合わせだとは思うんですが…
ちなみに insert する時はデフォルトで CURRENT_TIMESTAMP を update項目に入れてます。
809NAME IS NULL:04/02/01 19:32 ID:???
すいません、意味わからなかったですね。
id | update
--+------
int| timestamp

のテーブルがあるときに、
update の新しい順で、10件以降をSELECTしたいです。
10件であれば、
select * from table order by update desc limit 10;
でいけるんですが、
10件目以降というのはどうやって表現していいのか悩んでます。
810808:04/02/01 19:37 ID:???
offset っていうのがあったんですね・・・すいません解決しました。
811NAME IS NULL:04/02/01 23:57 ID:???
Postgresで年間2000万〜3000万件ほどレコードが入るシステムを運用しています。
過去データはそれほど必要ないのでdeleteして800万件。
data領域をduでみると12GB程。数時間かけてvacuumdb -fしたら8GBになりました。
しかし、データベースをdropしてdumpデータからインポートしてみたら3GBにしか
なりませんでした。dumpファイルは800MBちょいです。

過去データを定期的に削除しながら運用しているのですが、Postgresでは
不要な領域を綺麗に削除するには一度DBを止めるしかないのでしょうか。
インポートには30分くらいですが、それでも保守チームに手順書提出して
定期作業として組み込んでもらわないといけなくなるので面倒だなあ・・
(スクリプトでもできるけど途中で失敗したときのことを考えると、
drop-importは手動じゃないと不安)

#そもそもそんなシステムにPostgres使うなっていう突っ込みは無しの方向で
812NAME IS NULL:04/02/02 00:11 ID:???
そもそもそんなシステムにPostgres使うな
813811:04/02/02 00:30 ID:???
>>812
ありがとう。愛を感じたよ。

DBを決めた無能管理者が偏屈でさあ。DB代ケチるより遊んでる外注を
一月早く切ればOracleSEのCPUライセンスが買えるのにね。
814NAME IS NULL:04/02/02 00:59 ID:???
あのぅ…現在接続中のクライアントのIPアドレスを得る関数なんて…
ないですよね…
815NAME IS NULL:04/02/02 01:04 ID:???
>>814
Oracleならあるんだけどねえ。
pg_XXX,pga_XXXのテーブルを覗いてみたけどそれらしいものも無し
816811:04/02/02 01:12 ID:???
ついでにグチらせて
おれこのシステムの担当じゃなかったんだけど、あまりに更新が遅くなって
借り出されたんだわ。担当のやつじゃ手に負えない程ひどいソースだったから。
元外注が作ったプログラムが駄目すぎで整理したらソースのサイズは半分くらいに
なった。まだ無駄が多いけど最大のボトルネックはやっつけたし大分サクサク
動くようになった。2日で直せって言われてたからこれ以上時間かけらんないし。
あーなんだPostgresでも結構いけそうだなあというのは実感としてあるんだけど
環境周りもしっかりしてくれたらなあ。
817NAME IS NULL:04/02/02 01:28 ID:???
>>815
ですよねぇ。せめて環境変数にでも設定してくれれば方法もあるんですけどねぇ…
残念ですが、他の方法を考えることにします…
818NAME IS NULL:04/02/02 01:29 ID:???
>>816
おまえは賢い!
819NAME IS NULL:04/02/02 01:57 ID:???
>>817
アプリ経由で接続させてるなら、セッションテーブル作ってログイン時に
書き込むようにすれば管理できるよ。psqlでの接続も監視したいっていうなら
無理だけど
820NAME IS NULL:04/02/02 02:14 ID:???
>>819
アプリというのはWebアプリという意味ですか?
でしたら残念ながらWebじゃなくてWindowsから直接なんです(libpq.dll使用)。
821NAME IS NULL:04/02/02 09:52 ID:???
>>820
>>819じゃないけど。
別にWebアプリじゃなくても、動いてる端末のIPを取得できれば
それを書き込めばいいんじゃない?
サーバ側じゃなくてクライアント側で書き込むということね。
つまり、作るアプリにそういう機能を持たせるってこと。
822NAME IS NULL:04/02/02 10:28 ID:???
おはようございます

>>821
LAN内なんですよ(サーバは外)。
プライベートなアドレスもらってもあんまり嬉しくないもので…
823NAME IS NULL:04/02/02 11:09 ID:???
>>822
ああ、なるほど。
じゃ、ルーターなりなんなりにIPを問い合わせるか、サーバ側にもアプリを置くか
しかないかな・・・
824NAME IS NULL:04/02/02 11:33 ID:???
>>814
netstatとかじゃだめなの?
825NAME IS NULL:04/02/02 11:43 ID:???
>>823
WindowsからグローバルIPを調べるのはちょっと難しいですねぇ。
仕方ないので http で PHP を叩こうかと思っています。

>>824
自分がどの postmaster かわかんないですよね。

できれば仮に remote_addr() という関数が用意されてたとして、

INSERT INTO t1 (atime, remote_addr) VALUES (now(), remote_addr());

みたいなことができれば一番いいんですが…
826NAME IS NULL:04/02/02 13:01 ID:???
あるファイルのパスが格納されるテーブルがある時に、
そのテーブルのレコードを削除すると、自動で、
ファイルのパスを見てそのファイル自体も削除させることってできまつか?
827NAME IS NULL:04/02/02 15:24 ID:???
>>826
基地害はこの世から削除されろ
828NAME IS NULL:04/02/02 15:54 ID:???
>>826
トリガとプロシジャを書けばいいんじゃない。
829NAME IS NULL:04/02/02 18:03 ID:???
>>828
ありがとうございますー。
トリガでシステムコマンドは使えるのでしょうか?
ちょっと調べてみまつ。
830NAME IS NULL:04/02/02 18:28 ID:???
>>829
ファイルを消す権限が問題になるかもね。

ファイルを消してから該当レコードを消す、という方法なら簡単そう。
831125 ◆GtEFAD0xKE :04/02/03 07:48 ID:???
>>277
ワラタ

ところではなしは変わるけど、携帯ゲーム機"プレイステーションポータブル(PSP)

 久夛良木氏は,“PSPはゲーム業界が待ち望んだ究極の携帯機”として説明。「ここまでやるかと言われるスペックを投入した」という。
 発表によれば「PSP」は,曲面描画エンジン機能を有し,3Dグラフィックでゲームが楽しめる。
7.1chによるサラウンド,E3での発表以来,クリエイターたちにリクエストが高かった無線LANも搭載(802.11)。
MPEG-4(ACV)による美しい動画も楽しめるという。これによりゲーム以外の映画などでのニーズも期待する。
 外部端子で将来,GPSやデジタルチューナーにも接続したいとする。
また,久夛良木氏は,繰り返し「コピープロテクトがしっかりしていること」と力説。会場に集まった開発者たちにアピールしていた。
 さらに,ボタン設定なども明らかにされ,PS同様「○△□×」ボタン,R1・L1,アナログスティックが採用される。

この際、スク・エニもGBAからPSPに乗り換えたらどうでしょう。スク・エニの場合、PSPの方が実力を出しやすいような気がするんですが。
任天堂が携帯ゲーム機で圧倒的なシェアをもってるなら、スク・エニがそれを崩してみるのもおもしろいですし。かつて、PS人気の引き金となったFF7のように。

突然変な事いいだしてすまそ‥
GBAとくらべてみてどうですかね?シェアのことは抜きで。
832NAME IS NULL:04/02/03 09:30 ID:???
皆さんどうですかね?
833NAME IS NULL:04/02/03 09:37 ID:???
>>825
ユーザ定義関数を作るしかないかな。
834NAME IS NULL:04/02/03 18:02 ID:???
>>811 max_fsm_pages が足りてない為に大きいファイルが処理されなかった、
って可能性は無いですか?
835811:04/02/03 22:53 ID:???
ちょっとmax_fsm_pagesについて調べてみました。
vacuumdb -f でも領域が小さくならなかったから、max_fsm_pagesじゃなくて
indexの肥大化だったのかなあ。数百万件ずつdeleteしてたし
836NAME IS NULL:04/02/04 00:30 ID:fFY5eBen
>808

create or replace function の中でINSERTとDELETEを実行してみよう。
837NAME IS NULL:04/02/05 00:27 ID:???
>>801
あるよ
838NAME IS NULL:04/02/05 00:51 ID:???
相手すんなよ糞が
839NAME IS NULL:04/02/05 09:16 ID:???
>>801
SRA が PowerGres という商用版を出してるし、
それの元になったのもあるし、
cygwin は不安定ながら 7.4.1 も出てるし、
本家も 7.5 で Windows ネイティブ対応されるかも。
840NAME IS NULL:04/02/08 23:57 ID:???
PostgreSQLは無料で使えるから良いのであって
金払わなきゃいけないのならMySQL使います。
841NAME IS NULL:04/02/09 02:45 ID:???
それならMySQLをお使いになるのがよかろう。
「金払わなくてもいい」ソフトはいくらでもあるよ(w
842NAME IS NULL:04/02/09 07:53 ID:???
>>840
金を払いたくないのにOSはWindowsなんですね。
843NAME IS NULL:04/02/09 09:49 ID:???
金は払いたくないし苦労もしたくないんじゃ
何使っても結果は同じじゃないか?
844NAME IS NULL:04/02/09 17:10 ID:WTc6t5Mn
結局7.4でWindowsネイティブ対応の話はなくなったの?
845NAME IS NULL:04/02/09 17:26 ID:???
やる人がいないから、という所だよね。
SRA の人たちが PowerGres の知見を活かしてくれるといいのだけど。
って PowerGres は使い物になるんですかね?
846NAME IS NULL:04/02/09 18:00 ID:NBLSvdEs
>>842
Windowsなんてピーコでどっからでも手に入りますが、何か?
847NAME IS NULL:04/02/09 18:32 ID:???
やれやれだな。
848NAME IS NULL:04/02/09 20:01 ID:p8BdgULW
PostgreSQLとMySQLはどっちが安定してるの?
849NAME IS NULL:04/02/09 20:23 ID:???
なにするかによるんじゃない?
848のような質問するレベルの人が使う範囲では、どちらも安定してる。
850NAME IS NULL:04/02/09 20:36 ID:???
同感。なのでトリガ&プロシジャを使うか、
ライセンスは大丈夫か、じゃないかな。
851NAME IS NULL:04/02/11 18:55 ID:zYAvEpnO
あるスキーマに
user1
user2
user3
....
というテーブルらがあるのですが、
select count(*) from user1;
select count(*) from user2;
select count(*) from user3;
....
を どうすれば view などにできますか?
852NAME IS NULL:04/02/11 19:18 ID:???
union
853NAME IS NULL:04/02/11 19:22 ID:???
とりあえず一発で持ってきたければ
select * from
(select count(*) as count1 from user1) user1,
(select count(*) as count2 from user2) user2,
(select count(*) as count3 from user3) user3
だけどビューにしたかったら適当にやって
854Posgre初心者:04/02/11 21:21 ID:FUtlNjt5
現在 Windows2000 SERVER 上でPostgreSQLを動作させる為にソフトのインストールを行っています。
cygwin 2.416
cygipc 1.14
postgresql 7.4.1
を使用しています。
Windows2000 PRO では問題なくインストール出来て動作していますが
Windows2000 SERVERだと initdb -E EUC_JP を実行した時
fixing permissions on existing directory /usr/local/pgsql/data... ok
creating directory /usr/local/pgsql/data/base... ok
creating directory /usr/local/pgsql/data/global... ok
creating directory /usr/local/pgsql/data/pg_xlog... ok
creating directory /usr/local/pgsql/data/pg_clog... ok
selecting default max_connections... 10
selecting default shared_buffers... 50
creating configuration files... ok
creating template1 database in /usr/local/pgsql/data/base/1... FATAL: could not
create shared memory segment: Function not implemented
DETAIL: Failed system call was shmget(key=1, size=1081344, 03600).
と言うエラーが出て失敗します。
initdb を行う前にipc-daemon2 & も実行していてタスクマネージャーのプロセスで
起動しているのは確認できています。
またipc-daemon2 & を実行していなくても同じメッセージでエラーになります。
cygipcの設定等でSERVER用に何かあるのでしょうか?
同じ方法でインストールした2000PRO(プロフェッショナル)では問題ないので
困っています。どなたか判る方いませんでしょうか?

855Posgre初心者:04/02/14 20:34 ID:K8DOvVy5
自己レスです。
cygwinのバージョンがWindows2000 SERVERが1.5.7、
Windows2000 PROが1.5.5でした。
一日違いのインストールで何故Windows2000 SERVERが1.5.7で
Windows2000 PROが1.5.5になってしまったかは分かりません。
ただWindows2000 SERVERにcygwin 1.5.5をインストールすれば
問題なく動作しました。cygwinはsetup.exeでインストールしているので
自動で最新がインストールされていると思っていたのですがどうも
Windows2000 PROでインストールした時は1.5.5が入ったようです。(何でだろ〜???)
cygwin 1.5.7 では何度再インストールしてもinitdbはやはりエラーになります。
ipcsでも共有メモリ等が設定できていませんでした。(ipc-daemon2 &は実行済み)
と言うことでcygwin を1.5.5で運用します。

856NAME IS NULL:04/02/16 04:08 ID:???
あるカウント以上のデータだけを、ランダムに抽出する
やり方を教えてください。
857NAME IS NULL:04/02/16 09:25 ID:???
いみがわかりません。
858NAME IS NULL:04/02/16 10:46 ID:???
>>856 SELECT * FROM hoge WHERE count >= あるカウント AND PKEY = RAND();
859NAME IS NULL:04/02/17 02:03 ID:0sybohhD
PGCluster をまともに動かせてる人いてますか?
1.0.6b
860NAME IS NULL:04/02/17 02:18 ID:???
>>859
途中でキューにたまるんだか、すぐに整合性取れなくなるな
861NAME IS NULL:04/02/17 23:41 ID:???
ある二つのテーブルに対して、下のようなSELECT文を発行しています。
(正しいSQL文ではないです。雰囲気をわかってもらえれば。。)

SELECT DISTINCT a.a, a.b, a.c, a.d, a.e, a.f, a.g, a.h
FROM table_a a, table_b b
WHERE
( a.cd1 in ('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16') ) AND
((( b.code2 in ('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16') ) AND a.code2 = b.code2 ) OR ( b.code in ('1','2','3','4','5','6','12','13','14','15','16','22','22','24','25','26')))

このSQLだと、検索に8秒ほどかかってしまいます。
また、単純に in句のワードが増えると、検索速度も比例して増えてしまいます。
どうにかしてスピードアップを図りたいのですが、何か良い置き換えかなんかありますか??
862NAME IS NULL:04/02/19 00:59 ID:???
>>861

EXISTS を使うように書き直すと良い。
雰囲気だと言うのでちゃんと書き直してはやらんけど。
863NAME IS NULL:04/02/19 03:17 ID:???
Postgresには、MySQLのtimestampのような
データ操作の日時を自動的に記録する特別な型や方法ってありますか?
864NAME IS NULL:04/02/19 03:40 ID:???
MySQLみたいにTimistampが使える。
はず。
865NAME IS NULL:04/02/19 03:45 ID:???
ん〜PostgresとMySQLではtimestampの性格が違うくないですか?
866NAME IS NULL:04/02/19 04:14 ID:???
cast( current_date as date ) || ' ' || substring( cast( current_time as char( 14 ) ) from 1 for 8 )
って感じじゃだめ?
867NAME IS NULL:04/02/19 04:49 ID:???
だめよ
868NAME IS NULL:04/02/19 13:20 ID:???
plpgsqlでファンクション作ったんだが、
CREATE FUNCTION〜〜のコード書いたファイルをなくしてしまった。
Oracleでストアドの内容見たければ
select text from user_source where name = 名前 order by line
で確認できるけど
PostgreSQLで見る方法ってある?
もう一度書くと手間がかかるから出来れば拾い出したいんだけど。
869NAME IS NULL:04/02/19 17:44 ID:???
select * from pg_proc;
870868:04/02/19 18:30 ID:???
>>869
うわ、すごい単純。もうちょっとぐぐれば見つかったかもしれんね。
ありがとう。探し方が下手ですまんかった。
871NAME IS NULL:04/02/20 18:11 ID:???
毎日の平均気温を記録したテーブルがあるとします。
ここから、今月の平均と、年間の平均を一行で取ってくることってできますか?

SELECT avg(気温) AS 月平均 FROM テーブル WHERE 記録日 = 今月;



SELECT avg(気温) AS 年平均 FROM テーブル WHERE 記録日 = 今年;

をまとめて一行で、という感じなんですけれども。
872NAME IS NULL:04/02/20 22:08 ID:???
select a.kuso, b.unko from
(SELECT avg(気温) AS kuso FROM テーブル WHERE 記録日 = 今月) a,
(SELECT avg(気温) AS unko FROM テーブル WHERE 記録日 = 今年) b
873871:04/02/20 23:46 ID:???
なるほど、でもそれってひょっとして例えばPHPから

$monthly = $db->getOne($SQL1);
$yearly = $db->getOne($SQL2);

とやるのとあんまり変わらなかったりしますか?
874NAME IS NULL:04/02/21 04:01 ID:???
PHPは不勉強で分からないんだけど、その文だとDBへのアクセスは
2回になるんじゃない?
>>872の文ならアクセス自体は1回で済むよ。
875871:04/02/21 10:36 ID:???
>>874
もちろんそうですが、サブクエリってDBに取ってはあまり嬉しくない、
と聞いたことがあるもので、これだけのためにサブクエリを二つも
発行するのなら、シンプルなもの二回の方が効率がよいのかなと
思ったのです。
876NAME IS NULL:04/02/22 03:57 ID:???
それは環境によるんじゃないかな。
DBがいっぱいいっぱいなら2回に分けた方がいいかもしれんし、
ネットワークがいっぱいいっぱいならサブクエリでも1回ですませた方が
いいと思う。

ただ、この程度(>>872のSQL)ならどっちでも大して変わらないような気がする。
877NAME IS NULL:04/02/22 04:29 ID:???
>>875
最初に「まとめて一行で」って要件出したのおまえだろ、
確実に要件を満たした回答の後でぐだぐだ言われてもな…
878875:04/02/22 12:28 ID:???
>>876
なるほど、よくわかりました。もう少し検討してみます。

>>877
おっしゃる通りです。すいません。
879NAME IS NULL:04/02/22 13:18 ID:???
>>872はネタ的解と思っていたのだが、マジレスだったと。
880NAME IS NULL:04/02/22 13:24 ID:???
kuso,unkoっていう部分は本音だよ
881NAME IS NULL:04/02/23 01:21 ID:???
>>879
他にどういうのがあるの?
882NAME IS NULL:04/02/23 08:35 ID:???
                Table "public.tankamaster"
  Column  | Type  |              Modifiers
--------------+---------+------------------------------------------------------------------
tankaid   | integer | not null default nextval('public.tankamaster_tankaid_seq'::text)
body     | text  |
note     | text  |
publish_date | date  
という単純な表で、

月ごとにレコード数を表示させる以下のSQLはうまくいくのですが・・・
select
TO_CHAR(publish_date,'YYYYMM') as publish_yyyymm ,
count(*) as publish_yyyymm_count
from tankamaster
group by publish_yyyymm
order by publish_yyyymm

「where句にpublish_dateが2003年だったら」
という書き方がわからず困ってます。

where TO_CHAR(publish_date,'YYYY') = '2003'
とかやったのですが、エラーでした。

どのようにすれば実現できるのでしょうか?
どなたか、教えて頂ければ幸いです。
883882:04/02/23 09:59 ID:WjXYrXD4
うーん、age
884875:04/02/23 10:05 ID:???
date_part()/extract()
dete_trunc()
885882:04/02/23 11:20 ID:WjXYrXD4
>>884
ありがとうございます。

ただ、「where date_part('year',publish_date) = 2003」を前述(>>882)のSQLにくわえても、
えらーになってしまいます。

ただ、

select publish_date
from tankamaster
where date_part('year',publish_date) = 2003
だと当然うまくいきます。

groupby や order byが絡んでだめになってるんでしょうか?
でもいろいろ部分的に削っても、実現できず。。。

SQL的に、矛盾したことはやってないですよねぇ。。。
886875:04/02/23 11:31 ID:???
having
887882:04/02/23 17:33 ID:WjXYrXD4
select
TO_CHAR(publish_date,'YYYYMM') as publish_yyyymm ,
count(*) as publish_yyyymm_count
from tankamaster
group by publish_yyyymm
order by publish_yyyymm
having date_part('year',publish_date) = 2003
でもえらーがでます。。。_| ̄|○
888NAME IS NULL:04/02/23 18:01 ID:???
で、そろそろそのエラーの内容は晒してくれるんだろうな
889NAME IS NULL:04/02/23 18:03 ID:???
group by TO_CHAR(publish_date,'YYYYMM')
ではだめ?
#group byって別名使えたっけ?
#良く覚えてない&試してないで申し訳ないが。。。
890882:04/02/23 18:22 ID:WjXYrXD4
>>888
すいません、単純ミスかと思ったので、みなさんならすぐわかるかと思って。

>>889
select
TO_CHAR(publish_date,'YYYYMM') as publish_yyyymm ,
count(*) as publish_yyyymm_count
from tankamaster
group by publish_yyyymm
order by publish_yyyymm
group by TO_CHAR(publish_date,'YYYYMM')

とやったら、

parse error at or near "group" at character 169
でした。。。_| ̄|○
891NAME IS NULL:04/02/23 18:26 ID:???
select
TO_CHAR(publish_date,'YYYYMM') as publish_yyyymm ,
count(*) as publish_yyyymm_count
from tankamaster
group by publish_yyyymm
order by publish_yyyymm

で普通にOKだろ。なぜ2つもgroupがある。
892NAME IS NULL:04/02/23 18:30 ID:???
select
publish_yyyymm,
count(*) as publish_yyyymm_count
from tankamaster
group by publish_yyyymm
order by publish_yyyymm
group by TO_CHAR(publish_date,'YYYYMM') as publish_yyyymm

だとだめ?

group byしてるわけだから、select句には別名を書かないとマズイと思ったんだが。

#申し訳ないけど、テストしてない
893892:04/02/23 18:31 ID:???
たしかに、group by句が二つある・・・
一つにまとめてくれい。
894892:04/02/23 18:33 ID:???
よく考えたら別名をつける必要はなかった気がしてきた・・・
895882:04/02/23 18:40 ID:WjXYrXD4
>>891-893
すみません、コピペみすしてました。

やりたいことは
select
TO_CHAR(publish_date,'YYYYMM') as publish_yyyymm ,
count(*) as publish_yyyymm_count
from tankamaster
group by publish_yyyymm
order by publish_yyyymm
where date_part('year',publish_date) = 2003

(publish_date列が2003年のレコードの中で、月別にまとめてソートして、月別件数表示する、というものなのですが。
で、上記SQLだと、「parse error at or near "where" at character 157」と言われてしまいます。。。
896NAME IS NULL:04/02/23 19:17 ID:???
まずはSQLの文法を勉強してください
897NAME IS NULL:04/02/23 21:04 ID:???
馬鹿に付ける薬はないな。
898NAME IS NULL:04/02/23 21:54 ID:???
_| ̄|○ そんなオチだったのか。。。
899NAME IS NULL:04/02/23 22:22 ID:???
オ〜チ〜チ〜オ〜チ〜
氏んでるんだろうか〜
900NAME IS NULL:04/02/24 11:03 ID:???
順番
901882:04/02/24 11:52 ID:???
すいません、わかりました。勉強しなおしてきます。。。。_| ̄|○
902NAME IS NULL:04/02/25 04:56 ID:???
>>901
気にするなよ。最初のうちはそういうもんだ。
勉強して、このスレでレスするようになってくれ。
903NAME IS NULL:04/02/27 02:47 ID:???
全体的にこのスレって優しいよな。
904NAME IS NULL:04/03/01 10:52 ID:???
アイエイエフコンサルティング、オープンソースのOLAPソフトウェアを提供
http://enterprise.watch.impress.co.jp/cda/software/2004/02/27/1508.html

> OpenOLAPは、Linux、Apache、PostgreSQLの各オープンソースソフトウェア上で
> 動作するため、ユーザーは完全なオープンソフトウェア環境でOLAPを利用できる
905NAME IS NULL:04/03/06 12:23 ID:???
Windows版PostgreSQLまだぁ〜?
906NAME IS NULL:04/03/06 12:40 ID:???
ある

はい次
907NAME IS NULL:04/03/07 23:03 ID:???
Powergresとか言うなよ厨房?
908NAME IS NULL:04/03/07 23:30 ID:???
>>907
無知は黙ってろ

はい次
909NAME IS NULL:04/03/08 20:58 ID:???
>>908
無知はテメーだカス。
910NAME IS NULL:04/03/08 21:51 ID:???
はいはい。Win厨はどっかいってねー
911NAME IS NULL:04/03/08 23:40 ID:???
Win版も見つけられずCygwinも入れられないヘタレは
ODBCでテキストファイルでも使ってればぁ?
912NAME IS NULL:04/03/09 00:02 ID:???
てゆーか何故にWin32でポスグレ?
913NAME IS NULL:04/03/09 00:13 ID:???
漏れって、ポスグレを使いたくてUnix(Linux)をやり始めたようなもんだ。
CygwinもUnixの経験がまったくないと、サパーリだったし。

で、あっちゃこっちゃの鯖はLinuxって感じになってしまったが、
KDEとかGNOMEに触れた時は、Winの呪縛から逃れたい気も手伝って
いろいろ弄ったけど、結局クライアントはいまだにWindows。

スレ違いスマソ
914NAME IS NULL:04/03/09 00:18 ID:???
聞きかじりだろ。
どうせこの程度の奴が使う分には、MySQLどころか
Accessでも充分事足りるんだよ
でも「みんながpostgresの方が良いとか言うから」とか
「2chのあるスレでの比較によると…」とか、そんなん。
915NAME IS NULL:04/03/09 00:18 ID:???
>>914>>912へ。
916NAME IS NULL:04/03/09 16:42 ID:???
CREATE TABLE する時に、とあるカラムの値が指定値のときに UNIQUE、
なんて制約を定義することはひょっとしてできないのでしょうか?

CREATE TABLE t1 (
 flag INT,
 code INT,
CHECK (UNIQUE(code) AND flag > 0)
);

みたいなことができればいいのですが。。。
917NAME IS NULL:04/03/09 21:11 ID:???
それ全然uniqueじゃないよ。
918916:04/03/09 22:04 ID:???
>>917
正確には unique じゃないのはわかります。

とりあえず flag の値を変更するときに、別の bool のカラム(例えばf2)に
flag > 0 の結果を格納するようにすれば、

 UNIQUE(code, f2)

で同様の制約をかけれることは気付いたのですが、
あまりスマートじゃないですよね。。。
いい方法はないでしょうか?
919NAME IS NULL:04/03/13 01:07 ID:SQZ4DqSr
7.4.2へ入れ替え中
920NAME IS NULL:04/03/13 10:07 ID:???
トリガ使え
921NAME IS NULL:04/03/13 12:19 ID:???
7.3.6 に入れ替え中。
根拠なしに 7.4.3 になったら移行しようと思ってる。
922NAME IS NULL:04/03/14 15:52 ID:???
・ニ。シ・ヨ・?、ホタ゚キラ、ホコン。「VARCHAR、ネTEXTキソ、ホサネ、、ハャ、ア、テ、ニ、ノ、ヲ、キ、ニ、゙、ケ?
923922:04/03/14 15:56 ID:???
、ケ、゚、゙、サ、クサイス、ア、゙、キ、ソ。」P2、ホトエサメ、ャ、隍ッ、ハ、、、ハ...

・ニ。シ・ヨ・?タ゚キラ、ホコン。「VARCHAR、ネTEXTキソ、ホサネ、、ハャ、ア、テ、ニ、ノ、ヲ、キ、ニ、、、゙、ケ、ォ?
チエノEXT、テ、ニ、荀?ハ�、マ、タ、皃ヌ、キ、遉ヲ、ォ?
924922:04/03/14 15:59 ID:???
また化けた。スレ汚してすみません。逝って来ます...
925NAME IS NULL:04/03/15 00:13 ID:???
で、Windows版はまだぁ?
926NAME IS NULL:04/03/15 01:26 ID:???
うんこ
927NAME IS NULL:04/03/15 10:14 ID:???
教えてください
7.4は自動的にVACUUM する機能はついているのですか
ドキュメントを見ている限りでは付いて無さそうなのですが?
928NAME IS NULL:04/03/15 10:22 ID:???
>>927
付いていない。
929NAME IS NULL:04/03/15 10:26 ID:???
ありがとう
次のバージョンにずれたのですね
930NAME IS NULL:04/03/15 16:57 ID:???
ちょっとお尋ねしますが、変なクエリを発行してしまって帰ってこなくなった
postmaster を強制終了する方法ってあるんでしょうか?

kill postmasterのPID

でも大丈夫なんでしょうか?
931NAME IS NULL:04/03/15 20:48 ID:3isCxXIL
7.4.2をDLしてpostmaterしようとすると
FATAL: "/usr/local/pgsql/data" is not a valid data directory
DETAIL: File "/usr/local/pgsql/data/PG_VERSION" is missing.
なるエラーが出てしまいます。
無難に7.3あたりにした方がいいのでしょうか?
932NAME IS NULL:04/03/15 20:53 ID:???
>929
contrib/pg_autovacuum/
933NAME IS NULL:04/03/16 19:27 ID:???
>>932
感謝します。
contribディレクトリのこと調べてみました。
こういう形でユーティリティが提供されているとは知りませんでした。
makeしないといけないのですね
934NAME IS NULL:04/03/17 13:57 ID:???
>>931
initdbしてないんじゃない?
935NAME IS NULL:04/03/17 20:21 ID:???
Windows版はまだぁ?
936NAME IS NULL:04/03/18 01:06 ID:???
>>935
前から聞いてる人?
おいらも同じ気分
雑誌によると7.5またわ8.0らしい
937NAME IS NULL:04/03/18 01:06 ID:???
PostgreSQLと相性の良い文字コードはEUC-JPですか?

UTF-8やShift-JISでも使えますけどなんか無駄な機能を使っているような気がします。
938NAME IS NULL:04/03/19 16:48 ID:???
alterで型をintからtextに変換することはできますか?
急に文字入れたいとか言われちゃって・・・
939938:04/03/19 16:55 ID:???
言ったそばから自己解決しました><

新しいカラムを追加して、そこに変換したいカラムのデータをコピーして
古いカラム消して、新しく追加したカラムの名前を古いのに変えれば
同じでした。
940NAME IS NULL:04/03/19 17:35 ID:???
postgresqlでクエリのベンチマークを測る手段としてpgloadを使ってみたいんですが
もう古いのか、いくつかエラーが出るんで修正しながら試しています。
ベンチマーク測定で他に何か良い方法ってありますか?
(pgbenchはマニュアルを読みましたが、既存のテーブルのテストはできないですよね?)
941NAME IS NULL:04/03/20 09:52 ID:???
単純に時間をはかるだけなら、psqlから\timingするというのもある。
942NAME IS NULL:04/03/20 11:38 ID:???
MLより、こっちのほうが建設的に見えるのはどういうわけだ?
943NAME IS NULL:04/03/20 12:56 ID:???
MLにはジンナイタソに
「そろそろモモコの一周忌ですね」
とツッコメる人がいないからだ。
944NAME IS NULL:04/03/20 13:33 ID:???
>>943
モモコってなんですか?
ハムスターかなんか?
945NAME IS NULL:04/03/20 13:59 ID:???
みんな仲良く!
946NAME IS NULL:04/03/20 14:04 ID:???
ジンナイタソのPDA用脳内人物です。
ここらの共演が見ものかと。
ttp://java-house.jp/ml/archive/j-h-b/050924.html

主にJava-Houseで活躍するも、荒れてきたことと同一人物であることが見破られそうになったことから、ももこの夫により死亡がつげられる。
ttp://java-house.jp/ml/archive/j-h-b/052276.html

他にもTurboLinuxを使う山本佳織やMacを使うゆっぴぃなどが見つかっている。
947NAME IS NULL:04/03/20 14:32 ID:???
>>946
なるほど、技術系ML各地で電波を送信している方なのですね。
名前をぐぐってみたらわかりますた。
948NAME IS NULL:04/03/20 14:35 ID:???
>>943-947
実はジサクジエーンというこの事実
949NAME IS NULL:04/03/20 14:42 ID:???
>>948
えっ?これもジンナイタソの自作自演なの?((((;゜Д゜))))ガクガクブルブル
950NAME IS NULL:04/03/20 15:16 ID:???
>>948-949
もういいよ、ジンナイタン、そこまでジサクジエーンしなくても。
みんなわかってるから…。
951山本佳織:04/03/20 15:17 ID:???
>>948=ジンナイタソ
ちなみに943がモモコの夫の雅人で944がゆっぴいということでよろしいか?
952NAME IS NULL:04/03/20 15:21 ID:???
>946
死亡メールにマジレスしてる人がいることも驚きダ!
953NAME IS NULL:04/03/20 15:49 ID:???
ところで次スレは>>950が立てるの?
954NAME IS NULL:04/03/20 16:02 ID:???
スレタイは
「PostgreSQL & pgsql-jp ML 3テーブル目」
でおながい
955NAME IS NULL:04/03/20 16:03 ID:???
>>952
そして今ジナイタソの相手してる人をみると・・・
956NAME IS NULL:04/03/20 17:22 ID:cQph4WXC
PostgreSQL 3テーブル目

PostgreSQLについて語って2万テーブルをめざしましょう。
関連アプリケーション特有の話題は、以下のスレッドへ。
pgsql-mlのヲチもここで。

●過去スレ
PostgreSQL
http://pc2.2ch.net/php/kako/989/989375812.html
PostgreSQL 2テーブル目(移転前)
http://pc2.2ch.net/test/read.cgi/php/1047317680/
PostgreSQL 2テーブル目
http://pc2.2ch.net/test/read.cgi/db/1056944337/

●関連スレ
PostgreSQLのことならここで聞け
http://pc2.2ch.net/test/read.cgi/db/1056960249/
MySQL vs PostgreSQL
http://pc2.2ch.net/test/read.cgi/db/1056943680/
PHP + PostgreSQL
http://pc2.2ch.net/test/read.cgi/php/983128806/
PerlでPostgreSQL
http://pc2.2ch.net/test/read.cgi/php/999249463/
957NAME IS NULL:04/03/20 17:24 ID:???
958NAME IS NULL:04/03/20 19:20 ID:???
よっしゃ!埋めて行こう。
959新スレの1:04/03/20 20:45 ID:???
ちょっと早かったか・・・
990くらいでも問題なかった気が。
960NAME IS NULL:04/03/21 18:33 ID:???
大変だ !
C++用の API  libpq++ が7.3で無くなっている
7.2には有るのに。
誰か知りませんか。
961NAME IS NULL:04/03/21 20:36 ID:???
おさがわせしました。
GBorgで見つかりました。
962NAME IS NULL:04/03/23 18:30 ID:???
よっしゃ!埋めていこう!
963NAME IS NULL:04/03/23 19:48 ID:???

       \∧_ヘ    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦いくぞゴルァ!!
    /三√ ゚Д゚) /  \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \ ぶーぶーぶー /
      //三/|三|\              タリー
      ∪  ∪     (\_/)タリー    タリー   先はなげぇ〜よ。
                (  ´Д)    タリー  タリー
                /   つ  (\_/)   (\_/)ノ⌒ヽ、
               (_(__つ⊂(´Д`⊂⌒`つ(´Д` )_人__) ))
964NAME IS NULL:04/03/23 21:18 ID:???
1000!
965NAME IS NULL:04/03/23 21:19 ID:???
?
966NAME IS NULL:04/03/29 14:20 ID:bZAOhvfO
PostgreSQLって、コラム名にuser使えないの?
967NAME IS NULL:04/03/29 14:43 ID:bZAOhvfO
ERROR: parser: parse error at or near....
って何よ。。
968NAME IS NULL:04/03/29 15:00 ID:bZAOhvfO
********=# CREATE TABLE accesslog (
********(# time timestamp(0),
********(# path varchar(80),
********(# ssid varchar(80),
********(# user varchar(80),
********(# group varchar(80),
********(# lang varchar(10),
********(# remote varchar(80),
********(# browser varchar(80),
********(# error text);
ERROR: parser: parse error at or near "user" at character 84
969初心者:04/03/30 10:16 ID:???
Cygwin+PostgreSQLを試そうとしている初心者です。
Windows2000でcygwin最新をインストールして、↓
Package Version
cygipc 2.03-2
cygwin 1.5.9-1

ipc-daemon2をバックグラウンドで走らせ、ipcsを実行すると
以下のようになるのですが、これってうまくいってませんよね?
$ ipcs

---------- Shared Memory Segments --------
shmid key bytes nattch status

---------- Semaphore Arrays --------
semid nsems key

---------- Message Queues --------
msqid used-bytes messages

どうすればうまく共有メモリの設定?ができるのでしょうか?
970NAME IS NULL:04/03/31 17:11 ID:GNiAicAu
わしも嵌って、一度
$ ipctest h
してからやったらうまくいったかのような感覚を覚えたことはある。
でも実際それがキーになってるのかはよくわかんない。

あとは権限関係でこけてないかログ見てみるとか。
971970:04/03/31 17:13 ID:GNiAicAu
2.xよりも1.xの方が事例が多くてラクな予感。
972初心者:04/04/02 08:42 ID:???
>970

ありがとうございます。
Cygwin1.5系ではipc-daemonは2.xでないといけないと聞いたので
2.xでやってました。1.xも試してみます。
ログがあるんですか…。
973NAME IS NULL:04/04/03 03:56 ID:ZUcU1XBz
pg_stat_activityで実行中のクエリを見たいんですけど、
全て<IDLE>になってしまいます。
pg_hba.confではクエリが見られるよう設定してあるんですが、
どうすれば良いのでしょうか。
974NAME IS NULL:04/04/03 11:53 ID:om45/2Hf
Cygwin+postgreを使っておりまして、いままでは何も考えずにipc-daemonを起動してpostgreを起動してたのですが、
ふと疑問に思いまして、
ipc-daemon の ipcってのはどういう意味(なにかの略称?)なのでしょうか?
975NAME IS NULL:04/04/03 19:47 ID:???
inter process communication
976NAME IS NULL:04/04/07 13:21 ID:???
丸一年VACUUMもANALYZEもしてないDBにFULLかけたら!panic起こして鯖が死んだ(ワラ
977NAME IS NULL:04/04/21 15:20 ID:KjL6eAbt
PostgreSQL 7.1.3の SJISデータを pg_dump して7.4のEUC-JPテーブルへリストすることって可能でしょうか?
978NAME IS NULL:04/04/21 22:39 ID:OnfOdbnt
>>977
pg_dumpでプレーンテキスト指定すると、SQLで出るから、
nkfとか使ってコード変換して、あと手でなおすとこあったら、なおせばOKじゃない?

979NAME IS NULL:04/04/21 22:46 ID:???
はしご高とか失われるデータはないかな。
980NAME IS NULL
ORACLEのUPSERT相当の処理を行うのに

key = SELECT key FROM t1;
if (key) {
 UPDATE t1 SET 〜
} else {
 INSERT INTO t1 〜
}

とやるのと

UPDATE t1 SET 〜
if (cmdtuples == 0) {
 INSERT INTO t1 〜
}

とやるのとどちらが効率いいもんなんでしょうか?