@ -15,7 +15,7 @@
*
*
* IDENTIFICATION
* $ PostgreSQL : pgsql / src / bin / pg_dump / pg_backup_archiver . c , v 1.82 2004 / 01 / 04 04 : 02 : 15 tgl Exp $
* $ PostgreSQL : pgsql / src / bin / pg_dump / pg_backup_archiver . c , v 1.83 2004 / 02 / 24 03 : 35 : 19 tgl Exp $
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
@ -49,6 +49,7 @@ static ArchiveHandle *_allocAH(const char *FileSpec, const ArchiveFormat fmt,
const int compression , ArchiveMode mode ) ;
static int _printTocEntry ( ArchiveHandle * AH , TocEntry * te , RestoreOptions * ropt , bool isData ) ;
static void _doSetFixedOutputState ( ArchiveHandle * AH ) ;
static void _doSetSessionAuth ( ArchiveHandle * AH , const char * user ) ;
static void _reconnectToDB ( ArchiveHandle * AH , const char * dbname , const char * user ) ;
static void _becomeUser ( ArchiveHandle * AH , const char * user ) ;
@ -200,6 +201,11 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
ahprintf ( AH , " -- \n -- PostgreSQL database dump \n -- \n \n " ) ;
/*
* Establish important parameter values right away .
*/
_doSetFixedOutputState ( AH ) ;
/*
* Drop the items at the start , in reverse order
*/
@ -1568,7 +1574,6 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
AH - > currUser = strdup ( " " ) ; /* So it's valid, but we can free() it
* later if necessary */
AH - > currSchema = strdup ( " " ) ; /* ditto */
AH - > chk_fn_bodies = true ; /* assumed default state */
AH - > toc = ( TocEntry * ) calloc ( 1 , sizeof ( TocEntry ) ) ;
if ( ! AH - > toc )
@ -1826,6 +1831,10 @@ _tocEntryRequired(TocEntry *te, RestoreOptions *ropt)
{
teReqs res = 3 ; /* Schema = 1, Data = 2, Both = 3 */
/* ENCODING objects are dumped specially, so always reject here */
if ( strcmp ( te - > desc , " ENCODING " ) = = 0 )
return 0 ;
/* If it's an ACL, maybe ignore it */
if ( ropt - > aclsSkip & & strcmp ( te - > desc , " ACL " ) = = 0 )
return 0 ;
@ -1910,6 +1919,33 @@ _tocEntryRequired(TocEntry *te, RestoreOptions *ropt)
return res ;
}
/*
* Issue SET commands for parameters that we want to have set the same way
* at all times during execution of a restore script .
*/
static void
_doSetFixedOutputState ( ArchiveHandle * AH )
{
TocEntry * te ;
/* If we have an encoding setting, emit that */
te = AH - > toc - > next ;
while ( te ! = AH - > toc )
{
if ( strcmp ( te - > desc , " ENCODING " ) = = 0 )
{
ahprintf ( AH , " %s " , te - > defn ) ;
break ;
}
te = te - > next ;
}
/* Make sure function checking is disabled */
ahprintf ( AH , " SET check_function_bodies = false; \n " ) ;
ahprintf ( AH , " \n " ) ;
}
/*
* Issue a SET SESSION AUTHORIZATION command . Caller is responsible
* for updating state if appropriate . If user is NULL or an empty string ,
@ -1991,7 +2027,8 @@ _reconnectToDB(ArchiveHandle *AH, const char *dbname, const char *user)
free ( AH - > currSchema ) ;
AH - > currSchema = strdup ( " " ) ;
AH - > chk_fn_bodies = true ; /* assumed default state */
/* re-establish fixed state */
_doSetFixedOutputState ( AH ) ;
}
/*
@ -2087,13 +2124,6 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat
_becomeOwner ( AH , te ) ;
_selectOutputSchema ( AH , te - > namespace ) ;
/* If it's a function, make sure function checking is disabled */
if ( AH - > chk_fn_bodies & & strcmp ( te - > desc , " FUNCTION " ) = = 0 )
{
ahprintf ( AH , " SET check_function_bodies = false; \n \n " ) ;
AH - > chk_fn_bodies = false ;
}
if ( isData )
pfx = " Data for " ;
else