Estou executando o PostgreSQL no sistema de arquivos ZFS compactado . Uma dica mencionada é desabilitar a compactação TOAST inline do PostgreSQL porque o ZFS pode compactar melhor os dados. Isso pode ser feito definindo o armazenamento de coluna como EXTERNAL
.
Eu posso fazer isso coluna por coluna com:
ALTER TABLE my_table ALTER COLUMN my_column SET STORAGE EXTERNAL;
No entanto, isso pode ser um pouco complicado, pois todo esquema precisa ter migrado para isso manualmente.
Existem maneiras fáceis de
- Definir padrão
STORAGE
emEXTERNAL
vez deMAIN
para todas as colunas - Desative a compactação TOAST de outra maneira
Encontrei a opção default_toast_compression, mas a documentação não está clara se posso desativá-la.
default_toast_compression
determina apenas o método de compactação a ser usado quando os valores da coluna são torrados. Ele não decide se os valores são torrados.Notavelmente, o mecanismo TOAST se aplica a valores armazenados em linha e fora de linha. É "A Técnica de Armazenamento de Atributos Superdimensionados" .
Você deseja desabilitar completamente a compactação, não apenas escolher o algoritmo preferido. Antes de ir para lá: Vale mesmo a pena as possíveis complicações? Deixe-me citar a citação completa de sua página de referência:
Minha ênfase em negrito. Considere usar o método de compactação LZ4 (novo no Postgres 14) e pronto. Ver:
O que você pergunta
Você pode definir
STORAGE
por tipo de dados . Exemplo para o tipovarchar
:Isso é então copiado para cada coluna da tabela com esse tipo, que é criada após a alteração. O manual:
Você precisa alterar as colunas existentes adicionalmente.
Apenas os tipos de base
pg_type.typtype
podem ser alterados desta forma (ver no manual). E pode introduzir advertências. O manual sobreALTER TYPE
:Dito isso, como superusuário , você pode alterar todos os tipos de base no sistema com esta consulta:
Eu nunca tentei isso sozinho, e não iria lá, e aconselho fortemente contra isso , a menos que você saiba exatamente o que está fazendo. Mexer com os catálogos do sistema pode quebrar seu cluster de banco de dados.
Eu só iria com
default_toast_compression = 'lz4'
. Talvez experimente um ou dois tipos de dados selecionados com oALTER TYPE ... SET (STORAGE = external);
primeiro ...