Commit 93e1f5de authored by Jan Wieck's avatar Jan Wieck

Automatically create toast tables on ALTER TABLE ... ADD COLUMN

and SELECT ... INTO ... too.

Jan
parent 030962da
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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 * NOTES
* The PerformAddAttribute() code, like most of the relation * The PerformAddAttribute() code, like most of the relation
...@@ -471,6 +471,13 @@ AlterTableAddColumn(const char *relationName, ...@@ -471,6 +471,13 @@ AlterTableAddColumn(const char *relationName,
heap_freetuple(reltup); heap_freetuple(reltup);
heap_close(rel, NoLock); 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) ...@@ -1255,6 +1262,7 @@ AlterTableCreateToastTable(const char *relationName, bool silent)
{ {
heap_close(rel, NoLock); heap_close(rel, NoLock);
heap_close(class_rel, NoLock); heap_close(class_rel, NoLock);
heap_freetuple(reltup);
return; return;
} }
...@@ -1276,8 +1284,18 @@ AlterTableCreateToastTable(const char *relationName, bool silent) ...@@ -1276,8 +1284,18 @@ AlterTableCreateToastTable(const char *relationName, bool silent)
} }
if (((Form_pg_class) GETSTRUCT(reltup))->reltoastrelid != InvalidOid) 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", elog(ERROR, "ALTER TABLE: relation \"%s\" already has a toast table",
relationName); relationName);
}
/* /*
* Create the toast table and its index * Create the toast table and its index
...@@ -1348,6 +1366,8 @@ AlterTableCreateToastTable(const char *relationName, bool silent) ...@@ -1348,6 +1366,8 @@ AlterTableCreateToastTable(const char *relationName, bool silent)
heap_close(class_rel, NoLock); heap_close(class_rel, NoLock);
heap_close(rel, NoLock); heap_close(rel, NoLock);
CommandCounterIncrement();
} }
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -35,6 +35,7 @@
#include "access/heapam.h" #include "access/heapam.h"
#include "catalog/heap.h" #include "catalog/heap.h"
#include "commands/command.h"
#include "commands/trigger.h" #include "commands/trigger.h"
#include "executor/execdebug.h" #include "executor/execdebug.h"
#include "executor/execdefs.h" #include "executor/execdefs.h"
...@@ -892,6 +893,11 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) ...@@ -892,6 +893,11 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate)
*/ */
CommandCounterIncrement(); CommandCounterIncrement();
/*
* Eventually create a TOAST table for the into relation
*/
AlterTableCreateToastTable(intoName, true);
intoRelationDesc = heap_open(intoRelationId, intoRelationDesc = heap_open(intoRelationId,
AccessExclusiveLock); AccessExclusiveLock);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment