Hi,
Nikhil, please consider existing discussions on using dictionaries
(mentioned above by Aleksander) and extending the TOAST pointer [1],
it seems you did not check them.
The same question Robert asked above - it's unclear why the header
wastes so much space. You mentioned metadata length - what metadata
do you mean there?
Also Robert pointed out very questionable approaches in your solution -
new dependencies crawling around user tables, new catalog table
with very unclear lifecycle (and, having new catalog table, immediately
having questions with pg_upgrade).
Currently I'm looking through the patch and could share my thoughts
later.
While reading this thread I've thought about storing a dictionary within
the table it is used for - IIUC on dictionary is used for just one attribute,
so it does not make sense to make it global.
Also, I have a question regarding the Zstd implementation you propose -
does it provide a possibility for partial decompression?