DROP TABLE - Amazon Redshift

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

DROP TABLE

從資料庫移除資料表。

如果您嘗試清空資料列資料表,而不移除資料表,請使用 DELETE或 TRUNCATE命令。

DROP TABLE 移除目標資料表上存在的限制。可以使用單一DROPTABLE命令移除多個資料表。

DROP TABLE 無法在交易 (BEGIN ... ) 內執行具有外部資料表的 END。如需交易的相關資訊,請參閱 可序列化隔離

若要尋找將DROP權限授予群組的範例,請參閱 GRANT 範例

所需權限

以下是 DROP 的必要權限TABLE:

  • 超級使用者

  • 具有 DROPTABLE權限的使用者

  • 具有結構描述上USAGE權限的資料表擁有者

語法

DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

參數

IF EXISTS

此子句會指出,若指定的資料表不存在,則命令不應進行任何變更,且應傳回資料表不存在的訊息,而不是在發生錯誤的情況下終止。

此子句在指令碼時很有用,因此如果對不存在的資料表DROPTABLE執行 ,指令碼不會失敗。

name

要捨棄的資料表名稱。

CASCADE

此子句指出,自動捨棄取決於資料表的物件,例如檢視。

若要建立不依賴於其他資料庫物件的檢視,例如檢視和資料表,請在檢視定義中包含 WITH NO SCHEMABINDING子句。如需詳細資訊,請參閱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交換機呼叫的資料表。

首先,FEEDBACK使用 CREATETABLE命令建立名為 的簡單資料表:

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;