DROP TABLE - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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;