Hi,
wie kann ich alle Tabellen in meiner DB auf einmal leeren?
TRUNCATE auf eine Tabelle ist klar, jedoch habe ich 30 Tabellen, welche auch noch miteinander verknüpft sind. Daher muss noch ein CASCADE dahinter.
Hier habe ich etwas gefunden:
Alle Tabellen, die mit xyz_ beginnen löschen:
user@host> psql -t -c "SELECT 'DROP TABLE ' || tablename || ' CASCADE ;' FROM pg_catalog.pg_tables where tablename like 'xyz_%'" > droptables
Allerdings bleibt anzumerken, daß man Dinge, die man nicht versteht, nicht tun sollte. Wenn Du Deinen Code erfolgreich so änderst, daß nicht nur Tabellen, die mit xyz_ anfangen getroffen werden sondern alle, dann hast Du möglicherweise nicht das erreicht, was Du erreichen willst.
Gratulation. Damit hast Du auch alle Systemtabellen leer gemacht bzw. es zumindest versucht. Ob das klappt, weiß ich nicht, nie probiert. Falls nun irgendwas nicht klappt, dürfte es aber daran liegen.
du solltest dir zunaechst pg_tables mal ausgeben lassen
dann wirst du sehen, dass es einen ownername gibt - der wird aber wahrscheinlich ungeeignet sein, weil der owner deiner “eigenen” tables auch der owner von systemtabellen sein kann - z.B. wenn du bisher nur mit dem std. user gearbeitet hast
dann gibt es noch die spalte schemaname - der bietet sich wahrscheinlich eher an - z.B. wenn du dein eigenes schema benutzt ansonsten halt das standard-schema - nennt sich public …
alles in allem ist das aber eine sehr hakelige angelegeneheit …