2009-01-20 5 views
4

J'ai un nom de table ou de vue dans la base de données PostgreSQL et j'ai besoin de supprimer en une seule commande pgSQL. Comment puis-je me le permettre?Comment supprimer la table * ou * vue de la base de données PostgreSQL?

j'ai pu sélectionner table système de formulaire pour savoir s'il y a une table avec un nom, mais coincé avec une partie de la procédure:

SELECT count(*) FROM pg_tables where tablename='user_statistics'; 

Répondre

11
DROP TABLE user_statistics; 

DROP VIEW user_statistics; 

syntaxe:

DROP TABLE

DROP VIEW

Et si vous ant une fonction complète, je l'ai essayé quelque chose comme ceci:

CREATE OR REPLACE FUNCTION delete_table_or_view(objectName varchar) RETURNS integer AS $$ 
DECLARE 
    isTable integer; 
    isView integer; 
BEGIN 
    SELECT INTO isTable count(*) FROM pg_tables where tablename=objectName; 
    SELECT INTO isView count(*) FROM pg_views where viewname=objectName; 

    IF isTable = 1 THEN 
     execute 'DROP TABLE ' || objectName; 
     RETURN 1; 
    END IF; 

    IF isView = 1 THEN 
     execute 'DROP VIEW ' || objectName; 
     RETURN 2; 
    END IF; 

    RETURN 0; 

END; 
$$ LANGUAGE plpgsql; 
-4

à l'aide TABLE Tenir compte DROP IF EXISTS et DROP VIEW SI EXISTE. De cette façon, vous n'obtiendrez pas de message d'erreur en cas d'échec, juste un avis.

+5

Cela ne fonctionnera pas réellement. Si vous faites 'DROP VIEW IF EXISTS' et que la vue que vous essayez d'abandonner est en fait une table, Postgres vous donnera une erreur que ce n'est pas une vue (la même chose vaut pour' DROP TABLE IF EXISTS'). Vous devez savoir avec certitude s'il s'agit d'une table ou d'une vue. – Wolph

+0

DROP TABLE SI EXISTE nom_de_table - pour être précis – erem

Questions connexes