Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9f87da1

Browse files
committed
Refactor some code for ALTER TABLE SET LOGGED/UNLOGGED in tablecmds.c
Both sub-commands use the same routine to switch the relpersistence of arelation, duplicated the same checks, and used a style inconsistent withaccess methods and tablespaces.SET LOGEED/UNLOGGED is refactored to avoid any duplication, setting thereason why a relation rewrite happens within ATPrepChangePersistence().This shaves some code.Discussion:https://postgr.es/m/ZiiyGFTBNkqcMQi_@paquier.xyz
1 parentd7fe02f commit9f87da1

File tree

1 file changed

+14
-30
lines changed

1 file changed

+14
-30
lines changed

‎src/backend/commands/tablecmds.c

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,8 @@ static ObjectAddress ATExecClusterOn(Relation rel, const char *indexName,
590590
static void ATExecDropCluster(Relation rel, LOCKMODE lockmode);
591591
static void ATPrepSetAccessMethod(AlteredTableInfo *tab, Relation rel, const char *amname);
592592
static void ATExecSetAccessMethodNoStorage(Relation rel, Oid newAccessMethodId);
593-
static bool ATPrepChangePersistence(Relation rel, bool toLogged);
593+
static void ATPrepChangePersistence(AlteredTableInfo *tab, Relation rel,
594+
bool toLogged);
594595
static void ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel,
595596
const char *tablespacename, LOCKMODE lockmode);
596597
static void ATExecSetTableSpace(Oid tableOid, Oid newTableSpace, LOCKMODE lockmode);
@@ -4953,33 +4954,13 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd,
49534954
pass = AT_PASS_MISC;
49544955
break;
49554956
case AT_SetLogged:/* SET LOGGED */
4956-
ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_SEQUENCE);
4957-
if (tab->chgPersistence)
4958-
ereport(ERROR,
4959-
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4960-
errmsg("cannot change persistence setting twice")));
4961-
tab->chgPersistence = ATPrepChangePersistence(rel, true);
4962-
/* force rewrite if necessary; see comment in ATRewriteTables */
4963-
if (tab->chgPersistence)
4964-
{
4965-
tab->rewrite |= AT_REWRITE_ALTER_PERSISTENCE;
4966-
tab->newrelpersistence = RELPERSISTENCE_PERMANENT;
4967-
}
4968-
pass = AT_PASS_MISC;
4969-
break;
49704957
case AT_SetUnLogged:/* SET UNLOGGED */
49714958
ATSimplePermissions(cmd->subtype, rel, ATT_TABLE | ATT_SEQUENCE);
49724959
if (tab->chgPersistence)
49734960
ereport(ERROR,
49744961
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
49754962
errmsg("cannot change persistence setting twice")));
4976-
tab->chgPersistence = ATPrepChangePersistence(rel, false);
4977-
/* force rewrite if necessary; see comment in ATRewriteTables */
4978-
if (tab->chgPersistence)
4979-
{
4980-
tab->rewrite |= AT_REWRITE_ALTER_PERSISTENCE;
4981-
tab->newrelpersistence = RELPERSISTENCE_UNLOGGED;
4982-
}
4963+
ATPrepChangePersistence(tab, rel, cmd->subtype == AT_SetLogged);
49834964
pass = AT_PASS_MISC;
49844965
break;
49854966
case AT_DropOids:/* SET WITHOUT OIDS */
@@ -16894,12 +16875,9 @@ ATExecSetCompression(Relation rel,
1689416875
* This verifies that we're not trying to change a temp table. Also,
1689516876
* existing foreign key constraints are checked to avoid ending up with
1689616877
* permanent tables referencing unlogged tables.
16897-
*
16898-
* Return value is false if the operation is a no-op (in which case the
16899-
* checks are skipped), otherwise true.
1690016878
*/
16901-
staticbool
16902-
ATPrepChangePersistence(Relation rel, bool toLogged)
16879+
staticvoid
16880+
ATPrepChangePersistence(AlteredTableInfo *tab,Relation rel, bool toLogged)
1690316881
{
1690416882
Relationpg_constraint;
1690516883
HeapTupletuple;
@@ -16923,12 +16901,12 @@ ATPrepChangePersistence(Relation rel, bool toLogged)
1692316901
case RELPERSISTENCE_PERMANENT:
1692416902
if (toLogged)
1692516903
/* nothing to do */
16926-
return false;
16904+
return;
1692716905
break;
1692816906
case RELPERSISTENCE_UNLOGGED:
1692916907
if (!toLogged)
1693016908
/* nothing to do */
16931-
return false;
16909+
return;
1693216910
break;
1693316911
}
1693416912

@@ -17011,7 +16989,13 @@ ATPrepChangePersistence(Relation rel, bool toLogged)
1701116989

1701216990
table_close(pg_constraint, AccessShareLock);
1701316991

17014-
return true;
16992+
/* force rewrite if necessary; see comment in ATRewriteTables */
16993+
tab->rewrite |= AT_REWRITE_ALTER_PERSISTENCE;
16994+
if (toLogged)
16995+
tab->newrelpersistence = RELPERSISTENCE_PERMANENT;
16996+
else
16997+
tab->newrelpersistence = RELPERSISTENCE_UNLOGGED;
16998+
tab->chgPersistence = true;
1701516999
}
1701617000

1701717001
/*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp