Thread: About adding an attribute to a system catalog

About adding an attribute to a system catalog

From
Tanmay Deshpande
Date:
<div dir="ltr">My doubt is what changes does one have to make in the source code if he/she is trying to add an
attributeto the existing system catalogs table ?<br /></div> 

Re: About adding an attribute to a system catalog

From
Robert Haas
Date:
On Mon, Mar 24, 2014 at 6:38 PM, Tanmay Deshpande
<tp.deshpande07@gmail.com> wrote:
> My doubt is what changes does one have to make in the source code if he/she
> is trying to add an attribute to the existing system catalogs table ?

In general, you mostly need to modify the pg_whatever.h file that
defines that system catalog, including the DATA lines which appear
there, and update the documentation in catalogs.sgml.  Then you'll
want to look for places where Form_pg_whatever values are initialized
and make the appropriate changes there. For a recent example of a
relatively simple patch that did this kind of thing, see commit
6cb86143e8e1e855255edc706bce71c6ebfd9a6c.

Generally, I find that it's helpful to pick an attribute in the same
table that has properties similar to the new thing I'm adding, and
then grep for that throughout the source base.  Then, I go check
whether any of those places need updating.

Adding attributes to bootstrap tables is a whole lot more fiddly than
for other system tables.  I suggest looking at a patch that did this
to see what's involved. For example, commit
76a47c0e7423891d4b4f0977312f46fec6c5c416 removed and replaced a column
in pg_attribute, so by looking through there you could see all of the
places that had to be updated.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



Re: About adding an attribute to a system catalog

From
Tom Lane
Date:
Robert Haas <robertmhaas@gmail.com> writes:
> Adding attributes to bootstrap tables is a whole lot more fiddly than
> for other system tables.  I suggest looking at a patch that did this
> to see what's involved. For example, commit
> 76a47c0e7423891d4b4f0977312f46fec6c5c416 removed and replaced a column
> in pg_attribute, so by looking through there you could see all of the
> places that had to be updated.

One way in which that particular commit isn't a great example is that,
since the number of columns didn't change, it didn't expose the need to
update pg_attribute's handmade row in pg_class.h.  Failing to update the
column count in that DATA line is a standard gotcha when adding columns to
one of the BKI_BOOTSTRAP tables.

In general, though, Robert's advice is good: find a previous commit that
did something similar to what you need.  And grep is your friend in any
case.
        regards, tom lane