Não está claro a estratégia que o Postgres adota quando as colunas são definidas como NULL
:
UPDATE tbl SET
col1 = NULL,
col2 = NULL
WHERE created < current_date - INTERVAL '1 year';
A documentação https://www.postgresql.org/docs/current/mvcc.html é um pouco longa e técnica, então não posso deduzir com segurança:
se a configuração para NULL for executada no local ou as linhas/páginas afetadas forem copiadas ?
Parece que qualquer UPDATE deve criar uma nova linha para a semântica MVCC, mas e se a configuração para NULL for um caso especial?
Para conformidade com o GDPR, penso em anular todos os dados históricos pessoais e tento entender as implicações do UPDATE SET x = NULL
. Devo pensar VACUUM
depois disso?
O PostgreSQL nunca realiza uma
UPDATE
modificação dos dados existentes no local. Se você definir colunas comoNULL
, uma nova versão de linha será criada como qualquer outraUPDATE
, e as versões de linha anteriores permanecerão até que sejamVACUUM
recuperadas.Mas esteja avisado que
VACUUM
só excluirá a versão de linha antiga se não houver nenhuma transação em execução longa que ainda possa precisar de dados antigos.VACUUM
não substituirá os dados, portanto, o valor antigo ainda estará no disco até que o espaço seja reutilizado.Em relação ao GDPR, a redação é :
O termo “apagamento” não é definido em nenhum lugar nessa lei, por isso está sujeito a interpretação. Minha aposta é que poucas pessoas entendem o funcionamento interno do PostgreSQL bem o suficiente para contestar isso
DELETE
. E seria necessário um especialista em análise forense de dados com conhecimento avançado de PostgreSQL para recuperar esses dados. Uma vezVACUUM
executado, é quase impossível fazer isso. Se eu fosse chamado ao tribunal como testemunha especializada, diria que qualquer pessoa que tenha executadoDELETE
no banco de dados tomou todas as medidas possíveis para apagar os dados.Se você se sentir paranóico, agende um regular
VACUUM
na mesa em questão e certifique-se de que não tenha transações de longa duração. Qualquer preocupação além disso é boba.