[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 メーリングリストの案内