Since pg_dumpall treats global objects as schema-level content, it currently includes them with --schema-only but skips them with --data-only. By that logic, it should also skip them when either --statistics-only or --no-schema is used. Thought?
+1, pending resolution of the defaults issue.
At first glance, this looks like a good candidate for the the same refactor that we did to pg_dump in 96a81c1be929, where we abandoned using the schema_only and data_only flags to determine what should be dumped in favor of dumpSchema, dumpData, and eventually dumpStatistics. This made for a cleaner interface because each test was described in terms of what was wanted, not in terms of the opposite being not the case, and all of the double/triple-negative boolean backflips were concentrated right after the options conflict resolutions.
However, all prospective do_this_thing branches are used exactly once, so there is no code savings to be had and no clarity to be gained, so this patch is fine as is.