Re: attndims, typndims still not enforced, but make the value within a sane threshold

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Michael Paquier <michael(at)paquier(dot)xyz>, jian he <jian(dot)universality(at)gmail(dot)com>, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, Kirill Reshke <reshkekirill(at)gmail(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: attndims, typndims still not enforced, but make the value within a sane threshold
Date: 2024-12-26 23:07:45
Message-ID: Z23hwTTT716ThyMG@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Dec 26, 2024 at 05:08:36PM -0500, Tom Lane wrote:
> Bruce Momjian <bruce(at)momjian(dot)us> writes:
> > So, if users are referencing attndims and the values are not accurate,
> > how useful are they? I was suggesting removal so people would stop
> > relying on inaccurate information, or we correct attndims to be
> > accurate. Allowing people to continue relying on inaccurate information
> > seems like the worst of all options.
>
> I think removal is not happening. The documentation for attndims
> already says
>
> Number of dimensions, if the column is an array type; otherwise
> 0. (Presently, the number of dimensions of an array is not
> enforced, so any nonzero value effectively means “it's an array”.)
>
> and as far as I know that is completely correct. (Hence, your gripe
> is not that it's not "accurate", rather that it's not "precise".)
>
> There isn't a comparable disclaimer under typndims, but there probably
> should be.

First, my apologies about the URL; it should have been:

https://www.postgresql.org/message-id/ZVwI_ozT8z9MCnIZ@momjian.us

Using the queries in that URL, I see:

CREATE TABLE test (data integer, data_array integer[5][5]);

CREATE TABLE test2 (LIKE test);

CREATE TABLE test3 AS SELECT * FROM test;

SELECT relname, attndims
FROM pg_class JOIN pg_attribute ON (pg_attribute.attrelid = pg_class.oid)
WHERE attname = 'data_array';

relname | attndims
---------+----------
test | 2
--> test2 | 0
--> test3 | 0

Interestingly, if I dump and restore with:

$ createdb test2; pg_dump test | sql test2

and run the query again I get:

SELECT relname, attndims
FROM pg_class JOIN pg_attribute ON (pg_attribute.attrelid = pg_class.oid)
WHERE attname = 'data_array';

relname | attndims
---------+----------
test | 1
test2 | 1
test3 | 1

There is clearly something not ideal about this behavior.

--
Bruce Momjian <bruce(at)momjian(dot)us> https://momjian.us
EDB https://enterprisedb.com

Do not let urgent matters crowd out time for investment in the future.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2024-12-27 00:07:02 Re: attndims, typndims still not enforced, but make the value within a sane threshold
Previous Message Tom Lane 2024-12-26 22:08:36 Re: attndims, typndims still not enforced, but make the value within a sane threshold