Em sex., 31 de mar. de 2023 às 16:25, Tom Lane <t...@sss.pgh.pa.us> escreveu:
> Ranier Vilela <ranier...@gmail.com> writes: > > I think that commit f0d65c0 > > < > https://github.com/postgres/postgres/commit/f0d65c0eaf05d6acd3ae05cde4a31465eb3992b2 > > > > has an oversight. > > Attnum == 0, is system column too, right? > > No, it's not valid in pg_attribute rows. > > > All other places at tablecmds.c, has this test: > > if (attnum <= 0) > > ereport(ERROR, > > I was actually copying this code in indexcmds.c: > > if (attno < 0) > ereport(ERROR, > (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), > errmsg("index creation on system columns is not > supported"))); > > There's really no reason to prefer one over the other in this context. > I think the documentation is a bit confusing. According to the current documentation: /* * attnum is the "attribute number" for the attribute: A value that * uniquely identifies this attribute within its class. for user * attributes, Attribute numbers are greater than 0 and not greater than * the number of attributes in the class. i.e. if the Class pg_class says * that Class XYZ has 10 attributes, then the user attribute numbers in * Class pg_attribute must be 1-10. * * System attributes have attribute numbers less than 0 that are unique * within the class, but not constrained to any particular range. * * Note that (attnum - 1) is often used as the index to an array. Attributes equal to zero are in limbo. IMO should be: * System attributes have attribute numbers less or equal to 0 that are * unique * within the class, but not constrained to any particular range. regards, Ranier Vilela