---
slug: agentes/mcp/historico-e-lixeira
title: "Histórico e lixeira"
description: "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 [#history]

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 [#undo]

`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 de `records_change` fez, da mais nova à mais antiga. Uma chamada que não mudou nenhuma linha, como `CREATE TABLE` ou `ALTER TABLE`, não tem o que desfazer e é recusada com `42704`.
- 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 com `55000` quando a mudança alterou o valor de uma coluna `GENERATED ALWAYS AS IDENTITY`; uma coluna `GENERATED BY DEFAULT AS IDENTITY` nã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 responde `already_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 [#trash]

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.
