@ -38,9 +38,11 @@
Oid binary_upgrade_next_toast_pg_type_oid = InvalidOid ;
Oid binary_upgrade_next_toast_pg_type_oid = InvalidOid ;
static void CheckAndCreateToastTable ( Oid relOid , Datum reloptions ,
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 ,
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 ) ;
static bool needs_toast_table ( Relation rel ) ;
@ -59,30 +61,34 @@ static bool needs_toast_table(Relation rel);
void
void
AlterTableCreateToastTable ( Oid relOid , Datum reloptions , LOCKMODE lockmode )
AlterTableCreateToastTable ( Oid relOid , Datum reloptions , LOCKMODE lockmode )
{
{
CheckAndCreateToastTable ( relOid , reloptions , lockmode , true ) ;
CheckAndCreateToastTable ( relOid , reloptions , lockmode , true , InvalidOid ) ;
}
}
void
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
void
NewRelationCreateToastTable ( Oid relOid , Datum reloptions )
NewRelationCreateToastTable ( Oid relOid , Datum reloptions )
{
{
CheckAndCreateToastTable ( relOid , reloptions , AccessExclusiveLock , false ) ;
CheckAndCreateToastTable ( relOid , reloptions , AccessExclusiveLock , false ,
InvalidOid ) ;
}
}
static void
static void
CheckAndCreateToastTable ( Oid relOid , Datum reloptions , LOCKMODE lockmode , bool check )
CheckAndCreateToastTable ( Oid relOid , Datum reloptions , LOCKMODE lockmode ,
bool check , Oid OIDOldToast )
{
{
Relation rel ;
Relation rel ;
rel = table_open ( relOid , lockmode ) ;
rel = table_open ( relOid , lockmode ) ;
/* create_toast_table does all the work */
/* 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 ) ;
table_close ( rel , NoLock ) ;
}
}
@ -108,7 +114,7 @@ BootstrapToastTable(char *relName, Oid toastOid, Oid toastIndexOid)
/* create_toast_table does all the work */
/* create_toast_table does all the work */
if ( ! create_toast_table ( rel , toastOid , toastIndexOid , ( Datum ) 0 ,
if ( ! create_toast_table ( rel , toastOid , toastIndexOid , ( Datum ) 0 ,
AccessExclusiveLock , false ) )
AccessExclusiveLock , false , InvalidOid ) )
elog ( ERROR , " \" %s \" does not require a toast table " ,
elog ( ERROR , " \" %s \" does not require a toast table " ,
relName ) ;
relName ) ;
@ -125,7 +131,8 @@ BootstrapToastTable(char *relName, Oid toastOid, Oid toastIndexOid)
*/
*/
static bool
static bool
create_toast_table ( Relation rel , Oid toastOid , Oid toastIndexOid ,
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 ) ;
Oid relOid = RelationGetRelid ( rel ) ;
HeapTuple reltup ;
HeapTuple reltup ;
@ -270,7 +277,7 @@ create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid,
false ,
false ,
true ,
true ,
true ,
true ,
InvalidOid ,
OIDOldToast ,
NULL ) ;
NULL ) ;
Assert ( toast_relid ! = InvalidOid ) ;
Assert ( toast_relid ! = InvalidOid ) ;