web-dev-qa-db-fra.com

postgres comment supprimer toute la table dans un schéma via la commande

J'utilise postgresql et j'ai besoin de supprimer toutes les tables présentes dans le schéma. Comment puis-je supprimer de l'invite de commande.

10
asalthangam

Vous souhaitez utiliser l'option CASCADE de DROP SCHEMA. De la documentation :

CASCADE - Supprime automatiquement les objets (tables, fonctions, etc.) contenus dans le schéma, et à son tour tous les objets qui dépendent de ces objets

SOYEZ PRUDENT - l'accent est mis sur le mien.

De toute évidence, vous devrez recréer le schéma par la suite.

Pour simplement supprimer toutes les tables du schéma actuel, vous pouvez utiliser ce script:

DO $$ DECLARE
    tabname RECORD;
BEGIN
    FOR tabname IN (SELECT tablename 
                    FROM pg_tables 
                    WHERE schemaname = current_schema()) 
LOOP
    EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(tabname.tablename) || ' CASCADE';
END LOOP;
END $$;

Modifiez WHERE schemaname = current_schema() si vous souhaitez supprimer toutes les tables dans un schéma différent.

17
Philᵀᴹ
yourdb=# DROP SCHEMA *schema_name* CASCADE;

(fonctionne, juste testé avec Postgresql 9.6.3, peut ne pas fonctionner avec les versions précédentes)

3
comte

@Techno Savvy

Supprimez les tables en utilisant la syntaxe postgres:

select '-- drop table ' || tablename || ' cascade;' from pg_tables 
where tablename not like 'pg%' and tablename not like 'sql%';

Copiez le texte résultant dans un script sql ou un terminal psql. Notez que les commandes sont commentées.

1
vinh