Histórico e lixeira
O Histórico guarda cada mudança de linha nos Registros com desfazer, e a lixeira guarda tabelas e colunas apagadas por 30 dias.
Histórico
Cada linha que records_change acrescenta, muda ou apaga nos Registros fica no Histórico como uma mudança, com a pessoa, o agente, a tabela, a mudança e os valores de antes e depois. history_list mostra três listas, da mais nova à mais antiga: as mudanças (entries), as ações (actions: cada chamada de records_change, cada desfazer e cada ida para a lixeira) e os itens da lixeira (trash).
Desfazer
history_undo desfaz mudanças de linhas, e só elas:
- Com
entry, desfaz a mudança de uma linha. - Com
action, desfaz cada mudança de linha que uma chamada derecords_changefez, da mais nova à mais antiga. Uma chamada que não mudou nenhuma linha, comoCREATE TABLEouALTER TABLE, não tem o que desfazer e é recusada com42704. - A tabela precisa de chave primária: o desfazer encontra a linha por ela. Numa tabela sem chave primária, o desfazer é recusado com
55000. Ele também é recusado com55000quando a mudança alterou o valor de uma colunaGENERATED ALWAYS AS IDENTITY; uma colunaGENERATED BY DEFAULT AS IDENTITYnão impede o desfazer. - Quando uma mudança mais nova tocou a mesma linha, o desfazer é recusado com
40001; desfaça as mais novas primeiro. Desfazer de novo o que já foi desfeito respondealready_undone.
Mudanças na estrutura de uma tabela, como criar uma tabela ou acrescentar uma coluna, não se desfazem. Uma tabela ou coluna apagada com as funções abaixo volta pela lixeira, não pelo desfazer.
Lixeira
Os Registros recusam DROP TABLE e DROP COLUMN. Para apagar uma tabela, use SELECT siglata.drop_table('tabela'); para apagar uma coluna, SELECT siglata.drop_column('tabela', 'coluna'). A tabela ou a coluna vai para a lixeira e aparece em history_list com kind: "trash".
history_undo com trash traz o item de volta. Trazer de volta um item que já voltou responde already_restored. A lixeira guarda cada item por 30 dias; depois disso, a Siglata o apaga de vez.