sql >> Databáze >  >> RDS >> PostgreSQL

Jak zruším všechny tabulky v psql (interaktivní terminál PostgreSQL), který začíná běžným slovem?

Tento skript vygeneruje příkazy DDL, aby je všechny zrušil:

SELECT 'DROP TABLE ' || t.oid::regclass || ';'
FROM   pg_class t
-- JOIN   pg_namespace n ON n.oid = t.relnamespace -- to select by schema
WHERE  t.relkind = 'r'
AND    t.relname ~~ E'doors\_%' -- enter search term for table here
-- AND n.nspname ~~ '%myschema%' -- optionally select by schema(s), too
ORDER  BY 1;

Přetypovaný t.oid::regclass umožňuje syntaxi pracovat i pro smíšené identifikátory velkých a malých písmen, vyhrazená slova nebo speciální znaky v názvech tabulek. Zabraňuje také vkládání SQL a v případě potřeby přidává před název schématu. Další informace o typech identifikátorů objektů v příručce .

O cestě pro vyhledávání schématu.

Můžete také automatizovat vypouštění, ale je to nerozumné nekontrolovat, co vlastně smažete, než to uděláte.

Můžete připojit CASCADE do každého příkazu DROP závislé objekty (pohledy a odkazování na cizí klíče). Ale to je opět nerozumné pokud moc dobře nevíš, co děláš. Omezení cizích klíčů nepředstavují žádnou velkou ztrátu, ale toto také zcela zruší všechny závislé pohledy. Bez CASCADE zobrazí se chybové zprávy informující o tom, které objekty vám brání v upuštění tabulky. A pak se s tím můžete vypořádat.



  1. PersistenceException:ERROR při provádění DML bindLog[] chyba[Pole 'id' nemá výchozí hodnotu]

  2. Osvědčený postup pro systém PHP/MySQL schůzek/rezervací

  3. Chyba syntaxe hledání a nahrazení MySQL

  4. Zobrazit všechna omezení cizích klíčů pro celou databázi MySQL