Postgresql: Records archivieren über common table expressions

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;