Toast all the system-table columns that seem to need it. It turns out
Tom Lane <tgl@sss.pgh.pa.us>
Toast all the system-table columns that seem to need it. It turns out that giving pg_proc a toast table required solving the same problems we'd have to solve for pg_class --- pg_proc is one of the relations that gets bootstrapped in relcache.c. Solution is to go back at the end of initialization and read in the *real* pg_class row to replace the phony entry created by formrdesc(). This should work as long as there's no need to touch any toasted values during initialization, which seems a reasonable assumption. Although I did not add a toast-table for every single system table with a varlena attribute, I believe that it would work to just do ALTER TABLE pg_class CREATE TOAST TABLE. So anyone who's really intent on having several thousand ACL entries for a rel could do it. NOTE: I didn't force initdb, but you must do one to see the effects of this patch.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/commands/analyze.c | modified | +13 −30 |
| src/backend/utils/cache/relcache.c | modified | +110 −24 |
| src/backend/utils/init/postinit.c | modified | +6 −2 |
| src/bin/initdb/initdb.sh | modified | +12 −2 |
| src/include/catalog/pg_attribute.h | modified | +20 −18 |
| src/include/utils/relcache.h | modified | +7 −2 |