本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
DROP TABLE
從資料庫移除資料表。
如果您嘗試清空列的表格,而不移除資料表,請使用DELETE或TRUNCATE指令。
DROPTABLE移除目標資料表上存在的條件約束。可以使用單個DROPTABLE命令刪除多個表。
DROPTABLE使用外部表不能在事務(BEGIN...END)中運行。如需交易的相關資訊,請參閱 可序列化隔離。
要查找將DROP權限授予某個組的實例,請參閱GRANT範例。
所需權限
以下是所需的權限 DROPTABLE:
超級使用者
具有DROPTABLE權限的使用者
具有結構描述USAGE權限的資料表擁有者
語法
DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
參數
- 如果 EXISTS
-
此子句會指出,若指定的資料表不存在,則命令不應進行任何變更,且應傳回資料表不存在的訊息,而不是在發生錯誤的情況下終止。
這個子句在編寫指令碼時很有用,所以如果針對不存在的資料表DROPTABLE執行,指令碼不會失敗。
- name
-
要捨棄的資料表名稱。
- CASCADE
-
此子句指出,自動捨棄取決於資料表的物件,例如檢視。
若要建立不相依於其他資料庫物件 (例如檢視表和資料表) 的檢視,請在檢視定義中加入 WITH NO SCHEMA BINDING 子句。如需詳細資訊,請參閱CREATE VIEW。
- RESTRICT
-
此子句指出,若有任何物件相依於資料表,則不捨棄資料表。這是預設動作。
範例
丟棄無相依性的資料表
下列範例會建立並卸除名為沒有FEEDBACK相依性的資料表:
create table feedback(a int); drop table feedback;
若資料表包含的資料欄為檢視或其他資料表所參考,Amazon Redshift 會顯示以下訊息。
Invalid operation: cannot drop table feedback because other objects depend on it
同步丟棄兩個資料表
下面的命令集創建一個FEEDBACK表和一個BUYERS表,然後用一個命令刪除這兩個表:
create table feedback(a int); create table buyers(a int); drop table feedback, buyers;
丟棄具有相依性的資料表
下列步驟顯示如何刪除FEEDBACK使用CASCADE參數呼叫的資料表。
首先,創建一個使用CREATETABLE命令調FEEDBACK用的簡單表:
create table feedback(a int);
接下來,使用CREATEVIEW命令來創建一個名為 FEEDBACK _ VIEW 的視圖依賴於該表FEEDBACK:
create view feedback_view as select * from feedback;
下面的例子刪除表FEEDBACK,也刪除視圖 FEEDBACK _VIEW,因為 FEEDBACK _ VIEW 是依賴於表FEEDBACK:
drop table feedback cascade;
檢視資料表的相依性
若要傳回資料表的相依性,請使用下列範例。Replace (取代) my_schema
以及 my_table
使用您自己的模式和表格。
SELECT dependent_ns.nspname as dependent_schema , dependent_view.relname as dependent_view , source_ns.nspname as source_schema , source_table.relname as source_table , pg_attribute.attname as column_name FROM pg_depend JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid AND pg_depend.refobjsubid = pg_attribute.attnum JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace WHERE source_ns.nspname = 'my_schema' AND source_table.relname = 'my_table' AND pg_attribute.attnum > 0 ORDER BY 1,2 LIMIT 10;
若要下降 my_table
及其依賴關係,請使用以下示例。此範例也會傳回已捨棄資料表的所有相依性。
DROP TABLE my_table CASCADE; SELECT dependent_ns.nspname as dependent_schema , dependent_view.relname as dependent_view , source_ns.nspname as source_schema , source_table.relname as source_table , pg_attribute.attname as column_name FROM pg_depend JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid AND pg_depend.refobjsubid = pg_attribute.attnum JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace WHERE source_ns.nspname = 'my_schema' AND source_table.relname = 'my_table' AND pg_attribute.attnum > 0 ORDER BY 1,2 LIMIT 10;
+------------------+----------------+---------------+--------------+-------------+ | dependent_schema | dependent_view | source_schema | source_table | column_name | +------------------+----------------+---------------+--------------+-------------+
刪除表使用 IF EXISTS
下列範例會捨棄FEEDBACK資料表 (如果資料表存在),或者不執行任何動作,如果不會傳回訊息:
drop table if exists feedback;