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

PostgreSQL

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2001/05/09(水) 11:36ID:GHX.oCXo
PostgreSQLについて語りましょう。
関連アプリケーション特有の話題は、以下のスレッドへ。

☆関連スレッド
[PHP + PostgreSQL]
http://corn.2ch.net/test/read.cgi?bbs=php&key=983128806
[PHP以外+PostgreSQL]
http://corn.2ch.net/test/read.cgi?bbs=php&key=988929199
[MySQL vs PostgreSQL]
http://corn.2ch.net/test/read.cgi?bbs=php&key=989341364
0402nobodyさん02/07/27 23:08ID:V7PX6eYj
RedHatLinux7.2上でPostgreSQL7.2.1のフロントエンドを
libpqを使って開発しています(C言語)。
DB接続用関数「PQconnectdb()」の使い方がワカランです。
引数が可変長なのは理解できるんだけど、その指定方法がいまいち。
マニュアル通り、「keyword = value」ってやってもできん。
どなたか、使用例ってのを見せておくんなまし。

追加でもう一つ。PGstatusの返り値の違いがワカランです。
特にCONNECTION_OKとCONNECTION_AUTH_OKかな?
あと気になるのは(マニュアルより引用)
「CONNECTION_MADE 接続はOKです。送信されるのを待っています」
いったい何が送信されるのを待ってるんだろう。
どなたか謎を解明してくんさい。
0403親切な人02/07/27 23:23ID:???

ヤフーオークションで、凄い人気商品、発見!!!

「 RX-2001 」がパワーアップした、
「 RX-2000V 」↓
http://user.auctions.yahoo.co.jp/jp/user/NEO_UURONNTYA#.2ch.net/

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。

ヤフー ID の無い方は、下記のホームページから、
購入出来る様です↓
http://www.h4.dion.ne.jp/~gekiyasu/#.2ch.net/
0404名無しさん@Emacs02/07/28 03:17ID:???
>402
PQconnectdb()でなければならない?
問題なければ、PQsetdb()使った方が簡単だと思いますが。

PQstatus()の返り値は、通常は not CONNECTION_BAD を
調べます。CONNECTION_MADE や AUTH_OK は libpq が
内部状態を記憶するのに使うのであって、
通常アプリケーションの方からは使いません。
0405nobodyさん02/07/29 10:45ID:???
ちょい質。

例えば社員データベースに格納したいデータとして

社員番号、社員名、住所、電話番号

があって、その中で社員番号と社員名は頻繁に問合せされるけど、
住所、電話番号が問合せされることはほとんどない、といった状況があった場合、
次のどれが問合せの効率としてはいいんでしょうか?

1.全て一つのテーブルに持ち、必要な情報だけを問い合わせる
2.全て一つのテーブルに持ち、よく使われる問合せをビューとして定義する
3.よく使われるデータとそうでないデータを社員基本情報と社員付加情報のような
  別テーブルにわけリレーションをはる
4.それ以外
0406初期不良02/07/29 12:49ID:???
>>405
実験した方が...
見た感じ postgresql がやることとしては
1, 2 は変わらない感じだから、3で速くなって
その速度が必要だと思ったならテーブル分けて
結合する view を作って view に insert delete update
できるようにするのがいいかと。
0407nobodyさん02/07/29 16:33ID:???
>>406
あ、もちろん実験はするつもりでした。
ただ、メリット・デメリットがわからない状態で闇雲に実験しても
「実はこういう場合もある」みたいなケースがあるかなと思いまして、
先達の皆様のご意見をお伺いしたかったと、まぁそういうことです。
今のところ

1.テーブル設計が楽。フィールドが増えると検索に時間がかかる。
2.SQLの組み立てが1よりも楽。検索速度は1.よりも若干遅くなるかも。ビュー定義を別に行う必要がある。
3.検索速度が2.よりも速い。ビュー定義が複雑になる。

ぐらいかと思ってるんですけど、本当でしょうか?
0408nobodyさん02/07/29 16:55ID:???
405のテーブルって正規化した結果だよね。それを前提とすると、
3.の場合は社員番号、社員名テーブルと社員番号、住所、電話番号テーブルの
整合性に気を使う必要がある。
というのもあるかも。
つまり、工数が増える->ミスする可能性が増える、ということなので、
俺なら、その部分がボトルネックになってて、かつテーブルを分ける事で
大きく性能が改善される事がベンチマーク等で確認されないかぎりは、
一つのままにするかな。
0409pg初心者02/07/29 17:26ID:???
最近勉強し始めたのですが質問です。
SERIAL型で最大値(2147483648)を超えた場合,
次の値はどうなるんでしょうか?
0410nobodyさん02/07/29 18:06ID:yb513x2/
始めまして。なんか最近面白いサイトが出来たみたいですよ。
キャラクター(笑)とかがタダで持てたり、着替えさしたり・・・・
でも今だけらしいですよ入会無料なのって
詳しくは下記UELをクリックして、確かめて!!
http://www.e-mansion.co.jp/co/ac.html
0411初期不良02/07/29 20:23ID:???
>>409
select setval('seq', 2147483648);
select nextval('seq');
しる
0412nobodyさん02/07/29 21:30ID:???
>>408
です。でもそういう意味ではわざわざテーブルを分けること自体、
正規化の逆を行ってたりします?

確かに気を使う割には件数がそんなに莫大というわけではないので
#実際には社員テーブルではないのですが。。。
とりあえず1.でやってみて、問題になりそうなら考える、という形にします。

どもありがとうございました。
0413nobodyさん02/07/29 22:17ID:+EFE+b01
>>412
 遅いレスだけど、速度を出すときは結合(ソート+マージで高コスト)を
減らす。
 列の数が気になるようだが、サーバーとクライアント間の転送量が最初に
問題になるので、問い合わせ時に絞れば問題ない。
 さらに例示されたテーブルを無理に分割すると、第五正規化・対称制約条
件に従わない、に違反するので非正規化になる。
0414nobodyさん02/07/29 22:54ID:???
>>413
ですよね。大したデータでもないのにわざわざ正規化じゃなくするのは
ちょっとヤな感じがしてきてたところです。これで安心して1.で逝けます。
0415nobodyさん02/07/30 00:36ID:HDFyLWHU
質問です。知っている方,居られましたらご教授下さい。
PostgreSQLVer7.1.3を使っているんですけど,
ロックタイムアウトの時間とかは指定できないんでしょうか?
もし,タイムアウト時間が指定できなければ,どのテーブル(又はレコード)に
ロックがかけられているか調べる術などあるのでしょうか?


0416nobodyさん02/07/30 01:09ID:???
>>415
トランザクション使えば明示的なロックが必要な部分ってかなり少なくなると
思うんだけど、本当にロックが必要?
わかってて聞いてるならスマソ。

やるとすれば、PQsendQuery して自前でタイムアウト処理して、間に合わない
ようなら PQrequestCancel すればいいのかな。やったことないから正しいか
どうかわからないけど。
0417nobodyさん02/07/30 01:24ID:HDFyLWHU
>>416
JavaからDBを触っているんですけど、処理上どうしてもあるレコードが
ロックされているか知る必要があるのです。
(そもそもシステムの設計に欠陥があるのですけど、もう後の祭り…)

「PQsendQuery」調べてみました。
検証してみないとなんとも言えませんが、使えそうな気がするので実験してみます。
アドバイスありがとうございました。
0418nobodyさん02/07/30 21:46ID:w4X2IPfe
insert delete update
などのテーブルのデータに対して使用する関数はようやく使えるようになりましたが
テーブルそれ自体の項目名を変更したり削除したりするのは
どうやったらいいのでしょうか?
今までは間違えたらDrop Table
して一からCreate Tableしていたのですが、
さすがにそれでは追いつかなくなりました。
SQL一覧をみてもそれらしいのが見つからないのです・・・
0419nobodyさん02/07/30 21:48ID:???
>>418
データはないときはalter tableすれば? 載ってなかった?
042041802/07/30 23:37ID:w4X2IPfe
>419

見事に出ておりました・・・
アルファベット順だったのでこんな上にあったとは・・・
042141802/07/31 00:28ID:boduSA+6
うーん。でもどうもリネームはできるけど属性だけ変える方法がわからないです。
ALTER TABLE mytable ALTER mycolumn integer;
こんなかんじでtextになっているmycolumnをintegerに替えようとしているのですが・
ちなみに
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/sql-altertable.html
これを参考にしています
0422nobodyさん02/07/31 10:32ID:aLb8xrtM
そもそも、textで作ったものをintegerに変更しなきゃいけないという事態が
頻発するのはどうかと思うが。

新しいテーブルを別に作って select 〜 into 〜 するときに
text を integer に変換して入れる、ってのはどう?

で、古いのを drop して新しいのを rename。
0423nobodyさん02/07/31 10:54ID:v8yqPDdo
>>421
新しいテーブルを作って、サブクエリー付きでinsert intoすればよい。
0424nobodyさん02/07/31 11:28ID:vDTHZH0e
[前の20件][次の20件]みたいなものを実現するのに
LIMITやOFFSETが使えそうですが、20件/1200件
のように全件中の20件のみの表示の場合、全件数を
検索して件数を取得してから、またLIMIT 20 OFFSET 0
とかでSELECTし直して表示させる方法はなんだか
無駄のような気がします。
何か他によい方法はないでしょうか。
042542402/07/31 11:32ID:vDTHZH0e
説明足らずだったかもしれません。
最終的には例えば、

1200件中の21〜40件を表示しています。

みたいな表示をしたいのですが、
@全件数を取得するクエリと、
A21件目〜40件目を取得するクエリと
2回クエリを実行させないといけないので、
他に何かよい方法がありましたらお教えください。
042642102/07/31 12:07ID:boduSA+6
>422
うううそうなのですか・・・
たくさんある項目の中で一箇所だけintegerにすべきところをtextにしてしまったのですよね。
まだデータをいれてないのでまあテーブルごと消して直してしまえば
それまでなのですが・・
0427nobodyさん02/07/31 13:26ID:???
>>424
ない
0428nobodyさん02/07/31 13:26ID:???
>>425
だからないっつーの
042942102/07/31 15:27ID:boduSA+6
mytableにオートナンバーのシリアル値の項目を足そうとして

pgdb=> ALTER TABLE mytable ADD myautonum serial;
このように実行すると
NOTICE: ALTER TABLE will create implicit sequence 'company_autonum_seq' for SERIAL column 'company.auto
num'
NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index 'company_autonum_key' for table 'company'
ERROR: Adding columns with defaults is not implemented.
Add the column, then use ALTER TABLE SET DEFAULT.

こんな感じで怒られてしまいます。
tableに項目を足したり削除したりというのがどうもできません。
名前の変更だけはできるのですが・・・

>422
レスありがとうございます。
しかしどうも私の力じゃ理解しきれないもようです・・。
ちょっといろいろネットを当たっては見ているのですが、
postgresは意外と情報が少ないというか
ハイレベルな話が多くて、本当の初心者向けの話が少ないですね。
0430nobodyさん02/07/31 20:44ID:3uNj3n4c
>>429
ERROR: Adding columns with defaults is not implemented.
を日本語に訳せば原因がわかるよ。

あと、Postgres を使いこなしたいなら、シーラカンス本は必須。
とくに DB 使った経験が少ないならなおさら。いまだと改訂第3版が出ている。
0431f02/07/31 21:04ID:ZYUYyFHP

-------風俗の総合商社・MTTどこでも-------

〇デリバリーヘルス〇デートクラブ〇女性専用ホストクラブ〇
〇ハードSM奴隷クラブ〇レズビアン倶楽部〇ホモ・オカマ倶楽部
〇変態痴女と遊ぶ会〇痴漢・覗き趣味の会〇変態同好会・各種!
●楽しく遊べます! 090-8002-8356番
-----------美男・美女会員など多数在籍中-----------
  http://www.mttdocomo.jp/
-----女性アルバイト随時募集・高収入(日払い)月100万円可能-----
-----レズビアン・スタッフ●ホモスタッフ●女性専用ホストスタッフ同募-----
http://www.mttdocomo.jp/
------------------------------------------------
0432396=40002/08/01 12:22ID:???
>401さん
ご解答ありがとうございます。ご返事遅くなって申し訳ありません。
EXPLAIN使ってみました。
このチェックの仕方知らなかったので大変勉強になりました。
速度的には特に問題なさそうですね。
巨大なテーブルがあったらまたチェックしてみます。
ありがとうございます。
0433nobodyさん02/08/02 14:00ID:IWsgOaFu
どなたかpostgreSQL+cocoon分かる方いませんか〜?
oracleのXSQL見たいなことが出来ると聞いたので試してみてる最中なのですが。

ttp://four.sssg.org/documents/
を参考にTomcat/postgres/cocoonは全て起動するようになったのですが、
そこから先がよく分からんです。

ttp://www.atmarkit.co.jp/fxml/rensai/cocoon01/cocoon01.html
も見てみましたが肝心の連動の話はまだ先のようで…

XSPとか使うんでしょうか?

環境を一応…
RedHat7.2J
postgreSQL 7.1.3
tomcat 3.2.3
apache 1.3.20
cocoon 1.7.4

ここではなく他に適当なスレがあるのであれば誘導お願いします…
関連っぽいスレがここしか見当たらなかったので…
0434osage02/08/03 01:54ID:???
>>424
SELECT
 A.*,
 B.ALL_COUNT
FROM
 TABLE_NAME A,
 (SELECT COUNT(COL1) AS ALL_COUNT FROM TABLE_NAME) B
LIMIT 10
OFFSET 5
みたいな感じじゃだめ?

条件にもよるけど、2回 SELECT 発行した方が早いときと、
遅いときとありますたので・・・

>>427
「ない」って言うのは嘘だろ
0435nobodyさん02/08/03 06:30ID:ZbZ4OQz5
FreeBSD + PostgreSQL を利用しようと
./configure したところ、
You must use GNU make to build PostgreSQL
stop in ***********

と出ます。原因は、gmake が無い事だと思い、
とりあえず、ln make gmake
としたのですが、無駄でした、GNUMakefile はどこで手に入れれば良いのでしょうか。
それと、問題そのものの解決策になるでしょうか?
0436nobodyさん02/08/03 06:56ID:ZbZ4OQz5
435 です
何とか解決できそうな気がします。
失礼しました。
0437nobodyさん02/08/03 10:21ID:hyrYRCqD
>>433
取り敢えず、Cocoonは2.0.3にしておけ。
で、ESQLというのがあるので、それを使えば望みは叶うぞ。
0438nobodyさん02/08/03 16:43ID:kR3x2v5A
>>404
かな〜り遅レスですが、寸間祖(ATOK)

> PQconnectdb()でなければならない?
> 問題なければ、PQsetdb()使った方が簡単だと思いますが。
簡単か否かは別として使ってみたいんす
パラメータをどうやって区切るのかわからんのです
(スペースとか、カンマとかやってみたんすけど)
ちなみに同じパラメータリストでPQsetdb()ではできました

> PQstatus()の返り値は、通常は not CONNECTION_BAD を
> 調べます。CONNECTION_MADE や AUTH_OK は libpq が
> 内部状態を記憶するのに使うのであって、
> 通常アプリケーションの方からは使いません。
ありがとうございます
基本的にはフロントエンドでは(CONNECTION_OKと)
CONNECTION_BADを見ればいいってことですね。

関係ないですが、今日はPQclear()し過ぎてて
セグメンテーションフォールト起こしてました。
0439nobodyさん02/08/04 18:49ID:r6DcgMc8
日付のデータで年ごと月ごと日ごと
にも検索できるようにするのですが、年(YYYY)と月(MM)と日(DD)と
別々の列にするのと、YYYYMMDDのひとつ列を正規表現で探すのとどち
らが早いでしょうか
どちらもインデックスは作りません
0440nobodyさん02/08/04 20:28ID:???
日付型
044143302/08/04 23:57ID:3MVeA/Fz
>>437
亀レススマソ。
2.0.3ですかー。とりあえず上記のアドレスを参考にしたのでわざと最新版にしていませんでした。
あと日本語問題も古い方が良いと話を聞いたので…
ESQLですね。調べてみます。有難うございました。

ついでに、本無いか探してみたのですがモノの見事に
Apache+Tomcat+Coccon+PostgreSQLの本を発見しました…
一から勉強してみますです。
0442nobodyさん02/08/05 01:00ID:YPHySkjn
>>439
日付型
0443nobodyさん02/08/05 01:07ID:???
>>442
前世はやまびこですか?
0444nobodyさん02/08/05 01:19ID:???
いえ、オウムです。
0445nobodyさん02/08/05 01:26ID:???
日付型を使えって事でしょ?
別々の列にする意味あるのか?
CHAR型にする意味があるのか?
0446nobodyさん02/08/05 01:32ID:???
ぼくちんは日付型ってなんか苦手で、int4型にして積算秒のまま格納するよ。
0447nobodyさん02/08/05 01:43ID:???
日付型って内部的には数値型でなかったけ?
ん・・・・それは、Oracleだっけか?
0448nobodyさん02/08/05 02:11ID:???
>>446
それやると30数年後の後輩に迷惑かけちゃうよ。
044943902/08/05 05:10ID:yM7Bnwzp
>>440 >>442
年と月と日のそれぞれの入力欄があり、
月の欄だけに8と入力すれば、年や日に関係ない8月だけの
データが取り出せます。
また日の欄だけに15と入力すれば、年や月に関係ない15日
だけのデータが取り出せる。
そういった串刺し的にデータが取り出したいのですが、
日付型にして例えば15日だけのデータ
を取り出すとなると、年や月をプログラム等どこかで
補完してやる必要は出てこないでしょうか。
それは省きたいので年月日を別々の列にして検索するか
YYYYMMDDの文字列を正規表現で検索するかを考えています。
0450nobodyさん02/08/05 06:03ID:???
とりあえずマニュアルくらい嫁。

db=> create table test (time_field timestamp);
db=> insert into test values ('2001/08/31');
db=> insert into test values ('2002/05/31');
db=> insert into test values ('2002/08/05');
db=> select * from test;
time_field
------------------------
2001-08-31 00:00:00+09
2002-05-31 00:00:00+09
2002-08-05 00:00:00+09
(3 rows)

db=> select * from test where extract(month from time_field) = 8;
time_field
------------------------
2001-08-31 00:00:00+09
2002-08-05 00:00:00+09
(2 rows)

db=> select * from test where extract(day from time_field) = 31;
time_field
------------------------
2001-08-31 00:00:00+09
2002-05-31 00:00:00+09
(2 rows)
0451nobodyさん02/08/05 06:16ID:iq1uYGQ8
>>450
ありがとうございます。
extractなんてあったんですね。目からウロコでした(;_;)
マニュアルは何回か探したんですが気づきませんでした。
0452nobodyさん02/08/05 14:38ID:LsERs9Oy
>>449
SQL関数で日付型から一部分を抜き出せるよ。
0453nobodyさん02/08/07 00:18ID:???
保全age
0454nobodyさん02/08/09 11:01ID:XpLu47Ro
AccessからODBCを通してデータを移行したら、元はちゃんとした
名前がついていたデータなのに16558とか16559といった数値に
データが変換されてしまっているようなのですが、変換されてしまった
データを元の名前に戻す方法とかってあるでしょうか?
0455nobodyさん02/08/09 15:32ID:FVfbuWof
1/100までの秒数を記録したいので
型式をTIME型にしてDB作って
CAST('01:02:03.45' AS TIME)
をINSERTしても、01:02:03までしか格納されてないみたいなのです。
TIME型は小数点2まで記録できるとあるようですが
DB作る時点でなにかしら設定しておかないといけないのでしょうか?
0456nobodyさん02/08/09 17:17ID:???
>>455
手元の PostgreSQL 7.2.1 ではちゃんと小数点以下も記録されてるよ。
0457nobodyさん02/08/09 23:05ID:Mh8PP7zC
先日からSQL(POSTGRESQL)の勉強を始めたのですが、以下の表示でつまずいてます。何方かアドバイスお願い致します。
やりたい事:面会記録テーブル面会者1、面会者2表示を人物テーブルから名前を引っ張ってくる。
一つでしたら何ら問題ないのですが、二つ引っ張ってくる時のSELECT文のFROMまでどのように記述してよいか
解かりません。↓が例です。

テーブル1:人物テーブル
ID 名前    姓
1  田中康則  男
2  田中真紀  女
3  小泉純二郎 男

テーブル2:面会記録テーブル
ID 日時  面会者1  面会者2
1  8-8-2002 1 2
2 8-9-2002 2 3


SELECT後の希望表示結果:
日時     面会者1    面会者2
8-8-2002 田中康則 田中真紀
8-9-2002 田中真紀 小泉純二郎

簡単そうで、何かうまくいきません。何方かご教授お願いします。
0458nobodyさん02/08/10 00:30ID:???
しのにむ
0459nobodyさん02/08/10 00:43ID:K0BBB4AY
>>457
テーブル設計が腐っています。

select 日時,面会者1 AS 面会者 from 面会記録テーブル
union
select 日時,面会者2 AS 面会者 from 面会記録テーブル

以上のようにして合成し、日時,面会者の形に整理して使いましょう。
まとめると以下のようになる(かも)

select a.ID,a.名前 from
(select 日時,面会者1 AS 面会者 from 面会記録テーブル union select 日時,面会者2 AS 面会者 from 面会記録テーブル) a,人物テーブル b
where a.ID==b.ID
0460nobodyさん02/08/12 21:08ID:wOaAyc1y
>>459
>テーブル設計が腐っています。
(´・ω・`)ショボーン 勉強してきます。

えっと上ので試したけどいまいち訳わからずです。
一度の面会で複数の人に会ったという設定なのですが、
このSQLでよいのですか?

DQNな質問でスマソ。
0461nobodyさん02/08/14 04:37ID:MFUQQkAB
>>460
 アプリケーション側で表示は工夫する必要はあります。
 同じIDの人は、同じ面会であったことになるので、ソートして再構築。
 SQLはwhere句がでたらめだったので、以下のような感じに訂正。(動作チェックはしていません)

select a.ID AS 面接ID,a.名前 AS 面接者名 from
(select 日時,面会者1 AS 面会者 from 面会記録テーブル union select 日時,面会者2 AS 面会者 from 面会記録テーブル) a,人物テーブル b
where a.面会者==b.ID
order by 面接ID
0462nobodyさん02/08/14 10:47ID:???
シンプルに
select m.日時, j1.名前 as 面会者1, j2.名前 as 面会者2
from 面会記録テーブル as m, 人物テーブル as j1, 人物テーブル as j2
where m.面会者1 = j1.ID and m.面会者2 = j2.ID
じゃダメ?
cross join がイヤなら適当に変えてね。
046346102/08/14 16:11ID:MFUQQkAB
>>462
いける。頭まわっていなかったらしい・・・
0464nobodyさん02/08/14 21:30ID:/c+Z8KBo
>>462
解決出来ました!有難う御座います。
>>461
どうもいろいろ意見有難うございました。unionの用法勉強してきます!
0465コギャルとHな出会い02/08/14 22:08ID:udQrDzAC
http://kado7.ug.to/net/


朝までから騒ぎ!!
   小中高生
 コギャル〜熟女まで
   メル友
  i/j/PC/対応

女性の子もたくさん来てね
  小中高生大歓迎です                 
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。

  激安携帯情報あります。
046646602/08/20 01:22ID:VsvDpbeq
Postgres初心者です。1週間ほど考えています。アドバイスお願い致します。

データ-ベースを使用するデータ-ベース使用者の数だけPostgresのアカウントを発行するのが嫌だったので
"Administrator" と "User" という2つのアカウントだけつくり、
したにあるようなIDとパスワードを保持する別のテーブルを作って認証を行おうと思いました。
DataBase=# select * from lD_Passwd;
id | password
------------+----------
tanaka | abcdefg
satou | 0000000
guest | guest

上のテーブルにSelectの権限が与えられているのは"Administrator"(=管理者)のみで
その他のデータ-ベース使用者はすべてアカウント"User"を使うことになります。
ところがUserたちが認証する際、読み取り権限がないのでアクセスすることができません。
読み取り権限を与えるとすべての人のパスワードが見れてしまうことになります。
そこで、
関数をつくって、その中で権限をAdministratorにしてそのテーブルにアクセスして、
Idとパスワードが正しいかどうか判断したのち、戻り値(True or False)として
Userに返すという方法を考えていますが関数自体に権限を与えるといったような
簡単な方法はないでしょうか? また、根本的に間違っているのでしょうか?
マニュアルには見当たりませんでした。
どなたかご教授お願いします。

ちなみにデータ-ベースにはlibpgvbというDLLを使ってVBからアクセスしています。
0467nobodyさん02/08/20 01:27ID:Yv31fq1H
http://www.geocities.co.jp/Hollywood-Screen/8924/profile.html
なあ、この女どう思う?
0468httpd02/08/20 18:26ID:cHWvWGpn
以下の場合、hogedbの作者はhttpdじゃないの?
grantしないとpermissionエラーになるんですけど(;_;)
いちいちgrantしたくないので助けてくださいm(_ _)m
要するにhogedbにhttpdでアクセスしたいだけなのですが・・・どこが違うの??

//ユーザー作成
createuser -d httpd
//変身!!
su httpd
//DB作成
createdb hogedb -U httpd
//インポート
psql -e hogedb < db.out
046952802/08/20 18:40ID:???
>>468
答えは出てるじゃん。そのエラーのとおりだよ。
0470nobodyさん02/08/21 11:57ID:2UYHGwou
おーい、今更なんだけどさ、7.1.xから、7.2.xに乗り換えた香具師。
データの移植は正常だったですか?

おいらんトコは、7.1.xのpg_dumpバックアップファイルが、一部のテーブルだ
けエラーでダメだった。

どーなんてんだ?いったい‥‥‥
0471nobodyさん02/08/21 13:04ID:IYK8rA+A
>>470
EUC 外の特殊な文字とか入ってない?
047247002/08/21 14:12ID:2UYHGwou
>>471

ないと思うんですけどねぇ‥‥

データの大元は、S-JISのテキストなんですけど、変換かけてEUC
にしてから入力にかけてますんで‥‥‥
0473httpd02/08/21 16:30ID:ie5NkI8Z
>>470
Version覚えてないけどシーケンス発行がトラブった。
つーか、setvalでシーケンスの数字変更する時に。
最後の't'を外したら動いたけど……。
0474httpd02/08/21 16:33ID:???
どもども >>469
やっぱり、これではhttpdの所有になっとらんのですね(T_T)なぜだ……。

//ユーザー作成
createuser -d httpd
//変身!!
su httpd
//DB作成
createdb hogedb -U httpd
0475nobodyさん02/08/22 17:05ID:w2//Sq4y
Perl+Pg.pm+Postgresという環境です。
AというテーブルからBというテーブルへ項目をコピーしたいのですが、その際に
日付/時刻型の「2002/08/22 午前 12:12:12」というデータを「yyyymmddhhmmss」という型に
デコードしてコピーしたいのですが、どういった方法が挙げられるでしょうか?
0476nobodyさん02/08/22 21:19ID:sZeyw1CT
>>475
何のために?
DB に入れておくんだったら、日付型の方が便利。
時刻をフォーマットしたいだけなら to_char() を使うけど。
0477nobodyさん02/08/22 23:17ID:WGWM2PPc
データベースの容量って制限できるの?
ユーザquotaのしばり受けるの?
Postgreの使えるレンタサーバ使おうと思ってるんだけど、HP容量にDB容量が含まれるのか知りたくて
0478_02/08/23 14:03ID:???
>Postgreの使えるレンタサーバ
xreaですか?
0479nobodyさん02/08/23 20:42ID:???
>>477
xreaなら含まれるな。って言うかどこでも含まれる気がするけど。
0480nobodyさん02/08/23 20:48ID:5qP9jqJh
>>479
xreaのHPに、「データベースサイズ:目安は5メガバイトまで。」って書いてあるぞ。
HP容量と違うし
0481nobodyさん02/08/23 21:39ID:5qP9jqJh
データベースファイルのユーザは postgres になってたから、quota は効かないよーな気がする
0482nobodyさん02/08/24 05:30ID:???
>>481
groupquota
0483nobodyさん02/08/24 06:47ID:???
>>482
無理。

initlocation使ってうまく容量制限かけられたとしても、制限にひっかかると
dbが壊れる。

PostgreSQL自体がデータベースごとの最大容量を指定できるようにならない限
りはどうしょうもないと思う。
0484nobodyさん02/08/27 15:00ID:???
DBからユーザを削除したいのですが、
念のため pg_class の中を削除したいユーザIDで検索すると、

pg_toast_XXXXXX_idx
pg_toast_XXXXXX

というデータが見つかります。これって何でしょう?
無視してユーザ消してしまっていいんでしょうか?
0485nobodyさん02/08/27 15:28ID:???
>>484
pg_*テーブルはPostgreSQLの内部テーブルなんでユーザーを消しても平気。
TOASTが何かを知りたいなら↓。
http://www.jp.postgresql.org/projects/devel-toast.html
048648402/08/27 15:59ID:???
>>485
でも、とあるテーブルのオーナを削除したらまずいんじゃないの?
と思って試してみたら

%createuser hoge
%psql -U hoge hoge
hoge=#create table t1 (a int);
hoge=# \dt
List of relations
Name | Type | Owner
------+-------+-------
t1 | table | hoge
(1 row)
hoge=#\q
%dropuser hoge
%psql hoge
hoge=# \dt
List of relations
Name | Type | Owner
------+-------+-------
t1 | table |
(1 row)
hoge=#\q
%

あ、なるほど。表示されなくなるだけなのね。納得。
04877.2.202/08/27 23:49ID:yZsdlGNN
実は本家はマイナーバジョンアップしてるという罠
0488nobodyさん02/08/28 00:15ID:???
create operator classとかset search_path=publicとか
7.2.2でサポートされてます?7.3からかな?

select timestamp( date(now()) );
通るようになったかな。7.2.1だと↑通らん。

SELECT CAST( now() AS date ), now()::date, 'now'::date::timestamp;
通るからまぁいいんだけど。
0489nobodyさん02/08/28 06:15ID:???
7.2.2 は
> ALSO NOTE!!! This is a security update. A number of security related
> bugs were fixed. The update is mandatory!!
ということなので、さっさとアップデートした方がいいよ。

>>488
7.2.xは基本的にメンテナンスリリースなんで新機能は入りませんです。
0490nobodyさん02/08/28 06:40ID:???
>489
マイナーバージョンアップは、PGDATA領域そのまんまでも
OK?
0491nobodyさん02/08/28 08:46ID:???
>>490
OK
以下を参照ね。
http://www.jp.postgresql.org/sitess.html
0492nobodyさん02/08/29 11:09ID:V8Nh7P6Z
遅れ馳せながら
>>476さんありがとうございます。

項目の定義として、システム日付をデフォルトで入れるように
「日付 varchar(14) default to_char('now'::datetime, 'YYYYMMDDHH24MISS')」
という風に設定しているのですが、データを見ると日付の中にはテーブルを作成して
一番最初に取得したYYYYMMDDHH24MISSを何度も入れてしまいます。

名前 | 日付 |
--------------------------
aaa |20020829103253 |
bbbb |20020829103253 |
cccc |20020829103253 |

        ・

といった感じなのですが、このテーブル項目作成の定義は間違っているでしょうか。
0493nobodyさん02/08/29 11:43ID:???
>>492
http://www.postgresql.jp/document/pg721doc/user/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT
0494nobodyさん02/08/29 14:49ID:???
>>493さん
おかげでうまくいきました。
ありがとうございました。勉強になりました。
0495nobodyさん02/08/29 15:21ID:K7zpT3ze
更新履歴をデータベース化しようとしているのですが
INSERT INTO "whatsnew" VALUES(
'2002-08-29',
'{"<a href="/">XXXX</a>を更新しました", "YYYY"}'
);
と書くと前半部分<a href="/が無視されます。
"のエスケープする方法しらないでしょうか?
0496nobodyさん02/08/29 15:22ID:???
( ´,_ゝ`) プッ
0497nobodyさん02/08/29 15:32ID:???
>>495
\"
0498nobodyさん02/08/29 15:42ID:K7zpT3ze
>>497
それはやってみたんだけど、
テーブルの中身を確認したら無視されています。
0499nobodyさん02/08/29 15:43ID:???
ちょっと日本語変でごめん。
050049702/08/29 15:55ID:???
> '{\"<a href=\"/\">XXXX</a>を更新しました\", \"YYYY\"}'
これじゃだめなのね? なんでだろうね。
あと、"と'を混在しているのはなぜ? 全部"でかいてみ。

050149502/08/29 16:08ID:???
それでも変化なしでした。
テーブルの中身は「{">XXXX</a>を更新しました","YYYY"}」です。
あと'と"を混合してるのは下のページの影響です。
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/arrays.html
■ このスレッドは過去ログ倉庫に格納されています