Bei der Lektüre der postgres-Dokumentation sind mir eine ganze Reihe interessanter Optionen begegnet, aber besonder gut gefällt mir Folgendes: die Möglichkeit, ein DELETE in einer CTE zu definieren und die Löschungen in der Hauptquery weiter zu verarbeiten:
postgres=# create table t1 as select * from generate_series(1, 10) id; SELECT 10 postgres=# select * from t1; id ---- 1 2 3 4 5 6 7 8 9 10 (10 Zeilen) postgres=# create table t2 as select * from t1 where 1 = 0; SELECT 0 postgres=# select * from t2; id ---- (0 Zeilen) postgres=# with moved_rows as (delete from t1 where id <= 5 returning *) postgres-# insert into t2 select * from moved_rows; INSERT 0 5 postgres=# select * from t1; id ---- 6 7 8 9 10 (5 Zeilen) postgres=# select * from t2; id ---- 1 2 3 4 5 (5 Zeilen)
Damit könnten Archivierungs-Operationen sehr elegant werden.
Sehr Cool! Danke für den Beitrag!
AntwortenLöschenHi Thomas,
AntwortenLöschennett, dass Du vorbeischaust.
Mir war zwar schon vorher klar, dass postgres ein grundsolides RDBMS ist, aber den Umfang der Features hatte ich nicht komplett vor Augen: einen extrem umfangreichen SQL-Dialekt, Unmengen von Datentypen, zahlreiche Index-Varianten. Dazu plugins bis zum Abwinken. Und das alles umsonst und kostenlos. Nicht schlecht ...