Re: Does included columns part of the PK
Adrian Klaver <adrian.klaver@aklaver.com>
From: Adrian Klaver <adrian.klaver@aklaver.com>
To: Igor Korot <ikorot01@gmail.com>,
"David G. Johnston" <david.g.johnston@gmail.com>,
"pgsql-generallists.postgresql.org" <pgsql-general@lists.postgresql.org>
Date: 2026-03-14T23:30:19Z
Lists: pgsql-general
On 3/14/26 9:56 AM, Igor Korot wrote: > Hi, > > On Sat, Mar 14, 2026 at 8:51 AM David G. Johnston > <david.g.johnston@gmail.com <mailto:david.g.johnston@gmail.com>> wrote: > > On Saturday, March 14, 2026, Adrian Klaver > <adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>> wrote: > > On 3/14/26 12:09 AM, Igor Korot wrote: > > Hi, ALL, > Have one weird question ;-) > > When I connect with ODBC and call SQLPrimaryKey() the > function returns > > > Are you actually using the SQLPrimaryKeys(), not SQLPrimaryKey()? > > all fields including > "included" fields. > > > Define 'included' fields. > > > They are referring to the unique index that backs the PK constraint. > > > Not “they” - “He”. 😊 > > And yes - that’s what I’m referring to. From here: https://www.ibm.com/docs/en/db2-for-zos/12.0.0?topic=functions-sqlprimarykeys-get-primary-key-columns-table: 1 TABLE_CAT VARCHAR(128) This is always null. 2 TABLE_SCHEM VARCHAR(128) The name of the schema containing TABLE_NAME. 3 TABLE_NAME VARCHAR(128) NOT NULL Name of the specified table. 4 COLUMN_NAME VARCHAR(128) NOT NULL Primary key column name. 5 KEY_SEQ SMALLINT NOT NULL Column sequence number in the primary key, starting with 1. 6 PK_NAME VARCHAR(128) Primary key identifier. Contains a null value if not applicable to the data From here: https://github.com/postgresql-interfaces/psqlodbc/blob/main/info.c At line 4035 in SQLPrimaryKeys() For case 1 /* * Simplified query to remove assumptions about number of * possible index columns. Courtesy of Tom Lane - thomas * 2000-03-21 */ [...] "select ta.attname, ia.attnum, ic.relname, n.nspname, tc.relname" " from pg_catalog.pg_attribute ta ... " case 2 select ta.attname, ia.attnum, ic.relname, n.nspname, NULL" " from pg_catalog.pg_attribute ta, ..." If I am following correctly then: attname = column_name attnum = key_seq ic.relname = pk_name nspname = table_schem tc.relname = table_name So how are using it in your code and what are the actual results? Also what is showing up in the Postgres logs? > > Thank you. > > > David J. > -- Adrian Klaver adrian.klaver@aklaver.com