[pgsql-jp: 27398] Re: 一時テーブルの有無を調べる方法は?

Naofumi Kondoh nkon @ shonan.ne.jp
2002年 9月 12日 (木) 15:33:44 JST


ソフト工房の近藤です。

SAKANAKA Tatsumi wrote:
> さかなかと申します。

....略....

> たとえば 'CREATE TEMPORARY TABLE temp' すると pg_tables には
> tablename が 'temp' であるような行はできません(pg_temp_???? な
> のかな?)。
> システムカタログを探してみましたが、うまく見つけられませんでした。
....略....

本題は解決したようなので、カタログの方を。

CREATE TEMP TABLE tmpaaaa ; とすると、pg_class に、
relname が pg_temp_1877_0 というような名前の表ができます。

select oid, * from tmpaaaa; としても、
select oid, * from pg_temp_1877_0; としても同じ OID が
返るので、これが一時表ですね。

でも、CREATE した一時表の名前とセッションを pg_class 他
のカタログと結び付けるところがわかりませんでした。

システムカタログに対応した UNIX FILE の stat をみると、
一時表作成で更新されているカタログは、次の3つですね。

pg_class
pg_type
pg_attribute

やはり、ソースコード読むしかないのかな。


面白いことに、pg_class.relname を使うと、他のセッションや別
のユーザーから一時表が読めますね。pg_class.relacl が NULL
になっています。一時表を REVOKE ALL ON tmpaaaa from PUBLIC;
とするとエラーになるので、適当に GRANT してから、REVOKE,
GRANT すると、relacl に GRANT した情報が入って、他のユーザー
からは読めなくなりました。

Version は、 PostgreSQL 7.2.1 です。

役立たずの情報で申し訳ない。

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
 (株)ソフト工房   近藤直文        Email:  nkon @ shonan.ne.jp
http://www.SOFTKOUBOU.co.jp/      http://www.shonan.ne.jp/~nkon/
2002-09-26(木)19:00-21:30 第6回 JPUG 業務アプリ分科会 勉強会
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/





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