メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

DROP TABLE

データベースからテーブルを削除します。テーブルの所有者、スキーマの所有者、またはスーパーユーザーのみがテーブルを削除できます。

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

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

DROP TABLE と外部テーブルは、トランザクション内 (BEGIN … END) で使用することはできません。

構文

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

Parameters

IF EXISTS

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

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

name

削除するテーブルの名前。

CASCADE

ビューなどのテーブルに依存するオブジェクトを自動的に削除することを示す句。

RESTRICT

テーブルに依存するオブジェクトがある場合、テーブルを削除しないことを示す句。この動作がデフォルトです。

依存するオブジェクトがないテーブルの削除

次の例では、依存するオブジェクトがない FEEDBACK というテーブルを作成して、削除します。

Copy
create table feedback(a int); drop table feedback;

テーブルに、他のテーブルを参照する列が含まれている場合、Amazon Redshift では、依存するオブジェクトも削除するには CASCADE オプションを指定する必要があることを示す次のようなメッセージが表示されます。

Copy
ERROR: cannot drop table category because other objects depend on it HINT: Use DROP ... CASCADE to drop the dependent objects too.

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

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

Copy
create table feedback(a int); create table buyers(a int); drop table feedback, buyers;
依存するオブジェクトがあるテーブルの削除

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

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

Copy
create table feedback(a int);
次に、CREATE VIEW コマンドを使用して、テーブル FEEDBACK に依存する FEEDBACK_VIEW というビューを作成します。
Copy
create view feedback_view as select * from feedback;
以下の例は、ビュー FEEDBACK_VIEW がテーブル FEEDBACK に依存しているため、テーブル FEEDBACK を削除し、ビュー FEEDBACK_VIEW も削除します。
Copy
drop table feedback cascade;
テーブルの依存関係の確認

データベース内のすべてのテーブルに関する依存関係情報を持つビューを作成できます。指定のテーブルを削除する前に、このビューに対してクエリを実行して、そのテーブルに依存するオブジェクトがあるかどうかを確認します。

次のコマンドを入力して FIND_DEPEND ビューを作成します。このビューでは、依存関係をオブジェクト参照と結合します。

Copy
create view find_depend as select distinct c_p.oid as tbloid, n_p.nspname as schemaname, c_p.relname as name, n_c.nspname as refbyschemaname, c_c.relname as refbyname, c_c.oid as viewoid from pg_catalog.pg_class c_p join pg_catalog.pg_depend d_p on c_p.relfilenode = d_p.refobjid join pg_catalog.pg_depend d_c on d_p.objid = d_c.objid join pg_catalog.pg_class c_c on d_c.refobjid = c_c.relfilenode left outer join pg_namespace n_p on c_p.relnamespace = n_p.oid left outer join pg_namespace n_c on c_c.relnamespace = n_c.oid where d_c.deptype = 'i'::"char" and c_c.relkind = 'v'::"char";

ここで SALES テーブルから SALES_VIEW を作成します。

Copy
create view sales_view as select * from sales;

FIND_DEPEND ビューに対してクエリを実行して、データベース内の依存関係を表示します。次のコードに示すように、PUBLIC スキーマに対するクエリの範囲を制限します。

Copy
select * from find_depend where refbyschemaname='public' order by name;

このクエリは次の依存関係を返します。この例では、SALES テーブルを削除するときに、CASCADE オプションを使用して SALES_VIEW ビューも削除されます。

Copy
tbloid | schemaname | name | viewoid | refbyschemaname | refbyname --------+------------+-------------+---------+-----------------+------------- 100241 | public | find_depend | 100241 | public | find_depend 100203 | public | sales | 100245 | public | sales_view 100245 | public | sales_view | 100245 | public | sales_view (3 rows)

IF EXISTS を使用したテーブルの削除

次の例では、FEEDBACK テーブルが存在する場合は削除し、存在しない場合は何もしないでメッセージを返します。

Copy
drop table if exists feedback;

このページの内容: