DROP TABLE - Amazon Redshift

DROP TABLE

データベースからテーブルを削除します。

テーブルを削除せずに、テーブルの行を空にする場合、DELETE または TRUNCATE コマンドを使用します。

DROP TABLE を使用すると、ターゲットテーブルに存在する制約が削除されます。1 つの DROP TABLE コマンドで複数のテーブルを削除できます。

DROP TABLE と外部テーブルは、トランザクション内 (BEGIN … END) で実行することはできません。トランザクションの詳細については、「直列化可能分離」を参照してください。

DROP 権限がグループに付与される例を見つけるには、「GRANT 」を参照してください。

必要な権限

DROP TABLE に必要な権限を以下に示します。

  • スーパーユーザー

  • DROP TABLE の権限を持つユーザー

  • スキーマに対する USAGE 権限を持つテーブル所有者

構文

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

パラメータ

IF EXISTS

指定されたテーブルが存在しない場合、コマンドはエラーで終了するのではなく、何も変更しないで、テーブルが存在しないというメッセージを返すことを示す句。

この句は、存在しないテーブルに対して DROP TABLE を実行してもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

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

2 つのテーブルの同時削除

次のコマンドセットでは、FEEDBACK テーブルと BUYERS テーブルを作成し、1 つのコマンドで両方のテーブルを削除します。

create table feedback(a int); create table buyers(a int); drop table feedback, buyers;

依存関係を持つテーブルの削除

次の手順では、CASCADE スイッチを使用して、FEEDBACK というテーブルを削除する方法について説明します。

まず、CREATE TABLE コマンドを使用して、FEEDBACK という単純なテーブルを作成します。

create table feedback(a int);

次に、CREATE VIEW コマンドを使用して、テーブル FEEDBACK に依存する FEEDBACK_VIEW というビューを作成します。

create view feedback_view as select * from feedback;

次の例では、テーブル FEEDBACK を削除し、ビュー FEEDBACK_VIEW も削除します。これは、FEEDBACK_VIEW がテーブル FEEDBACK に依存しているためです。

drop table feedback cascade;

テーブルの依存関係の表示

テーブルの依存関係を返すには、次の例を使用します。my_schemamy_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;