diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index d3c3c7aba0..9e96db06a3 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -110,7 +110,7 @@ static void CreateDirAndVersionFile(char *dbpath, Oid dbid, Oid tsid, static List *GetDatabaseRelationList(Oid srctbid, Oid srcdbid, char *srcpath); static void RelationCopyStorageUsingBuffer(SMgrRelation src, SMgrRelation dst, ForkNumber forkNum, char relpersistence); -static void CopyDatabase(Oid src_dboid, Oid dboid, Oid src_tsid, Oid dst_tsid); +static void CopyDatabase(Oid src_dboid, Oid dboid, Oid src_tsid, Oid dst_tsid, bool movedb); /* * CreateDirAndVersionFile - Create database directory and write out the @@ -448,7 +448,7 @@ RelationCopyStorageUsingBuffer(SMgrRelation src, SMgrRelation dst, * to the target database, block by block and WAL log all the operations. */ static void -CopyDatabase(Oid src_dboid, Oid dst_dboid, Oid src_tsid, Oid dst_tsid) +CopyDatabase(Oid src_dboid, Oid dst_dboid, Oid src_tsid, Oid dst_tsid, bool movedb) { char *srcpath; char *dstpath; @@ -500,7 +500,12 @@ CopyDatabase(Oid src_dboid, Oid dst_dboid, Oid src_tsid, Oid dst_tsid) * database. */ if (srcrnode.spcNode != src_tsid) - dstrnode.spcNode = srcrnode.spcNode; + { + if (!movedb) + dstrnode.spcNode = srcrnode.spcNode; + else + continue; + } else dstrnode.spcNode = dst_tsid; @@ -1006,7 +1011,7 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt) PG_ENSURE_ERROR_CLEANUP(createdb_failure_callback, PointerGetDatum(&fparms)); { - CopyDatabase(src_dboid, dboid, src_deftablespace, dst_deftablespace); + CopyDatabase(src_dboid, dboid, src_deftablespace, dst_deftablespace, false); } PG_END_ENSURE_ERROR_CLEANUP(createdb_failure_callback, PointerGetDatum(&fparms)); @@ -1560,7 +1565,7 @@ movedb(const char *dbname, const char *tblspcname) PG_ENSURE_ERROR_CLEANUP(movedb_failure_callback, PointerGetDatum(&fparms)); { - CopyDatabase(db_id, db_id, src_tblspcoid, dst_tblspcoid); + CopyDatabase(db_id, db_id, src_tblspcoid, dst_tblspcoid, true); /* * Update the database's pg_database tuple