Depois de mudar default_toast_compression
de pglz para lz4, gostaria de atualizar os dados existentes para a nova compactação mais rápida.
A única maneira parece ser despejar a tabela inteira e recriá-la do zero, o que não é ideal para bancos de dados muito grandes e/ou em uso.
Encontrei este tópico da lista de discussão que sugere que UPDATE tab SET id = id
isso aconteceria, mas os testes mostram que nada aconteceu.
postgres=# SHOW default_toast_compression;
default_toast_compression
---------------------------
lz4
(1 row)
postgres=# SELECT pg_column_compression(data) FROM pg_largeobject WHERE loid=49946 AND pageno=0;
pg_column_compression
-----------------------
pglz
(1 row)
postgres=# UPDATE pg_largeobject SET data=data WHERE loid=49946 AND pageno=0;
UPDATE 1
postgres=# SELECT pg_column_compression(data) FROM pg_largeobject WHERE loid=49946 AND pageno=0;
pg_column_compression
-----------------------
pglz
(1 row)
Você precisa forçar um ciclo de descompressão/recompressão, caso contrário, ele otimiza esta operação e apenas copia "ponteiros".