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

10

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.

asalthangam
la source

Réponses:

17

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

CASCADE - Supprimez automatiquement les objets (tables, fonctions, etc.) contenus dans le schéma, et à leur 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.

Philᵀᴹ
la source
quand j'utilise DROP SCHEMA schemaname CASCADE; reçois une erreur ERREUR: erreur de syntaxe à ou près de "DROP" LIGNE 2: Schéma DROP
asalthangam
2
LINE 2? Qu'y a-t-il sur la ligne 1?
Philᵀᴹ
en fait, je dois supprimer toutes les tables et son objet dépendant. mais il ne faut pas supprimer la procédure et tout ..
asalthangam
mais lorsque j'utilise la commande drop schema, il supprime également le schéma. dans mon cas, le schéma devrait exister
asalthangam
@asalthangam réponse mise à jour
Philᵀᴹ
3
yourdb=# DROP SCHEMA *schema_name* CASCADE;

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

comte
la source
1

@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.

vinh
la source
La question était de supprimer des tables dans un schéma spécifique, je pense.
mustaccio
-2

Si vous voulez juste un moyen très simple de le faire .. Voici un script que j'ai utilisé dans le passé

select 'drop table '||table_name||' cascade constraints;' from user_tables;

Cela imprimera une série de commandes de dépôt pour toutes les tables du schéma. Spoulez le résultat de cette requête et exécutez-le.

De même, si vous souhaitez effacer plus de tableaux, vous pouvez modifier les éléments suivants en fonction de vos besoins

select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')

Source: https://forums.oracle.com/forums/thread.jspa?threadID=614090

Techno Savvy
la source
3
La question est Postgres, pas Oracle.
Philᵀᴹ