From: | vignesh C <vignesh21(at)gmail(dot)com> |
---|---|
To: | Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> |
Cc: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, Rahila Syed <rahilasyed90(at)gmail(dot)com>, Tomas Vondra <tomas(dot)vondra(at)enterprisedb(dot)com>, Peter Smith <smithpb2250(at)gmail(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Column Filtering in Logical Replication |
Date: | 2021-09-16 05:05:21 |
Message-ID: | CALDaNm0tQKwRULvZONX1yqxjJ5CFNxficsr77C062GpCcooUjA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Thu, Sep 16, 2021 at 8:45 AM Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> wrote:
>
> On Wed, Sep 15, 2021 at 6:06 PM Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> wrote:
> >
> > On 2021-Sep-15, vignesh C wrote:
> > > The patch
> > > Generic_object_type_parser_002_table_schema_publication.patch has the
> > > changes that were used to handle the parsing. Schema and Relation both
> > > are different objects, schema is of string type and relation is of
> > > RangeVar type. While parsing, schema name is parsed in string format
> > > and relation is parsed and converted to rangevar type, these objects
> > > will be then handled accordingly during post processing.
> >
> > Yeah, I think it'd be cleaner if the node type has two members, something like
> > this
> >
> > typedef struct PublicationObjSpec
> > {
> > NodeTag type;
> > PublicationObjSpecType pubobjtype; /* type of this publication object */
> > RangeVar *rv; /* if a table */
> > String *objname; /* if a schema */
> > int location; /* token location, or -1 if unknown */
> > } PublicationObjSpec;
> >
> > and only one of them is set, the other is NULL, depending on the object type.
> >
>
> I think the problem here is that with the proposed grammar we won't be
> always able to distinguish names at the gram.y stage.
This is the issue that Amit was talking about:
gram.y: error: shift/reduce conflicts: 2 found, 0 expected
gram.y: warning: shift/reduce conflict on token ',' [-Wcounterexamples]
First example: CREATE PUBLICATION name FOR TABLE relation_expr_list
• ',' relation_expr ',' PublicationObjSpec opt_definition $end
Shift derivation
$accept
↳ parse_toplevel
$end
↳ stmtmulti
↳ toplevel_stmt
↳ stmt
↳ CreatePublicationStmt
↳ CREATE PUBLICATION name FOR pub_obj_list
opt_definition
↳ PublicationObjSpec
',' PublicationObjSpec
↳ TABLE relation_expr_list
↳
relation_expr_list • ',' relation_expr
Second example: CREATE PUBLICATION name FOR TABLE relation_expr_list
• ',' PublicationObjSpec opt_definition $end
Reduce derivation
$accept
↳ parse_toplevel
$end
↳ stmtmulti
↳ toplevel_stmt
↳ stmt
↳ CreatePublicationStmt
↳ CREATE PUBLICATION name FOR pub_obj_list
opt_definition
↳ pub_obj_list
',' PublicationObjSpec
↳ PublicationObjSpec
↳ TABLE relation_expr_list •
Here it is not able to distinguish if ',' is used for the next table
name or the next object.
I was able to reproduce this issue with the attached patch.
Regards,
Vignesh
Attachment | Content-Type | Size |
---|---|---|
Generic_object_type_parser_issue.patch | text/x-patch | 24.4 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Pavel Stehule | 2021-09-16 05:15:31 | Re: Schema variables - new implementation for Postgres 15 |
Previous Message | Pavel Stehule | 2021-09-16 04:45:30 | Re: proposal: possibility to read dumped table's name from file |