mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-30 19:00:29 +08:00
Automatically create toast tables on ALTER TABLE ... ADD COLUMN
and SELECT ... INTO ... too. Jan
This commit is contained in:
parent
030962da26
commit
93e1f5de0b
@ -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,
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|||||||
|
|
||||||
heap_close(class_rel, NoLock);
|
heap_close(class_rel, NoLock);
|
||||||
heap_close(rel, NoLock);
|
heap_close(rel, NoLock);
|
||||||
|
|
||||||
|
CommandCounterIncrement();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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 @@
|
|||||||
|
|
||||||
#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)
|
|||||||
*/
|
*/
|
||||||
CommandCounterIncrement();
|
CommandCounterIncrement();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Eventually create a TOAST table for the into relation
|
||||||
|
*/
|
||||||
|
AlterTableCreateToastTable(intoName, true);
|
||||||
|
|
||||||
intoRelationDesc = heap_open(intoRelationId,
|
intoRelationDesc = heap_open(intoRelationId,
|
||||||
AccessExclusiveLock);
|
AccessExclusiveLock);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user