> > > > BEGIN; > > LOCK TABLE schema.relation IN SHARE UPDATE EXCLUSIVE MODE; > > LOCK TABLE pg_catalog.pg_statistic IN ROW UPDATE EXCLUSIVE MODE; > > SELECT pg_import_rel_stats('schema.relation', ntuples, npages); > > SELECT pg_import_pg_statistic('schema.relation', 'id', ...); > > SELECT pg_import_pg_statistic('schema.relation', 'name', ...); > > How well would this simplify to the following: > > SELECT pg_import_statistic('schema.relation', attname, ...) > FROM (VALUES ('id', ...), ...) AS relation_stats (attname, ...); > > Or even just one VALUES for the whole statistics loading? >
I'm sorry, I don't quite understand what you're suggesting here. I'm about to post the new functions, so perhaps you can rephrase this in the context of those functions. > I suspect the main issue with combining this into one statement > (transaction) is that failure to load one column's statistics implies > you'll have to redo all the other statistics (or fail to load the > statistics at all), which may be problematic at the scale of thousands > of relations with tens of columns each. Yes, that is is a concern, and I can see value to having it both ways (one failure fails the whole table's worth of set_something() functions, but I can also see emitting a warning instead of error and returning false. I'm eager to get feedback on which the community would prefer, or perhaps even make it a parameter.