Re: Allow CLUSTER, VACUUM FULL and REINDEX to change tablespace on the fly
Alexey Kondratov <a.kondratov@postgrespro.ru>
From: Alexey Kondratov <a.kondratov@postgrespro.ru>
To: Justin Pryzby <pryzby@telsasoft.com>
Cc: Zhihong Yu <zyu@yugabyte.com>, Michael Paquier <michael@paquier.xyz>,
Alvaro Herrera <alvherre@alvh.no-ip.org>, Peter Eisentraut
<peter.eisentraut@enterprisedb.com>, Masahiko Sawada
<masahiko.sawada@2ndquadrant.com>, Steve Singer <steve@ssinger.info>,
pgsql-hackers@lists.postgresql.org, Robert Haas <robertmhaas@gmail.com>,
Alexander Korotkov <a.korotkov@postgrespro.ru>, Masahiko Sawada
<sawada.mshk@gmail.com>, Jose Luis Tallon <jltallon@adv-solutions.net>
Date: 2020-12-23T16:12:11Z
Lists: pgsql-hackers
On 2020-12-23 08:22, Justin Pryzby wrote: > On Tue, Dec 22, 2020 at 03:22:19PM -0800, Zhihong Yu wrote: >> Justin: >> For reindex_index() : >> >> + if (options->tablespaceOid == MyDatabaseTableSpace) >> + options->tablespaceOid = InvalidOid; >> ... >> + oldTablespaceOid = iRel->rd_rel->reltablespace; >> + if (set_tablespace && >> + (options->tablespaceOid != oldTablespaceOid || >> + (options->tablespaceOid == MyDatabaseTableSpace && >> OidIsValid(oldTablespaceOid)))) >> >> I wonder why the options->tablespaceOid == MyDatabaseTableSpace clause >> appears again in the second if statement. >> Since the first if statement would assign InvalidOid >> to options->tablespaceOid when the first if condition is satisfied. > > Good question. Alexey mentioned on Sept 23 that he added the first > stanza. to > avoid storing the DB's tablespace OID (rather than InvalidOid). > > I think the 2nd half of the "or" is unnecessary since that was added > setting to > options->tablespaceOid = InvalidOid. > If requesting to move to the DB's default tablespace, it'll now hit the > first > part of the OR: > >> + (options->tablespaceOid != oldTablespaceOid || > > Without the first stanza setting, it would've hit the 2nd condition: > >> + (options->tablespaceOid == MyDatabaseTableSpace && >> OidIsValid(oldTablespaceOid)))) > > which means: "user requested to move a table to the DB's default > tblspace, and > it was previously on a nondefault space". > > So I think we can drop the 2nd half of the OR. Thanks for noticing. Yes, I have not noticed that we would have already assigned tablespaceOid to InvalidOid in this case. Back to the v7 we were doing this assignment a bit later, so this could make sense, but now it seems to be redundant. For some reason I have mixed these refactorings separated by a dozen of versions... Thanks -- Alexey Kondratov Postgres Professional https://www.postgrespro.com Russian Postgres Company
Commits
-
Add TABLESPACE option to REINDEX
- c5b286047cd6 14.0 landed
-
Refactor code in tablecmds.c to check and process tablespace moves
- 4c9c359d38ff 14.0 landed
-
Refactor option handling of CLUSTER, REINDEX and VACUUM
- a3dc926009be 14.0 landed
-
pg_dump: Don't use enums for defining bit mask values
- d2a2808eb444 14.0 landed
-
Refactor CLUSTER and REINDEX grammar to use DefElem for option lists
- b5913f612079 14.0 landed
-
Refactor parsing rules for option lists of EXPLAIN, VACUUM and ANALYZE
- 873ea9ee692e 14.0 landed
-
Improve tab completion of REINDEX in psql
- 1f75b454134c 14.0 landed
-
Fix possible crash during FATAL exit from reindexing.
- d12bdba77b0f 13.0 cited