Re: determine what column(s) form the primary key, in C extention - Mailing list pgsql-general

From David Rowley
Subject Re: determine what column(s) form the primary key, in C extention
Date
Msg-id CAApHDvp-z6rOnEsCMUYQO0aTPOPT1xJ8ZwiBdRw6e11p2qqusw@mail.gmail.com
Whole thread Raw
In response to Re: determine what column(s) form the primary key, in C extention  (alex maslakov <alex@serendipia.email>)
List pgsql-general
On Wed, 29 Jul 2020 at 03:45, alex maslakov <alex@serendipia.email> wrote:
>      int i = -1;
>      while ((i = bms_next_member(pkattnos , i)) >= 0) {
>          /* do stuff with i */
>          /* you'll need to use i - FirstLowInvalidHeapAttributeNumber to
> get the pg_attribute.attnum */
>
>
>          elog(INFO, "bms_next_member i: %d", i);
>      }
>
> prints 10 and then 9
>
> Then:
>
>    10 - FirstLowInvalidHeapAttributeNumber (-8) ==> 2
>
>    9 - FirstLowInvalidHeapAttributeNumber (-8) ==> 1
>
> These are indexes of the columns, right?
>
> Do they start from 1, not from 0?

User attributes start at 1. Have a look at the pg_attribute system
catalogue table. The number you get will be the attnum column from
that table.

> (2)
>
> I'll use this C code as an example to build an extention in Rust. The
> Postgresql bindings for Rust I have don't contain a definition of
> `FirstLowInvalidHeapAttributeNumber` for some reason. I can define it
> since it's simply single digit constant.
>
> However what does in some source files it's defined as (-7) and in some
> as (-8)? Which should I use?

It did recently change from -8 to -7 when we removed Oid as a system
column in pg12. The number will never change on a major version, so
you'll always know what it is for versions that have already been
released.  There's always a chance it'll change from -7 in some future
PostgreSQL version though.

David



pgsql-general by date:

Previous
From: Shaozhong SHI
Date:
Subject: Re: Issues of slow running queries when dealing with Big Data
Next
From: David Rowley
Date:
Subject: Re: is JIT available