diff options
author | Robert Haas <rhaas@postgresql.org> | 2011-07-03 17:34:47 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2011-07-03 17:34:47 -0400 |
commit | 5da79169d3e9f0fab47da03318c44075b3f824c5 (patch) | |
tree | 312828bda5b38877a6d9cd5c11061a339fee324a /src/backend/executor/execMain.c | |
parent | acb9198b960caaa2fe9f31258116eaa7c1154093 (diff) | |
download | postgresql-5da79169d3e9f0fab47da03318c44075b3f824c5.tar.gz postgresql-5da79169d3e9f0fab47da03318c44075b3f824c5.zip |
Fix bugs in relpersistence handling during table creation.
Unlike the relistemp field which it replaced, relpersistence must be
set correctly quite early during the table creation process, as we
rely on it quite early on for a number of purposes, including security
checks. Normally, this is set based on whether the user enters CREATE
TABLE, CREATE UNLOGGED TABLE, or CREATE TEMPORARY TABLE, but a
relation may also be made implicitly temporary by creating it in
pg_temp. This patch fixes the handling of that case, and also
disables creation of unlogged tables in temporary tablespace (such
table indeed skip WAL-logging, but we reject an explicit
specification) and creation of relations in the temporary schemas of
other sessions (which is not very sensible, and didn't work right
anyway).
Report by Amit Khandekar.
Diffstat (limited to 'src/backend/executor/execMain.c')
-rw-r--r-- | src/backend/executor/execMain.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 2f8deb470c5..eacd863647d 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -2414,6 +2414,13 @@ OpenIntoRel(QueryDesc *queryDesc) errmsg("ON COMMIT can only be used on temporary tables"))); /* + * Find namespace to create in, check its permissions + */ + intoName = into->rel->relname; + namespaceId = RangeVarGetAndCheckCreationNamespace(into->rel); + RangeVarAdjustRelationPersistence(into->rel, namespaceId); + + /* * Security check: disallow creating temp tables from security-restricted * code. This is needed because calling code might not expect untrusted * tables to appear in pg_temp at the front of its search path. @@ -2425,12 +2432,6 @@ OpenIntoRel(QueryDesc *queryDesc) errmsg("cannot create temporary table within security-restricted operation"))); /* - * Find namespace to create in, check its permissions - */ - intoName = into->rel->relname; - namespaceId = RangeVarGetAndCheckCreationNamespace(into->rel); - - /* * Select tablespace to use. If not specified, use default tablespace * (which may in turn default to database's default). */ |