Automatically create toast tables on ALTER TABLE ... ADD COLUMN
authorJan Wieck <JanWieck@Yahoo.com>
Wed, 5 Jul 2000 13:22:25 +0000 (13:22 +0000)
committerJan Wieck <JanWieck@Yahoo.com>
Wed, 5 Jul 2000 13:22:25 +0000 (13:22 +0000)
and SELECT ... INTO ... too.

Jan

src/backend/commands/command.c
src/backend/executor/execMain.c

index bb77fdf11fc74bd76ea6bcc31da8c63740d6a78b..7c5d4edd8d16ae872d00b24913dcb6038a7cfa0b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.84 2000/07/05 12:45:25 wieck Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.85 2000/07/05 13:22:23 wieck Exp $
  *
  * NOTES
  *   The PerformAddAttribute() code, like most of the relation
@@ -471,6 +471,13 @@ AlterTableAddColumn(const char *relationName,
    heap_freetuple(reltup);
 
    heap_close(rel, NoLock);
+
+   /*
+    * Automatically create the secondary relation for TOAST
+    * if it formerly had no such but now has toastable attributes.
+    */
+   CommandCounterIncrement();
+   AlterTableCreateToastTable(relationName, true);
 }
 
 
@@ -1255,6 +1262,7 @@ AlterTableCreateToastTable(const char *relationName, bool silent)
        {
            heap_close(rel, NoLock);
            heap_close(class_rel, NoLock);
+           heap_freetuple(reltup);
            return;
        }
 
@@ -1276,8 +1284,18 @@ AlterTableCreateToastTable(const char *relationName, bool silent)
    }
 
    if (((Form_pg_class) GETSTRUCT(reltup))->reltoastrelid != InvalidOid)
+   {
+       if (silent)
+       {
+           heap_close(rel, NoLock);
+           heap_close(class_rel, NoLock);
+           heap_freetuple(reltup);
+           return;
+       }
+
        elog(ERROR, "ALTER TABLE: relation \"%s\" already has a toast table",
                relationName);
+    }
 
    /*
     * Create the toast table and its index
@@ -1348,6 +1366,8 @@ AlterTableCreateToastTable(const char *relationName, bool silent)
 
    heap_close(class_rel, NoLock);
    heap_close(rel, NoLock);
+
+   CommandCounterIncrement();
 }
 
 
index 7492c7ae2f6355813b4c0439a437cf3baa18b1bc..c707315081dede716d005f60288a6d54bba48e81 100644 (file)
@@ -27,7 +27,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.119 2000/07/04 06:11:33 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.120 2000/07/05 13:22:25 wieck Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -35,6 +35,7 @@
 
 #include "access/heapam.h"
 #include "catalog/heap.h"
+#include "commands/command.h"
 #include "commands/trigger.h"
 #include "executor/execdebug.h"
 #include "executor/execdefs.h"
@@ -892,6 +893,11 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate)
                 */
                CommandCounterIncrement();
 
+               /*
+                * Eventually create a TOAST table for the into relation
+                */
+               AlterTableCreateToastTable(intoName, true);
+
                intoRelationDesc = heap_open(intoRelationId,
                                             AccessExclusiveLock);
            }