On Mon, 2024-07-22 at 12:05 -0400, Corey Huinker wrote: > Attached is v24, incorporating Jeff's feedback - looping an arg data > structure rather than individually checking each param type being the > biggest of them. >
Thank you for splitting up the patches more finely. v24-0001: * pg_set_relation_stats(): the warning: "cannot export statistics prior to version 9.2" doesn't make sense because the function is for importing. Reword. * I really think there should be a transactional option, just another boolean, and if it has a default it should be true. This clearly has use cases for testing plans, etc., and often transactions will be the right thing there. This should be a trivial code change, and it will also be easier to document. * The return type is documented as 'void'? Please change to bool and be clear about what true/false returns really mean. I think false means "no updates happened at all, and a WARNING was printed indicating why" whereas true means "all updates were applied successfully". * An alternative would be to have an 'error_ok' parameter to say whether to issue WARNINGs or ERRORs. I think we already discussed that and agreed on the boolean return, but I just want to confirm that this was a conscious choice? * tests should be called stats_import.sql; there's no exporting going on * Aside from the above comments and some other cleanup, I think this is a simple patch and independently useful. I am looking to commit this one soon. v24-0002: * Documented return type is 'void' * I'm not totally sure what should be returned in the event that some updates were applied and some not. I'm inclined to say that true should mean that all updates were applied -- otherwise it's hard to automatically detect some kind of typo. * Can you describe your approach to error checking? What kinds of errors are worth checking, and which should we just put into the catalog and let the planner deal with? * I'd check stakindidx at the time that it's incremented rather than summing boolean values cast to integers. v24-0003: * I'm not convinced that we should continue when a stat name is not text. The argument for being lenient is that statistics may change over time, and we might have to ignore something that can't be imported from an old version into a new version because it's either gone or the meaning has changed too much. But that argument doesn't apply to a bogus call, where the name/value pairs get misaligned or something. Regards, Jeff Davis