Preciso migrar duas tabelas muito grandes continuamente. Minha primeira solução foi comparar coluna por coluna para descobrir o que havia mudado, mas isso é muito caro de executar.
A segunda ideia foi criar Colunas Computacionais PERSISTIDAS para armazenar valores com hash de colunas definidas. Isso poderia acelerar o processo. Mas o problema está no hash de colunas com timestamp e fuso horário. Estou recebendo este erro: ERROR: generation expression is not immutable
.
Tentei várias maneiras de converter o valor, mas nada está funcionando ainda.
Código (valores comentados, não funcionou):
ALTER TABLE schema.table ADD COLUMN hashed_columns UUID GENERATED ALWAYS AS (
md5(
id::text ||
type_id::text ||
--EXTRACT(EPOCH FROM date)::text ||
-- to_char(date::timestamp without time zone , 'YYYY-MM-DD"T"HH24:MI:SS') ||
-- date::text ||
-- to_char(date, 'YYYYMMDD')::integer ||
-- md5(date::text) ||
to_char(date, 'YYYYMMDD') ||
value1::text ||
value2::text
)::uuid
) STORED;
Parece que ele detecta uma coluna imutável e simplesmente gera um erro, sem tentar convertê-la primeiro. O que estou tentando fazer é fundamentalmente errado ou é possível?
Quando removo a coluna de data do script, funciona, então o problema está no registro de data e hora.
O servidor está executando o Postgre 16.