Bei der Arbeit mit Partitionen müssen häufig alle Partitionen gleichzeitig gelöscht werden.
jedoch
DROP TABLE tablename*
Funktioniert nicht. (Der Platzhalter wird nicht beachtet).
Gibt es eine elegante (sprich: leicht zu merkende) Möglichkeit, mehrere Tabellen in einem Befehl mit einem Platzhalter abzulegen?
sql
postgresql
Tom Feiner
quelle
quelle
|| ' CASCADE ';
und es ist perfektHier ist eine weitere hackige Antwort auf dieses Problem. Es funktioniert in
ubuntu
und vielleicht auch in einem anderen Betriebssystem .\dt
Führen Sie eine In-Postgres-Eingabeaufforderung aus (die Eingabeaufforderung wurdegenome-terminal
in meinem Fall ausgeführt). Dann sehen Sie viele Tabellen im Terminal. Verwenden Sie nun diectrl+click-drag
Funktionalität von, um diegenome-terminal
Namen aller Tabellen zu kopieren. Öffnen Sie Python, führen Sie eine Zeichenfolgenverarbeitung durch (ersetzen Sie '' durch '' und dann '\ n' durch ','), und Sie erhalten eine durch Kommas getrennte Liste aller Tabellen. Jetzt in psql Shell mache adrop table CTRL+SHIFT+V
und du bist fertig. Ich weiß, dass es zu spezifisch ist, dass ich es nur teilen wollte. :) :)quelle
DROP TABLE whatever_
und drücke dann die Tabulatortaste, kopiere alle Tabellen in die Zwischenablage, öffne sublime, suche / ersetze und ersetze sie mit regulären Ausdrücken\s+
für,
und füge sie in das Terminal ein.\e
, kopieren Sie sie in Ihre Liste und setzen Sie Kommas.Ich habe das benutzt.
echo "select 'drop table '||tablename||';' from pg_tables where tablename like 'name%'" | \ psql -U postgres -d dbname -t | \ psql -U postgres -d dbname
Ersetzen Sie in die entsprechenden Werte
dbname
undname%
.quelle
Ich habe mich immer viel wohler gefühlt, wenn ich ein SQL-Skript erstellt habe, das ich überprüfen und testen kann, bevor ich es ausführe, als mich darauf zu verlassen, dass plpgsql genau richtig ist, damit meine Datenbank nicht zerstört wird. Etwas Einfaches in Bash, das die Tabellennamen aus dem Katalog auswählt und dann die Drop-Anweisungen für mich erstellt. Für 8.4.x erhalten Sie also diese grundlegende Abfrage:
SELECT 'drop table '||n.nspname ||'.'|| c.relname||';' as "Name" FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN ('r','v','S','') AND n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema' AND n.nspname !~ '^pg_toast' AND pg_catalog.pg_table_is_visible(c.oid);
Dem können Sie eine where-Klausel hinzufügen. (
where c.relname ilike 'bubba%'
)Die Ausgabe sieht folgendermaßen aus:
Name ----------------------- drop table public.a1; drop table public.a2;
Speichern Sie das also in einer .sql-Datei und führen Sie es mit psql -f filename.sql aus
quelle
drop table
Befehl für alle gefundenen Sequenzen erzeugt (relkind = 'S'
).drop table
auf einer Sequenz wird fehlschlagen. Entfernen Sie stattdessen'S'
aus derrelkind IN
Klausel. Wenn Sie Sequenzenselect 'drop sequence'
c.relkind = 'S'
Offenlegung: Diese Antwort ist für Linux-Benutzer gedacht.
Ich würde dem, was @prongs sagte, einige spezifischere Anweisungen hinzufügen:
\dt
kann Platzhalter unterstützen: So können Sie\dt myPrefix*
beispielsweise ausführen , um nur die Tabellen auszuwählen, die Sie löschen möchten.CTRL-SHIFT-DRAG
auswählen,CTRL-SHIFT-C
um den Text zu kopieren;vim
, gehe zuINSERT MODE
und füge die Tabellen mit einCTRL-SHIFT-V
;ESC
und führen Sie dann aus:%s/[ ]*\n/, /g
, um es in eine durch Kommas getrennte Liste zu übersetzen. Anschließend können Sie es (ohne das letzte Komma) einfügenDROP TABLE % CASCADE
.quelle
Mit Linux-Befehlszeilentools können Sie dies folgendermaßen tun:
psql -d mydb -P tuples_only=1 -c '\dt' | cut -d '|' -f 2 | paste -sd "," | sed 's/ //g' | xargs -I{} echo psql -d mydb -c "drop table {};"
HINWEIS: Das letzte Echo ist vorhanden, da ich keine Möglichkeit gefunden habe, Anführungszeichen um den Befehl drop zu setzen. Sie müssen daher die Ausgabe kopieren und einfügen und die Anführungszeichen selbst hinzufügen.
Wenn jemand dieses kleine Problem beheben kann, wäre das eine großartige Sauce.
quelle
Also habe ich mich heute diesem Problem gestellt. Ich habe meine Server-Datenbank über pgadmin3 geladen und es so gemacht. Die Tabellen sind alphabetisch sortiert, sodass das Verschieben und Klicken gefolgt vom Löschen gut funktioniert.
quelle