Grosse Tabellen machen die Datenbank langsam. In diesem Beispiel werden die Datensätze einer Log-Tabelle nach einem Jahr (366 Tagen) in eine Archiv-Tabelle übertragen. Gelöst wird das Ganze elegant über Common Table Expressions (CTE).
WITH moved_rows AS (
DELETE FROM log_messages a
WHERE log_time < now() - interval '366 days'
RETURNING a.*
) INSERT INTO log_messages_archive SELECT * FROM moved_rows;