On Mon, 2025-02-24 at 12:50 -0500, Tom Lane wrote: > Also, while working on the attached, I couldn't help forming the > opinion that we'd be better off to nuke pg_set_attribute_stats() > from orbit and require people to use pg_restore_attribute_stats().
I had intended the pg_set variants to be useful for ad-hoc stats hacking (e.g. for reproducing a plan or for testing the optimizer). For those use cases, the following differences seem nice: 1. named arguments are easier to write ad-hoc than lining up the parameters in pairs 2. elevel=ERROR makes more sense than WARNING for that kind of use case. 3. for relation stats, we don't want in-place updates, because you want ROLLBACK to work Those seemed different enough from the restore case that another entry point made sense to me. > pg_set_attribute_stats() would be fine if we had a way to force > people to call it with only named-argument notation, but we don't. > So I'm afraid that its existence will encourage people to rely > on a specific parameter order, and then they'll whine if we > add/remove/reorder parameters, as indeed I had to do below. That's a good point that I hadn't considered, so perhaps we can't solve problem #1. The other two problems might be solvable though: * To avoid in-place updates I think we do need a separate function, at least for relation stats (attribute stats never do in-place updates). We could potentially have another name/value pair to choose, but it's impossible to choose a reasonable default: if "inplace" is the default, that means the user would need to opt-out of it for ROLLBACK to work; if "mvcc" is the default, that means pg_dump would need to choose "inplace", and I don't think pg_dump should be making those kinds of decisions. * The elevel=ERROR is not terribly important, so perhaps we can just always do elevel=WARNING. If we did try to present it as an option, then that presents the same problems as an "inplace" option. So perhaps we can just have the pg_set variants set elevel=ERROR and inplace=false, and otherwise be identical to the pg_restore variants? Regards, Jeff Davis