Re: Reducing output size of nodeToString
Peter Eisentraut <peter@eisentraut.org>
From: Peter Eisentraut <peter@eisentraut.org>
To: Matthias van de Meent <boekewurm+postgres@gmail.com>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>,
Andres Freund <andres@anarazel.de>
Cc: Michel Pelletier <pelletier.michel@gmail.com>
Date: 2024-01-02T10:30:13Z
Lists: pgsql-hackers
On 06.12.23 22:08, Matthias van de Meent wrote: > PFA a patch that reduces the output size of nodeToString by 50%+ in > most cases (measured on pg_rewrite), which on my system reduces the > total size of pg_rewrite by 33% to 472KiB. This does keep the textual > pg_node_tree format alive, but reduces its size signficantly. > > The basic techniques used are > - Don't emit scalar fields when they contain a default value, and > make the reading code aware of this. > - Reasonable defaults are set for most datatypes, and overrides can > be added with new pg_node_attr() attributes. No introspection into > non-null Node/Array/etc. is being done though. > - Reset more fields to their default values before storing the values. > - Don't write trailing 0s in outDatum calls for by-ref types. This > saves many bytes for Name fields, but also some other pre-existing > entry points. Based on our discussions, my understanding is that you wanted to produce an updated patch set that is split up a bit. My suggestion is to make incremental patches along these lines: - Omit from output all fields that have value zero. - Omit location fields that have value -1. - Omit trailing zeroes for scalar values. - Recent location fields before storing in pg_rewrite (or possibly catalogs in general?) - And then whatever is left, including the "default" value system that you have proposed. The last one I have some doubts about, as previously expressed, but the first few seem sensible to me. By splitting it up we can consider these incrementally.
Commits
-
Do not output actual value of location fields in node serialization by default
- d20d8fbd3e4d 17.0 landed
-
gen_node_support.pl: Mark location fields as type alias ParseLoc
- 605721f819f5 17.0 landed