[pgsql-jp: 27674] Re: 一時テーブルのmetadata 取得

S.Okazaki okazaki @ jp-hb.com
2002年 10月 18日 (金) 09:56:29 JST


おはようございます、岡崎です。

> あまり役に立たない情報で申し訳ないですが。。。。。
> (snip)
> 一時表は、カタログ上では、pg_tmp で始まる表名になるようです。
> 
> 後は、その命名規則がわかれば、カタログ情報(メタデーター)
> を取り出せるのですが、私は、一時表の命名規則までは調べて
> いません。ソースコードを読めばいいのでしょうが、ご存知の
> 方いらしたらお教えください。

近藤様、ありがとうございます。
ご教示いただき、「ああ…なるほど」と分かるのですが、
自分ではとうてい気づくことが出来ませんでした。
正直、一時テーブルからそう言った情報を取り出すことを、
これほどの問題だとは思っていませんでした(^^;

> そもそも、一時表のメタデーターを取得しなければならない
> というのは、どういうケースでしょうか。ちょっと必要性が
> 思いつかないのですが。

確かにそうでした。
やりたいことを書けば、今回私がやろうとした
「一時テーブルからmetaデータを取りだして…」
等と言うことはやらなくても、済む方法をご教示いただけた
事ですね(^^;
実際やりたいことは言ったって単純です。

# ここからはPHPの話になり、またこのMLでPHPの話をすることを
# 不快に思う方もいらっしゃると思いますが、ご容赦下さい。

これは赤マンモス本において石井様が書かれてものですが、簡単に
説明させていただきますと、

[1]metaデータを取得
select a.attnum, a.attname, t.typname, a.attlen, a.atttypmod,
a.attnotnull, a.atthasdef,c.oid from pg_class c, pg_attribute a,
pg_type t where c.relname='table_name' and a.attnum>0
and a.attrelid=c.oid and a.atttypid=t.oid order by a.attnum;

[2]同様に、それぞれの変数型事にオペレータ(= , >= 等)を取得
select o.oprname as op, t1.typname as left_arg, t2.typname as right_arg,
t0.typname as result, obj_description(p.oid) as description from
pg_proc p, pg_type t0, pg_type t1, pg_type t2, 
pg_operator o where t1.typname='$typename' and p.prorettype=t0.oid and 
regproctooid(o.oprcode)=p.oid and p.pronargs=2 and o.oprleft=t1.oid and
o.oprright=t2.oid and t0.typname='bool' and t1.typname=t2.typname;

[3]それらを元に、検索フォームを生成する。
このメンバ関数名を print_form($table)とする。

と言う流れのクラスファイルがあります。
通常(参考書通り)では、検索フォームを生成する為のテーブルは
通常のテーブルなので、テーブルをメンバ変数にして、上記
[1] , [2] をコンストラクタで実行します。

今回私がやりたいことは、複数のテーブルにまたがったデータにたいして、
検索フォームを生成したいのです。
その為、table は通常の変数として与え、また
[1] , [2] をコンストラクタにはせずに、
print_form($table) 内で実行するようにしました。

そこで、$tableを create temp table tmp_table as …
で生成したかったのです。

以上長文になってしまい、申し訳ありません。

一応、私なりの解決策として、最初からtmp_tableを用意しておき、
insert into tmp_table as select …
として対応していこうと思っております。


/_/_/_/_/_/_/_/_/_/_/_/_/_/
Japan Human Base 
Sotaro Okazaki
Email : okazaki @ jp-hb.com
/_/_/_/_/_/_/_/_/_/_/_/_/_/




pgsql-jp メーリングリストの案内