Tabellen nacheinander leeren

Hallo zusammen,

bitte schaut euch mal meine Abfrage als Screenshot im Anhang an.

Damit soll erreicht werden, dass die aktuelle Anzahl an Datensätzen - 365 Tage angezeigt werden, danach die Datensätze der letzten 365 Tage geleert werden und anschließend die nun vorhandenen Datensätze - 365 Tage angezeigt. Das Ganze mit drei Tabellen.

Das Leeren der Tabellen klappt bisher, nur leider bekomme ich es irgendwie nicht hin, vor und nach dem Leeren der jeweiligen Tabelle per SELECT COUNT() dei Anazhl der Zeilen anzuzeigen.

Könnt ihr mir weiterhelfen?

Vielen Dank und viele Grüße.

Wenn die schon gelöscht sind, kannst Du sie nicht mehr löschen. Also beim löschen zählen, so:

test=# create table foo as select s from generate_Series(1,10)s;
SELECT 10
Time: 21,439 ms
test=*# select * from foo;
 s
----
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
(10 rows)

Time: 0,200 ms
test=*# with x as (delete from foo where s < 8 returning *) select count(x)::text || ' rows gelöscht' as geloescht from x;
    geloescht
-----------------
 7 rows gelöscht
(1 row)

Hallo akretschmer,

danke für deine Antwort.
Ist es denn möglich, dass wenigstens vor dem Löschen die Zeilen gezählt und ausgegeben werden? Oder ist das allein schon schwierig, da es hierbei um das Zählen von drei Tabellen geht?

Viele Grüße.

Dann zähl halt OHNE zu löschen, anhand Deiner Where-Condition. Wo ist da jetzt das Problem?

Ach so, Du willst in 3 Tabellen zählen?

select (select count() from tab1) as tab1, (select count) from tab2) as tab2;

Das Problem ist das Ganze in einem Skript auszuführen und die entsprechenden Ergebnisse zu bekommen :smiley: .

Was genau ist daran das Problem? Du willst hinterher wissen, was Du in den 3 Tabellen gelöscht hast? Dazu kannst Du auch meine CTE-Abfrage erweitern, sinngemäß

with
x as (delete from table_x returning *),
y as (delete from table_x returning *),
z as (delete from table_z returning *)

select (select count() from x) as del_x, (select count() from y) as del_y, …