4
我在PostgreSQL數據庫中有一個表或視圖的名稱,並且需要在單個pgSQL命令中刪除它。我怎麼買得起它?如何刪除PostgreSQL數據庫中的表*或*視圖?
我能夠選擇的形式系統表,以找出是否有這樣的名稱的任何表,但堅持了程序的一部分:
SELECT count(*) FROM pg_tables where tablename='user_statistics';
我在PostgreSQL數據庫中有一個表或視圖的名稱,並且需要在單個pgSQL命令中刪除它。我怎麼買得起它?如何刪除PostgreSQL數據庫中的表*或*視圖?
我能夠選擇的形式系統表,以找出是否有這樣的名稱的任何表,但堅持了程序的一部分:
SELECT count(*) FROM pg_tables where tablename='user_statistics';
DROP TABLE user_statistics;
DROP VIEW user_statistics;
完整的語法:
如果你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;
考慮使用DROP TABLE IF EXISTS和DROP VIEW IF EXISTS。這樣,如果失敗,您將不會收到錯誤消息,只是一個通知。
這實際上不起作用。如果你正在做`DROP VIEW IF EXISTS`並且你試圖刪除的視圖實際上是一個表,那麼Postgres會給你一個錯誤,認爲它不是視圖(DROP TABLE IF EXISTS也是如此)。您需要確定它是否是表格或視圖。 – Wolph 2010-09-13 13:41:57