Re: determine what column(s) form the primary key, in C extention
От | David Rowley |
---|---|
Тема | Re: determine what column(s) form the primary key, in C extention |
Дата | |
Msg-id | CAApHDvp-z6rOnEsCMUYQO0aTPOPT1xJ8ZwiBdRw6e11p2qqusw@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: determine what column(s) form the primary key, in C extention (alex maslakov <alex@serendipia.email>) |
Список | 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 по дате отправления: