Re: [bug] Table not have typarray when created by single user mode
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: shawn wang <shawn.wang.pg@gmail.com>
Cc: Amit Kapila <amit.kapila16@gmail.com>,
Alvaro Herrera <alvherre@2ndquadrant.com>,
wenjing <wjzeng2012@gmail.com>,
PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>,
tushar <tushar.ahuja@enterprisedb.com>
Date: 2020-07-06T20:22:39Z
Lists: pgsql-bugs, pgsql-hackers
Attachments
- remove-pg_type-entries-for-seqs-and-toast-tables.patch (text/x-diff) patch
I wrote: > However, if we're going to go this far, I think there's a good > case to be made for going all the way and eliminating the policy > of not making array types for system catalogs. That was never > anything but a wart justified by space savings in pg_type, and > this patch already kills most of the space savings. If we > drop the system-state test in heap_create_with_catalog altogether, > we end up with 601 initial pg_type entries. That still leaves > the four bootstrap catalogs without array types, because they are > not created by heap_create_with_catalog; but we can manually add > those too for a total of 605 initial entries. (That brings initial > pg_type to 14 pages as I show above; I think it was 13 with the > original version of the patch.) > In short, if we're gonna do this, I think we should do it like > the attached. Or we could do nothing, but there is some appeal > to removing this old inconsistency. I pushed that, but while working on it I had a further thought: why is it that we create composite types but not arrays over those types for *any* relkinds? That is, we could create even more consistency, as well as buying back some of the pg_type bloat added here, by not creating pg_type entries at all for toast tables or sequences. A little bit of hacking later, I have the attached. One could argue it either way as to whether sequences should have composite types. It's possible to demonstrate queries that will fail without one: regression=# create sequence seq1; CREATE SEQUENCE regression=# select s from seq1 s; ERROR: relation "seq1" does not have a composite type but it's pretty hard to believe anyone's using that in practice. Also, we've talked more than once about changing the implementation of sequences to not have a relation per sequence, in which case the ability to do something like the above would go away anyway. Comments? regards, tom lane
Commits
-
Don't create pg_type entries for sequences or toast tables.
- f3faf35f370f 14.0 landed
-
Create composite array types for initdb-created relations.
- f7f70d5e22aa 14.0 landed