@ -25,6 +25,7 @@
# include "catalog/catversion.h"
# include "catalog/pg_control.h"
# include "common/file_perm.h"
# include "common/file_utils.h"
# include "common/restricted_token.h"
# include "getopt_long.h"
# include "storage/bufpage.h"
@ -701,50 +702,15 @@ updateControlFile(ControlFileData *ControlFile)
*
* We do this once , for the whole data directory , for performance reasons . At
* the end of pg_rewind ' s run , the kernel is likely to already have flushed
* most dirty buffers to disk . Additionally initdb - S uses a two - pass approach
* ( only initiating writeback in the first pass ) , which often reduces the
* overall amount of IO noticeably .
* most dirty buffers to disk . Additionally fsync_pgdata uses a two - pass
* approach ( only initiating writeback in the first pass ) , which often reduces
* the overall amount of IO noticeably .
*/
static void
syncTargetDirectory ( const char * argv0 )
{
int ret ;
# define MAXCMDLEN (2 * MAXPGPATH)
char exec_path [ MAXPGPATH ] ;
char cmd [ MAXCMDLEN ] ;
/* locate initdb binary */
if ( ( ret = find_other_exec ( argv0 , " initdb " ,
" initdb (PostgreSQL) " PG_VERSION " \n " ,
exec_path ) ) < 0 )
{
char full_path [ MAXPGPATH ] ;
if ( find_my_exec ( argv0 , full_path ) < 0 )
strlcpy ( full_path , progname , sizeof ( full_path ) ) ;
if ( ret = = - 1 )
pg_fatal ( " The program \" initdb \" is needed by %s but was \n "
" not found in the same directory as \" %s \" . \n "
" Check your installation. \n " , progname , full_path ) ;
else
pg_fatal ( " The program \" initdb \" was found by \" %s \" \n "
" but was not the same version as %s. \n "
" Check your installation. \n " , full_path , progname ) ;
}
/* only skip processing after ensuring presence of initdb */
if ( dry_run )
return ;
/* finally run initdb -S */
if ( debug )
snprintf ( cmd , MAXCMDLEN , " \" %s \" -D \" %s \" -S " ,
exec_path , datadir_target ) ;
else
snprintf ( cmd , MAXCMDLEN , " \" %s \" -D \" %s \" -S > \" %s \" " ,
exec_path , datadir_target , DEVNULL ) ;
if ( system ( cmd ) ! = 0 )
pg_fatal ( " sync of target directory failed \n " ) ;
fsync_pgdata ( datadir_target , progname , PG_VERSION_NUM ) ;
}