Definition at line 3286 of file dbcommands.c.
3287{
3289
3290
3292
3294 {
3297 char *src_path;
3298 char *dst_path;
3299 char *parent_path;
3301
3304
3305
3306
3307
3308
3309
3310 if (
stat(dst_path, &st) == 0 &&
S_ISDIR(st.st_mode))
3311 {
3312 if (!
rmtree(dst_path,
true))
3313
3315 (
errmsg(
"some useless files may be left behind in old database directory \"%s\"",
3316 dst_path)));
3317 }
3318
3319
3320
3321
3322
3323 parent_path =
pstrdup(dst_path);
3325 if (
stat(parent_path, &st) < 0)
3326 {
3327 if (errno != ENOENT)
3329 errmsg(
"could not stat directory \"%s\": %m",
3330 dst_path));
3331
3332
3334 }
3336
3337
3338
3339
3340
3341
3342
3343 if (
stat(src_path, &st) < 0 && errno == ENOENT)
3345
3346
3347
3348
3349
3351
3352
3354
3355
3356
3357
3358
3359
3360 copydir(src_path, dst_path,
false);
3361
3364 }
3366 {
3369 char *dbpath;
3370 char *parent_path;
3371
3373
3374
3375 parent_path =
pstrdup(dbpath);
3379
3380
3382 true);
3384 }
3386 {
3388 char *dst_path;
3390
3392 {
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3405 }
3406
3407
3409
3410
3412
3413
3415
3416
3418
3419
3421
3423 {
3425
3426
3427 if (!
rmtree(dst_path,
true))
3429 (
errmsg(
"some useless files may be left behind in old database directory \"%s\"",
3430 dst_path)));
3432 }
3433
3435 {
3436
3437
3438
3439
3440
3441
3442
3444 }
3445 }
3446 else
3447 elog(
PANIC,
"dbase_redo: unknown op code %u", info);
3448}
void DropDatabaseBuffers(Oid dbid)
void FlushDatabaseBuffers(Oid dbid)
void copydir(const char *fromdir, const char *todir, bool recurse)
static void CreateDirAndVersionFile(char *dbpath, Oid dbid, Oid tsid, bool isRedo)
static void recovery_create_dbdir(char *path, bool only_tblspc)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
Assert(PointerIsAligned(start, uint64))
void UnlockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
void LockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
#define AccessExclusiveLock
char * pstrdup(const char *in)
void pfree(void *pointer)
void ForgetDatabaseSyncRequests(Oid dbid)
void get_parent_directory(char *path)
void WaitForProcSignalBarrier(uint64 generation)
uint64 EmitProcSignalBarrier(ProcSignalBarrierType type)
@ PROCSIGNAL_BARRIER_SMGRRELEASE
char * GetDatabasePath(Oid dbOid, Oid spcOid)
bool rmtree(const char *path, bool rmtopdir)
void ReplicationSlotsDropDBSlots(Oid dboid)
void ResolveRecoveryConflictWithDatabase(Oid dbid)
#define XLogRecHasAnyBlockRefs(decoder)
void XLogDropDatabase(Oid dbid)
References AccessExclusiveLock, Assert(), copydir(), CreateDirAndVersionFile(), xl_dbase_create_file_copy_rec::db_id, xl_dbase_create_wal_log_rec::db_id, xl_dbase_drop_rec::db_id, DropDatabaseBuffers(), elog, EmitProcSignalBarrier(), ereport, errmsg(), FATAL, FlushDatabaseBuffers(), ForgetDatabaseSyncRequests(), get_parent_directory(), GetDatabasePath(), i, InHotStandby, LockSharedObjectForSession(), xl_dbase_drop_rec::ntablespaces, PANIC, pfree(), PROCSIGNAL_BARRIER_SMGRRELEASE, pstrdup(), recovery_create_dbdir(), ReplicationSlotsDropDBSlots(), ResolveRecoveryConflictWithDatabase(), rmtree(), S_ISDIR, xl_dbase_create_file_copy_rec::src_db_id, xl_dbase_create_file_copy_rec::src_tablespace_id, stat::st_mode, stat, xl_dbase_create_file_copy_rec::tablespace_id, xl_dbase_create_wal_log_rec::tablespace_id, xl_dbase_drop_rec::tablespace_ids, UnlockSharedObjectForSession(), WaitForProcSignalBarrier(), WARNING, XLOG_DBASE_CREATE_FILE_COPY, XLOG_DBASE_CREATE_WAL_LOG, XLOG_DBASE_DROP, XLogDropDatabase(), XLogRecGetData, XLogRecGetInfo, and XLogRecHasAnyBlockRefs.