Fix SELECT INTO and CREATE TABLE AS to create tables in the default
authorBruce Momjian <[email protected]>
Wed, 26 Apr 2006 23:01:13 +0000 (23:01 +0000)
committerBruce Momjian <[email protected]>
Wed, 26 Apr 2006 23:01:13 +0000 (23:01 +0000)
tablespace, not the base directory.

Kris Jurka

src/backend/executor/execMain.c

index ebf05c82cb3eb947a648b773c63d88c59ba5fd29..d0dfdfd33d2eb0d5296f0f3ce8c122cc00d47969 100644 (file)
@@ -36,6 +36,7 @@
 #include "catalog/heap.h"
 #include "catalog/namespace.h"
 #include "commands/tablecmds.h"
+#include "commands/tablespace.h"
 #include "commands/trigger.h"
 #include "executor/execdebug.h"
 #include "executor/execdefs.h"
@@ -731,6 +732,7 @@ InitPlan(QueryDesc *queryDesc, bool explainOnly)
        {
                char       *intoName;
                Oid                     namespaceId;
+               Oid                     tablespaceId;
                AclResult       aclresult;
                Oid                     intoRelationId;
                TupleDesc       tupdesc;
@@ -747,6 +749,16 @@ InitPlan(QueryDesc *queryDesc, bool explainOnly)
                        aclcheck_error(aclresult, ACL_KIND_NAMESPACE,
                                                   get_namespace_name(namespaceId));
 
+               tablespaceId = GetDefaultTablespace();
+               if (OidIsValid(tablespaceId)) {
+                       aclresult = pg_tablespace_aclcheck(tablespaceId, GetUserId(),
+                                                                                          ACL_CREATE);
+
+                       if (aclresult != ACLCHECK_OK)
+                               aclcheck_error(aclresult, ACL_KIND_TABLESPACE,
+                                                          get_tablespace_name(tablespaceId));
+               }
+
                /*
                 * have to copy tupType to get rid of constraints
                 */
@@ -754,7 +766,7 @@ InitPlan(QueryDesc *queryDesc, bool explainOnly)
 
                intoRelationId = heap_create_with_catalog(intoName,
                                                                                                  namespaceId,
-                                                                                                 InvalidOid,
+                                                                                                 tablespaceId,
                                                                                                  tupdesc,
                                                                                                  RELKIND_RELATION,
                                                                                                  false,