mirror of https://github.com/postgres/postgres
Change order of operations in ALTER TABLE SET TABLESPACE so that we
don't hold an open file reference to the original table at the end. This is a good thing in any case, particularly so on Windows which cannot drop the table file otherwise.
This commit is contained in:
parent
ae449122cf
commit
d785841f83
|
@ -8,7 +8,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.124 2004/08/04 20:53:53 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.125 2004/08/13 04:50:28 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -5379,21 +5379,20 @@ ATExecSetTableSpace(Oid tableOid, Oid newTableSpace)
|
||||||
dstrel = smgropen(newrnode);
|
dstrel = smgropen(newrnode);
|
||||||
smgrcreate(dstrel, rel->rd_istemp, false);
|
smgrcreate(dstrel, rel->rd_istemp, false);
|
||||||
|
|
||||||
|
/* copy relation data to the new physical file */
|
||||||
|
copy_relation_data(rel, dstrel);
|
||||||
|
|
||||||
/* schedule unlinking old physical file */
|
/* schedule unlinking old physical file */
|
||||||
if (rel->rd_smgr == NULL)
|
if (rel->rd_smgr == NULL)
|
||||||
rel->rd_smgr = smgropen(rel->rd_node);
|
rel->rd_smgr = smgropen(rel->rd_node);
|
||||||
smgrscheduleunlink(rel->rd_smgr, rel->rd_istemp);
|
smgrscheduleunlink(rel->rd_smgr, rel->rd_istemp);
|
||||||
|
rel->rd_smgr = NULL;
|
||||||
/* copy relation data to the new physical file */
|
|
||||||
copy_relation_data(rel, dstrel);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now drop smgr references. We need not smgrclose() the old file,
|
* Now drop smgr references. The source was already dropped by
|
||||||
* since it will be dropped anyway at commit by the pending unlink.
|
* smgrscheduleunlink.
|
||||||
* We do need to get rid of relcache's reference to it, however.
|
|
||||||
*/
|
*/
|
||||||
smgrclose(dstrel);
|
smgrclose(dstrel);
|
||||||
rel->rd_smgr = NULL;
|
|
||||||
|
|
||||||
/* update the pg_class row */
|
/* update the pg_class row */
|
||||||
rd_rel->reltablespace = (newTableSpace == MyDatabaseTableSpace) ? InvalidOid : newTableSpace;
|
rd_rel->reltablespace = (newTableSpace == MyDatabaseTableSpace) ? InvalidOid : newTableSpace;
|
||||||
|
|
Loading…
Reference in New Issue