Обсуждение: Temp table woes
This only works as a superuser, but it's wrong nevertheless: Session 1: postgres=# CREATE temp table foo (x int); CREATE TABLE Session 2: postgres=# SELECT * FROM pg_temp_1.foo; x --- (0 rows) postgres=# INSERT INTO pg_temp_1.foo values (1); INSERT 0 1 The insert in session 2 goes to a buffer in the shared buffer cache, which causes problems at the next checkpoint: ERROR: could not open relation 1663/11502/24576: No such file or directory CONTEXT: writing block 0 of relation 1663/11502/24576 WARNING: could not write block 0 of 1663/11502/24576 DETAIL: Multiple failures --- write error might be permanent. Without superuser rights, you'll get a permission denied error trying to access the table from another session. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com
Heikki Linnakangas <heikki@enterprisedb.com> writes:
> This only works as a superuser, but it's wrong nevertheless:
> Session 1:
> postgres=# CREATE temp table foo (x int);
> CREATE TABLE
> Session 2:
> postgres=# INSERT INTO pg_temp_1.foo values (1);
> INSERT 0 1
I can't get excited about preventing that --- it looks to me like a
superuser deliberately trying to break the system, and there are plenty
of other ways he can do that.
regards, tom lane