On Sun, Mar 14, 2021 at 08:54:11PM +0900, Michael Paquier wrote:
> On Sun, Mar 14, 2021 at 04:10:07PM +0800, Julien Rouhaud wrote:
> 
> +   bool        outdated_filter = false;
> Wouldn't it be better to rename that "outdated" instead for
> consistency with the other options?

I agree.

> In ReindexRelationConcurrently(), there is no filtering done for the
> index themselves.  The operation is only done on the list of indexes
> fetched from the parent relation.  Why?  This means that a REINDEX
> (OUTDATED) INDEX would actually rebuild an index even if this index
> has no out-of-date collations, like a catalog.  I think that's
> confusing.
> 
> Same comment for the non-concurrent case, as of the code paths of
> reindex_index().

Yes, I'm not sure what we should do in that case.  I thought I put a comment
about that but it apparently disappeared during some rewrite.

Is there really a use case for reindexing a specific index and at the same time
asking for possibly ignoring it?  I think we should just forbid REINDEX
(OUTDATED) INDEX.  What do you think?

> Would it be better to inform the user which indexes are getting
> skipped in the verbose output if REINDEXOPT_VERBOSE is set?

I was thinking that users would be more interested in the list of indexes being
processed rather than the full list of indexes and a mention of whether it was
processed or not.  I can change that if you prefer.

> +       <para>
> +        Check if the specified index has any outdated dependency. For now 
> only
> +        dependency on collations are supported.
> +       </para></entry>
> [...]
> +    <term><literal>OUTDATED</literal></term>
> +    <listitem>
> +     <para>
> +      This option can be used to filter the list of indexes to rebuild and 
> only
> +      process indexes that have outdated dependencies.  Fow now, the only
> +      handle dependency is for the collation provider version.
> +     </para>
> Do we really need to be this specific in this part of the
> documentation with collations?

I think it's important to document what this option really does, and I don't
see a better place to document it.

> The last sentence of this paragraph
> sounds weird.  Don't you mean instead to write "the only dependency
> handled currently is the collation provider version"?

Indeed, I'll fix!

> +\set VERBOSITY terse \\ -- suppress machine-dependent details
> +-- no suitable index should be found
> +REINDEX (OUTDATED) TABLE reindex_coll;
> What are those details?

That just the same comment as the previous occurence in the file, I kept it for
consistency.

> And wouldn't it be more stable to just check
> after the relfilenode of the indexes instead?

Agreed, I'll add additional tests for that.

> " ORDER BY sum(ci.relpages)"
> Schema qualification here, twice.

Well, this isn't actually mandatory, per comment at the top:

        /*
         * The queries here are using a safe search_path, so there's no need to
         * fully qualify everything.
         */

But I think it's a better style to fully qualify objects, so I'll fix.

> +   rel = try_relation_open(indexOid, AccessShareLock);
> +
> +   if (rel == NULL)
> +       PG_RETURN_NULL();
> Let's introduce a try_index_open() here.

Good idea!

> What's the point in having both index_has_outdated_collation() and
> index_has_outdated_collation()?

Did you mean index_has_outdated_collation() and
index_has_outadted_dependency()?  It's just to keep things separated, mostly
for future improvements on that infrastructure.  I can get rid of that function
and put back the code in index_has_outadted_dependency() if that's overkill.

> It seems to me that 0001 should be split into two patches:
> - One for the backend OUTDATED option.
> - One for pg_index_has_outdated_dependency(), which only makes sense
> in-core once reindexdb is introduced.

I thought it would be better to add the backend part in a single commit, and
then built the client part on top of that in a different commit.  I can
rearrange things if you want, but in that case should
index_has_outadted_dependency() be in a different patch as you mention or
simply merged with 0002 (the --oudated option for reindexdb)?


Reply via email to