2009-01-20 4 views
4

У меня есть имя таблицы или представления в базе данных PostgreSQL и нужно удалить ее в одной команде pgSQL. Как я могу себе это позволить?Как удалить таблицу * или * из базы данных PostgreSQL?

Я был в состоянии выбрать таблицу формы системы, чтобы узнать, есть ли таблица с таким именем, но застрял с процедурной части:

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

ответ

11
DROP TABLE user_statistics; 

DROP VIEW user_statistics; 

полный синтаксис:

DROP TABLE

DROP VIEW

И если вы муравей полную функцию, я пытался что-то вроде этого:

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

Рассмотрим с помощью DROP TABLE IF EXISTS и DROP VIEW IF EXISTS. Таким образом, вы не получите сообщение об ошибке, если оно не получится, просто уведомление.

+5

Это не будет работать на самом деле. Если вы выполняете 'DROP VIEW IF EXISTS', и представление, которое вы пытаетесь удалить, на самом деле является таблицей, чем Postgres, вы получите сообщение о том, что это не представление (то же самое относится к' DROP TABLE IF EXISTS'). Вы должны знать наверняка, если это таблица или представление. – Wolph

+0

DROP TABLE IF EXISTS name_of_table - если быть точным – erem

 Смежные вопросы

  • Нет связанных вопросов^_^