

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# DROP TABLE
<a name="r_DROP_TABLE"></a>

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

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

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

外部テーブルに対しての DROP TABLE は、トランザクション内 (BEGIN … END) で実行することはできません。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。

DROP 権限がグループに付与される例を見つけるには、「GRANT [例](r_GRANT-examples.md)」を参照してください。

## 必要な権限
<a name="r_DROP_TABLE-privileges"></a>

DROP TABLE に必要な権限を以下に示します。
+ スーパーユーザー
+ DROP TABLE の権限を持つユーザー
+ スキーマに対する USAGE 権限を持つテーブル所有者

## 構文
<a name="r_DROP_TABLE-synopsis"></a>

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

## パラメータ
<a name="r_DROP_TABLE-parameters"></a>

IF EXISTS  
指定されたテーブルが存在しない場合、コマンドはエラーで終了するのではなく、何も変更しないで、テーブルが存在しないというメッセージを返すことを示す句。  
この句は、存在しないテーブルに対して DROP TABLE を実行してもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

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

CASCADE  
ビューなどのテーブルに依存するオブジェクトを自動的に削除することを示す句。  
ビューやテーブルなど、他のデータベースオブジェクトに依存しないビューを作成するには、ビュー定義に WITH NO SCHEMA BINDING 句を含めます。詳細については、「[CREATE VIEW](r_CREATE_VIEW.md)」を参照してください。

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

## 例
<a name="r_DROP_TABLE-examples"></a>

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

次の例では、依存するオブジェクトがない 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 テーブルを作成し、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\$1VIEW というビューを作成します。

```
create view feedback_view as select * from feedback;
```

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

```
drop table feedback cascade;
```

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

テーブルの依存関係を返すには、次の例を使用します。*my\$1schema* と *my\$1table* を独自のスキーマとテーブルに置き換えます。

```
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\$1table* とその依存関係を削除するには、次の例を使用します。この例では、削除されたテーブルのすべての依存関係も返されます。

```
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;
```