Re: extensible options syntax for replication parser? - Mailing list pgsql-hackers

From Fabien COELHO
Subject Re: extensible options syntax for replication parser?
Date
Msg-id alpine.DEB.2.22.394.2006140840180.473586@pseudo
Whole thread Raw
In response to extensible options syntax for replication parser?  (Robert Haas <robertmhaas@gmail.com>)
Responses Re: extensible options syntax for replication parser?
List pgsql-hackers
Hello Robert,

My 0.02 €:

> It seems to me that we're making the same mistake with the replication
> parser that we've made in various placesin the regular parser: using a
> syntax for options that requires that every potential option be a
> keyword, and every potential option requires modification of the
> grammar. In particular, the syntax for the BASE_BACKUP command has
> accreted a whole lot of cruft already and I think that trend is likely
> to continue. I don't think that trying to keep people from adding
> options is a good strategy,

Indeed.

> so instead I'd like to have a better way to do it.

> Attached is v1 of a patch to refactor things so that parts of the 
> BASE_BACKUP and CREATE_REPLICATION_SLOT are replaced with a flexible 
> options syntax.

Patch applies cleanly, however compilation fails on:

   repl_gram.y:271:106: error: expected ‘;’ before ‘}’

Getting rid of "ident_or_keyword", some day, would be a relief.

For boolean options, you are generating (EXPORT_SNAPSHOT TRUE) where
(EXPORT_SNAPSHOT) would do.

Maybe allowing (!EXPORT_SNAPSHOT) for (FOO FALSE) would be nice, if it is 
not allowed yet. That would also allow to get rid of FOO/NOFOO variants if 
any for FOO & !FOO, so one keyword is enough for a concept.

> There are some debatable decisions here, so I'd be happy to get some 
> feedback on whether to go further with this, or less far, or maybe even 
> just abandon the idea altogether. I doubt the last one is the right 
> course, though: ISTM something's got to be done about the BASE_BACKUP 
> case, at least.

ISTM that it would be better to generalize the approach to all commands 
which accept options, so that the syntax is homogeneous.

> If people agree with the basic approach, I'll write docs. The
> intention is that we'd continue to support the existing syntax for the
> existing options, but the client tools would be adjusted to use the
> new syntax if the server's new enough, and any new options would be
> supported only through the new syntax.

Yes.

> At some point in the distant future we could retire the old syntax, when 
> we've stopped caring about compatibility with pre-14 versions.

Just wondering: ISTM that the patch implies that dumping a v14 db 
generates the new syntax, which makes sense. Now I see 4 use cases wrt to 
version.

  #  source    target   comment
  1  v < 14    v < 14   probably the dump would use one of the older version
  2  v < 14    v >= 14  upgrade
  3  v >= 14   v < 14   downgrade: oops, the output uses the new syntax
  4  v >= 14   v >= 14  ok

Both cross version usages may be legitimate. In particular, 3 (oops, 
hardware issue, I have to move the db to a server where pg has not been 
upgraded) seems not possible because the generated syntax uses the new 
approach. Should/could there be some option to tell "please generate vXXX 
syntax" to allow that?

-- 
Fabien.

pgsql-hackers by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: text coverage for EXTRACT()
Next
From: Fabien COELHO
Date:
Subject: Re: Recording test runtimes with the buildfarm