

 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/)を参照してください。

# ALTER TABLE の例
<a name="r_ALTER_TABLE_examples_basic"></a>

次の例は、ALTER TABLE コマンドの基本用法を示しています。

## テーブルまたはビューの名前の変更
<a name="r_ALTER_TABLE_examples_basic-rename-a-table"></a>

次のコマンドは、USERS テーブルを USERS\$1BKUP に名前変更します。

```
alter table users
rename to users_bkup;
```

 このタイプのコマンドを使用して、ビューの名前を変更することもできます。

## テーブルまたはビューの所有者の変更
<a name="r_ALTER_TABLE_examples_basic-change-the-owner-of-a-table-or-view"></a>

次のコマンドは VENUE テーブルの所有者をユーザー DWUSER に変更します。

```
alter table venue
owner to dwuser;
```

次のコマンドは、ビューを作成した後、その所有者を変更します。

```
create view vdate as select * from date;
alter table vdate owner to vuser;
```

## 列名の変更
<a name="r_ALTER_TABLE_examples_basic-rename-a-column"></a>

次のコマンドは VENUE テーブルの列名を VENUESEATS から VENUESIZE に変更します。

```
alter table venue
rename column venueseats to venuesize;
```

## テーブルの制約を削除する
<a name="r_ALTER_TABLE_examples_drop-constraint"></a>

プライマリキー、外部キーまたは一意の制約のようなテーブルの制約を削除するには、まず内部の制約名を見つけます。その後、ALTER TABLE コマンドで制約名を指定します。次の例では、CATEGORY テーブルの制約を見つけてから、`category_pkey`という名前のプライマリキーを削除します。

```
select constraint_name, constraint_type
from information_schema.table_constraints
where constraint_schema ='public'
and table_name = 'category';

constraint_name | constraint_type
----------------+----------------
category_pkey   | PRIMARY KEY

alter table category
drop constraint category_pkey;
```

## VARCHAR 列の変更
<a name="r_ALTER_TABLE_examples_alter-column"></a>

ストレージを節約するため、最初に現在のデータ要件に必要な最小サイズの VARCHAR 列を使用してテーブルを定義することができます。後でより長い文字列を収容するには、テーブルを変更して列のサイズを大きくすることができます。

次の例では、EVENTNAME 列のサイズを VARCHAR(300) に増やします。

```
alter table event alter column eventname type varchar(300);
```

## VARBYTE 列を変更する
<a name="r_ALTER_TABLE_examples_alter-varbyte-column"></a>

ストレージを節約するために、最初に現在のデータ要件に必要な最小サイズの VARBYTE 列を使用してテーブルを定義できます。後でより長い文字列を収容するには、テーブルを変更して列のサイズを大きくすることができます。

次の例では、EVENTNAME 列のサイズを VARBYTE(300) に増やします。

```
alter table event alter column eventname type varbyte(300);
```

## 列の圧縮エンコードを変更する
<a name="r_ALTER_TABLE_examples_alter-column-encoding"></a>

列の圧縮エンコードは変更できます。以下に、このアプローチを示す一連の例を示します。これらの例のテーブルは次のように定義されています。

```
create table t1(c0 int encode lzo, c1 bigint encode zstd, c2 varchar(16) encode lzo, c3 varchar(32) encode zstd);
```

次のステートメントは、列 c0 の圧縮エンコードを LZO エンコードから AZ64 エンコードに変更します。

```
alter table t1 alter column c0 encode az64;
```

次のステートメントは、列 c1 の圧縮エンコードを Zstandard エンコードから AZ64 エンコードに変更します。

```
alter table t1 alter column c1 encode az64;
```

次のステートメントは、列 c2 の圧縮エンコードを LZO エンコードからバイトディクショナリエンコードに変更します。

```
alter table t1 alter column c2 encode bytedict;
```

次のステートメントは、列 c3 の圧縮エンコードを Zstandard エンコードから Runlength エンコードに変更します。

```
alter table t1 alter column c3 encode runlength;
```

## DISTSTYLE KEY DISTKEY 列の変更
<a name="r_ALTER_TABLE_examples_alter-distkey"></a>

次の例は、テーブルの DISTSTYLE および DISTKEY を変更する方法を示しています。

EVEN 分散スタイルを指定してテーブルを作成します。SVV\$1TABLE\$1INFO ビューは、DISTSTYLE が EVEN であることを示しています。

```
create table inventory(
  inv_date_sk int4 not null ,
  inv_item_sk int4 not null ,
  inv_warehouse_sk int4 not null ,
  inv_quantity_on_hand int4
) diststyle even;

Insert into inventory values(1,1,1,1);

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     EVEN
```

DISTKEY テーブルを `inv_warehouse_sk` に変更してください。SVV\$1TABLE\$1INFO ビューは、`inv_warehouse_sk`列を結果の分散キーとして示しています。

```
alter table inventory alter diststyle key distkey inv_warehouse_sk;

select "table", "diststyle" from svv_table_info;

   table   |       diststyle
-----------+-----------------------
 inventory | KEY(inv_warehouse_sk)
```

DISTKEY テーブルを `inv_item_sk` に変更してください。SVV\$1TABLE\$1INFO ビューは、`inv_item_sk`列を結果の分散キーとして示しています。

```
alter table inventory alter distkey inv_item_sk;

select "table", "diststyle" from svv_table_info;

   table   |       diststyle
-----------+-----------------------
 inventory | KEY(inv_item_sk)
```

## テーブルを DISTSTYLE ALL に変更する
<a name="r_ALTER_TABLE_examples_alter-diststyle-all"></a>

次の例では、テーブルを DISTSTYLE ALL に変更する方法を説明します。

EVEN 分散スタイルを指定してテーブルを作成します。SVV\$1TABLE\$1INFO ビューは、DISTSTYLE が EVEN であることを示しています。

```
create table inventory(
  inv_date_sk int4 not null ,
  inv_item_sk int4 not null ,
  inv_warehouse_sk int4 not null ,
  inv_quantity_on_hand int4
) diststyle even;

Insert into inventory values(1,1,1,1);

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     EVEN
```

DISTSTYLE テーブルを ALL に変更します。SVV\$1TABLE\$1INFO ビューには、変更された DISTSYTLE が表示されます。

```
alter table inventory alter diststyle all;

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     ALL
```

## テーブルの SORTKEY を変更する
<a name="r_ALTER_TABLE_examples_alter-sortkey"></a>

複合ソートキーを使用する、あるいはソートキーを使用しないようにテーブルを変更できます。

次のテーブル定義では、テーブル `t1` は、インターリーブソートキーを使用するように定義されます。

```
create table t1 (c0 int, c1 int) interleaved sortkey(c0, c1);
```

次のコマンドは、インターリーブされたソートキーの使用から複合ソートキーの使用に、テーブルを変更します。

```
alter table t1 alter sortkey(c0, c1);
```

次のコマンドは、インターリーブソートキーを削除するためにテーブルを変更します。

```
alter table t1 alter sortkey none;
```

次のテーブル定義では、テーブル `t1` のソートキーとして `c0` 列を定義しています。

```
create table t1 (c0 int, c1 int) sortkey(c0);
```

次のコマンドは、テーブル `t1` を複合ソートキーの使用に変更します。

```
alter table t1 alter sortkey(c0, c1);
```

## テーブルを ENCODE AUTO に変更する
<a name="r_ALTER_TABLE_examples_alter-encode-auto"></a>

次の例は、テーブルを ENCODE AUTO に変更する方法を示しています。

例えば、テーブルは次のように定義されています。列 `c0` はエンコードタイプ AZ64 で定義され、列 `c1` はエンコードタイプ LZO で定義されます。

```
create table t1(c0 int encode AZ64, c1 varchar encode LZO);
```

このテーブルの場合、次のステートメントはエンコードを AUTO に変更します。

```
alter table t1 alter encode auto;
```

次の例は、テーブルを変更して ENCODE AUTO 設定を削除する方法を示しています。

例えば、テーブルは次のように定義されています。テーブルの列は、エンコードなしで定義されます。この場合、エンコードはデフォルトで ENCODE AUTO になります。

```
create table t2(c0 int, c1 varchar);
```

このテーブルの場合、次のステートメントは列 c0 のエンコードを LZO に変更します。テーブルのエンコードが ENCODE AUTO に設定されなくなりました。

```
alter table t2 alter column c0 encode lzo;;
```

## 行レベルのセキュリティコントロールの変更
<a name="r_ALTER_TABLE_examples_basic-rls"></a>

次のコマンドは、テーブルの RLS をオフにします。

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY OFF;
```

次のコマンドは、テーブルの RLS をオンにします。

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
```

次のコマンドは、テーブルの RLS をオンにし、データ共有上でテーブルにアクセスできるようにします。

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES OFF;
```

次のコマンドは、テーブルの RLS をオンにして、データ共有上でテーブルにアクセスできなくします。

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES ON;
```

次のコマンドは、RLS をオンにし、テーブルの RLS 結合タイプを OR に設定します。

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE OR;
```

次のコマンドは、RLS をオンにし、テーブルの RLS 結合タイプを AND に設定します。

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE AND;
```