Thread: pg_tables and temp tables
Hi:
How user specific is pg_tables when it comes to temporary tables? It seems to pick up the existence of a a temp table created by the same user but a different session. Here’s the demo scenario....
Session 1:
mydb=# create temporary table foo (a int);
Session 2:
stdb2=# select tablename from pg_tables where tablename = 'foo';
tablename
-----------
foo
(1 row)
Session 1:
stdb=# drop table foo;
Session 2:
stdb2=# select tablename from pg_tables where tablename = 'foo';
tablename
-----------
(0 rows)
mydb=# insert into foo (a) values (3);
ERROR: relation "foo" does not exist
So Session 2 is detecting foo, but it doesn’t own it.
I can live with this as long as there’s a way that I can determine if the table it found does not belong to the current session. Is there a more elegant way of doing this other than trying to do something with the table (select, insert, delete...) and trapping a failed attempt? The contents of pg_tables appears to be the same from both the owning and non-owning sessions.
Thanks in Advance for any help.
v8.2.0 on 64-bit suse-linux
-dave
"Gauthier, Dave" <dave.gauthier@intel.com> writes: > How user specific is pg_tables when it comes to temporary tables? regression=# \d pg_tables ... View definition: SELECT n.nspname AS schemaname, c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, t.spcname AS tablespace,c.relhasindex AS hasindexes, c.relhasrules AS hasrules, c.reltriggers > 0 AS hastriggers FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_tablespace t ON t.oid = c.reltablespace WHERE c.relkind = 'r'::"char"; Not at all, apparently. This looks to me like it will pick up every table in the database, temporary or otherwise. Perhaps that's not a good idea ... > I can live with this as long as there's a way that I can determine if > the table it found does not belong to the current session. You need to pay attention to the schema it was found in. "has_schema_privilege(schemaname, 'USAGE')" might be a suitable filter. regards, tom lane