Re: assert pg_class.relnatts is consistent - Mailing list pgsql-hackers

From Amit Langote
Subject Re: assert pg_class.relnatts is consistent
Date
Msg-id CA+HiwqGnoqzr6kWfzS56FxhT49iZXZF_susVNHwUHoLrK=v8pw@mail.gmail.com
Whole thread Raw
In response to Re: assert pg_class.relnatts is consistent  (John Naylor <john.naylor@2ndquadrant.com>)
Responses Re: assert pg_class.relnatts is consistent
List pgsql-hackers
Hi John,

On Fri, Feb 14, 2020 at 6:50 PM John Naylor <john.naylor@2ndquadrant.com> wrote:
> On Fri, Feb 14, 2020 at 5:00 PM Amit Langote <amitlangote09@gmail.com> wrote:
> > I tried and think it works but not sure if that's good Perl
> > programming.  See the attached.
>
> Hi Amit,
> I took this for a spin -- I just have a couple comments.

Thanks for chiming in.

> + elsif ($attname eq 'relnatts')
> + {
> + ;
> + }
>
> With your patch, I get this when running
> src/include/catalog/reformat_dat_file.pl:
>
> strip_default_values: pg_class.relnatts undefined

I think I have fixed this in the attached.

> + if ($catname eq "pg_class" && $attname eq "relnatts")
> + {
> + $bki_values{$attname} = $catalog_ncols{$bki_values{relname}};
> + }
> +
>
> You could avoid the name/attr checks if you do it while building the
> pg_class lookup table, like this:
>
>  foreach my $row (@{ $catalog_data{pg_class} })
>  {
>   $classoids{ $row->{relname} } = $row->{oid};
> +
> + # Also fill in correct value for relnatts.
> + $row->{relnatts} = $catalog_ncols{ $row->{relname} };
>  }

Did this too.  Attached updated patch, which also addresses Michael's comment.

I'm still trying to understand your comment about using placeholder
BKI_DEFAULT...

Thanks,
Amit

Attachment

pgsql-hackers by date:

Previous
From: Alastair Turner
Date:
Subject: Re: Parallel copy
Next
From: Tom Lane
Date:
Subject: Re: [HACKERS] Moving relation extension locks out of heavyweight lock manager