On 02/17/2018 11:39 AM, Tom Lane wrote: > Joe Conway <m...@joeconway.com> writes: >> Yes, exactly. I'm fine with not backpatching, just wanted to raise the >> possibility. I will push later today to HEAD (with a catalog version bump). > > BTW, I was wondering if it'd be a good idea to try to forestall future > oversights of this sort by adding a test query in, say, misc_sanity.sql. > Something like > > select relname, attname, atttypid::regtype > from pg_class c join pg_attribute a on c.oid = attrelid > where c.oid < 16384 and reltoastrelid=0 and relkind = 'r' and attstorage != > 'p' > order by 1,2; > > If you try that you'll see the list is quite long:
<snip> > I think in most of these cases we've consciously decided not to toast-ify, > but maybe some of them need a second look. Is there really a compelling reason to not just create toast tables for all system catalogs as in the attached? Then we could just check for 0 rows in misc_sanity.sql. For what its worth: -------------------- HEAD -------------------- # du -h --max-depth=1 $PGDATA [...] 22M /usr/local/pgsql-head/data/base [...] 584K /usr/local/pgsql-head/data/global [...] 38M /usr/local/pgsql-head/data time make check real 0m16.295s user 0m3.597s sys 0m1.465s -------------------- with patch -------------------- # du -h --max-depth=1 $PGDATA [...] 23M /usr/local/pgsql-head/data/base [...] 632K /usr/local/pgsql-head/data/global [...] 39M /usr/local/pgsql-head/data time make check real 0m16.462s user 0m3.521s sys 0m1.531s select relname, attname, atttypid::regtype from pg_class c join pg_attribute a on c.oid = attrelid where c.oid < 16384 and reltoastrelid=0 and relkind = 'r' and attstorage != 'p' order by 1,2; relname | attname | atttypid ---------+---------+---------- (0 rows) -- Crunchy Data - http://crunchydata.com PostgreSQL Support for Secure Enterprises Consulting, Training, & Open Source Development
diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c index 809749add9..813b3b87cc 100644 --- a/src/backend/catalog/catalog.c +++ b/src/backend/catalog/catalog.c @@ -258,7 +258,19 @@ IsSharedRelation(Oid relationId) relationId == PgDbRoleSettingToastTable || relationId == PgDbRoleSettingToastIndex || relationId == PgShseclabelToastTable || - relationId == PgShseclabelToastIndex) + relationId == PgShseclabelToastIndex || + relationId == PgAuthidToastTable || + relationId == PgAuthidToastIndex || + relationId == PgDatabaseToastTable || + relationId == PgDatabaseToastIndex || + relationId == PgPlTemplateToastTable || + relationId == PgPlTemplateToastIndex || + relationId == PgReplicationOriginToastTable || + relationId == PgReplicationOriginToastIndex || + relationId == PgSubscriptionToastTable || + relationId == PgSubscriptionToastIndex || + relationId == PgTablespaceToastTable || + relationId == PgTablespaceToastIndex) return true; return false; } diff --git a/src/include/catalog/toasting.h b/src/include/catalog/toasting.h index f6387ae143..3ef3990ea3 100644 --- a/src/include/catalog/toasting.h +++ b/src/include/catalog/toasting.h @@ -46,25 +46,64 @@ extern void BootstrapToastTable(char *relName, */ /* normal catalogs */ +DECLARE_TOAST(pg_aggregate, 4139, 4140); DECLARE_TOAST(pg_attrdef, 2830, 2831); +DECLARE_TOAST(pg_attribute, 4141, 4142); +DECLARE_TOAST(pg_class, 4143, 4144); +DECLARE_TOAST(pg_collation, 4145, 4146); DECLARE_TOAST(pg_constraint, 2832, 2833); +DECLARE_TOAST(pg_default_acl, 4147, 4148); DECLARE_TOAST(pg_description, 2834, 2835); +DECLARE_TOAST(pg_event_trigger, 4149, 4150); +DECLARE_TOAST(pg_extension, 4151, 4152); +DECLARE_TOAST(pg_foreign_data_wrapper, 4153, 4154); +DECLARE_TOAST(pg_foreign_server, 4155, 4156); +DECLARE_TOAST(pg_foreign_table, 4157, 4158); +DECLARE_TOAST(pg_index, 4159, 4160); +DECLARE_TOAST(pg_init_privs, 4161, 4162); +DECLARE_TOAST(pg_language, 4163, 4164); +DECLARE_TOAST(pg_largeobject, 4165, 4166); +DECLARE_TOAST(pg_largeobject_metadata, 4167, 4168); +DECLARE_TOAST(pg_namespace, 4169, 4170); +DECLARE_TOAST(pg_partitioned_table, 4171, 4172); +DECLARE_TOAST(pg_policy, 4173, 4174); DECLARE_TOAST(pg_proc, 2836, 2837); DECLARE_TOAST(pg_rewrite, 2838, 2839); DECLARE_TOAST(pg_seclabel, 3598, 3599); DECLARE_TOAST(pg_statistic, 2840, 2841); DECLARE_TOAST(pg_statistic_ext, 3439, 3440); DECLARE_TOAST(pg_trigger, 2336, 2337); +DECLARE_TOAST(pg_ts_dict, 4175, 4176); +DECLARE_TOAST(pg_type, 4177, 4178); +DECLARE_TOAST(pg_user_mapping, 4179, 4180); /* shared catalogs */ -DECLARE_TOAST(pg_shdescription, 2846, 2847); -#define PgShdescriptionToastTable 2846 -#define PgShdescriptionToastIndex 2847 +DECLARE_TOAST(pg_authid, 4181, 4182); +#define PgAuthidToastTable 4181 +#define PgAuthidToastIndex 4182 +DECLARE_TOAST(pg_database, 4183, 4184); +#define PgDatabaseToastTable 4183 +#define PgDatabaseToastIndex 4184 DECLARE_TOAST(pg_db_role_setting, 2966, 2967); #define PgDbRoleSettingToastTable 2966 #define PgDbRoleSettingToastIndex 2967 +DECLARE_TOAST(pg_pltemplate, 4185, 4186); +#define PgPlTemplateToastTable 4185 +#define PgPlTemplateToastIndex 4186 +DECLARE_TOAST(pg_replication_origin, 4187, 4188); +#define PgReplicationOriginToastTable 4187 +#define PgReplicationOriginToastIndex 4188 +DECLARE_TOAST(pg_shdescription, 2846, 2847); +#define PgShdescriptionToastTable 2846 +#define PgShdescriptionToastIndex 2847 DECLARE_TOAST(pg_shseclabel, 4060, 4061); #define PgShseclabelToastTable 4060 #define PgShseclabelToastIndex 4061 +DECLARE_TOAST(pg_subscription, 4189, 4190); +#define PgSubscriptionToastTable 4189 +#define PgSubscriptionToastIndex 4190 +DECLARE_TOAST(pg_tablespace, 4191, 4192); +#define PgTablespaceToastTable 4191 +#define PgTablespaceToastIndex 4192 #endif /* TOASTING_H */
signature.asc
Description: OpenPGP digital signature