2009-01-20 67 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

如果你w螞蟻完整的功能,我想是這樣的:

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 EXISTSDROP VIEW IF EXISTS。這樣,如果失敗,您將不會收到錯誤消息,只是一個通知。

+5

這實際上不起作用。如果你正在做`DROP VIEW IF EXISTS`並且你試圖刪除的視圖實際上是一個表,那麼Postgres會給你一個錯誤,認爲它不是視圖(DROP TABLE IF EXISTS也是如此)。您需要確定它是否是表格或視圖。 – Wolph 2010-09-13 13:41:57

相關問題