aboutsummaryrefslogtreecommitdiff
path: root/src/backend/catalog/toasting.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/catalog/toasting.c')
-rw-r--r--src/backend/catalog/toasting.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c
index 147b5abc190..0db90c2011a 100644
--- a/src/backend/catalog/toasting.c
+++ b/src/backend/catalog/toasting.c
@@ -36,9 +36,11 @@
#include "utils/syscache.h"
static void CheckAndCreateToastTable(Oid relOid, Datum reloptions,
- LOCKMODE lockmode, bool check);
+ LOCKMODE lockmode, bool check,
+ Oid OIDOldToast);
static bool create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid,
- Datum reloptions, LOCKMODE lockmode, bool check);
+ Datum reloptions, LOCKMODE lockmode, bool check,
+ Oid OIDOldToast);
static bool needs_toast_table(Relation rel);
@@ -57,30 +59,34 @@ static bool needs_toast_table(Relation rel);
void
AlterTableCreateToastTable(Oid relOid, Datum reloptions, LOCKMODE lockmode)
{
- CheckAndCreateToastTable(relOid, reloptions, lockmode, true);
+ CheckAndCreateToastTable(relOid, reloptions, lockmode, true, InvalidOid);
}
void
-NewHeapCreateToastTable(Oid relOid, Datum reloptions, LOCKMODE lockmode)
+NewHeapCreateToastTable(Oid relOid, Datum reloptions, LOCKMODE lockmode,
+ Oid OIDOldToast)
{
- CheckAndCreateToastTable(relOid, reloptions, lockmode, false);
+ CheckAndCreateToastTable(relOid, reloptions, lockmode, false, OIDOldToast);
}
void
NewRelationCreateToastTable(Oid relOid, Datum reloptions)
{
- CheckAndCreateToastTable(relOid, reloptions, AccessExclusiveLock, false);
+ CheckAndCreateToastTable(relOid, reloptions, AccessExclusiveLock, false,
+ InvalidOid);
}
static void
-CheckAndCreateToastTable(Oid relOid, Datum reloptions, LOCKMODE lockmode, bool check)
+CheckAndCreateToastTable(Oid relOid, Datum reloptions, LOCKMODE lockmode,
+ bool check, Oid OIDOldToast)
{
Relation rel;
rel = table_open(relOid, lockmode);
/* create_toast_table does all the work */
- (void) create_toast_table(rel, InvalidOid, InvalidOid, reloptions, lockmode, check);
+ (void) create_toast_table(rel, InvalidOid, InvalidOid, reloptions, lockmode,
+ check, OIDOldToast);
table_close(rel, NoLock);
}
@@ -104,7 +110,7 @@ BootstrapToastTable(char *relName, Oid toastOid, Oid toastIndexOid)
/* create_toast_table does all the work */
if (!create_toast_table(rel, toastOid, toastIndexOid, (Datum) 0,
- AccessExclusiveLock, false))
+ AccessExclusiveLock, false, InvalidOid))
elog(ERROR, "\"%s\" does not require a toast table",
relName);
@@ -121,7 +127,8 @@ BootstrapToastTable(char *relName, Oid toastOid, Oid toastIndexOid)
*/
static bool
create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid,
- Datum reloptions, LOCKMODE lockmode, bool check)
+ Datum reloptions, LOCKMODE lockmode, bool check,
+ Oid OIDOldToast)
{
Oid relOid = RelationGetRelid(rel);
HeapTuple reltup;
@@ -258,7 +265,7 @@ create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid,
false,
true,
true,
- InvalidOid,
+ OIDOldToast,
NULL);
Assert(toast_relid != InvalidOid);