すべてのプロダクト
Search
ドキュメントセンター

Hologres:ALTER TABLE

最終更新日:Mar 01, 2026

`ALTER TABLE` 文はテーブルを変更します。パーティションテーブルの親テーブルへの変更は、その子テーブルに自動的に適用されます。このトピックでは、`ALTER TABLE` 文の使用方法について説明します。

制限事項

Hologres は、次のテーブル変更をサポートしています。

  • テーブル名の変更、列の追加、テーブルデータの存続時間 (TTL) の変更。

  • フィールドのデフォルト値、および `dictionary_encoding_columns` と `bitmap_columns` プロパティの変更。

注意事項

`dictionary_encoding_columns`、`bitmap_columns`、`time_to_live_in_seconds` などのテーブルプロパティを変更すると、バックグラウンドで非同期コンパクションがトリガーされることがあります。このプロセスは CPU リソースを消費します。インスタンスのストレージ使用量は、減少する前に増加する可能性があります。

データ型の変更

Hologres V3.0 以降、内部テーブルの列のデータ型を変更できます。

  • 制限事項

    • 非パーティションテーブルとパーティションテーブルの親テーブルの列の型を変更できます。子テーブルの列の型は変更できません。

    • 親テーブルのパーティションキー列のデータ型は変更できません。

    • `COLLATE` 句と `USING` 句はサポートされていません。

    • 次のデータ型変換のみがサポートされています。

      元のデータ型

      ターゲットの型

      注意事項

      VARCHAR(N)

      VARCHAR(M)

      M は N より大きい必要があります。

      VARCHAR(N)

      TEXT

      なし

      CHAR(N)

      CHAR(M)

      M は N より大きい必要があります。

      CHAR(N)

      VARCHAR(M)

      M は N 以上である必要があります。

      CHAR(N)

      TEXT

      なし

      JSON

      TEXT

      なし

      VARCHAR(N)[]

      VARCHAR(M)[]

      M は N より大きい必要があります。

      VARCHAR(N)[]

      TEXT[]

      なし

  • 構文

    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> ALTER [ COLUMN ] <column_name> TYPE <data_type>;
  • DROP TABLE IF EXISTS t;
    
    CREATE TABLE IF NOT EXISTS t (
        a varchar(5)
    );
    
    INSERT INTO t VALUES ('holo'), ('gres');
    
    ALTER TABLE IF EXISTS t ALTER COLUMN a TYPE text;

名前の変更

`ALTER TABLE` 文を使用して、テーブルの名前を変更できます。ターゲットテーブルが存在しない場合、または新しいテーブル名が既に使用されている場合、システムはエラーを返します。

説明

スキーマをまたいでテーブルの名前を変更することはできません。

  • 構文

    -- 内部テーブルの名前を変更
    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> RENAME TO <new_table_name>;
    
    -- 外部テーブルの名前を変更
    ALTER FOREIGN TABLE [IF EXISTS] [<schema_name>.]<foreign_table_name> RENAME TO <new_foreign_table_name>;
  • -- holo_test テーブルの名前を holo_test_1 に変更
    ALTER TABLE IF EXISTS public.holo_test RENAME TO holo_test_1 ;
    
    -- foreign_holo_test 外部テーブルの名前を foreign_holo_test_1 に変更
    ALTER FOREIGN TABLE IF EXISTS public.foreign_holo_test RENAME TO foreign_holo_test_1;

列の追加

`ALTER TABLE` 文を使用して、テーブルに列を追加できます。新しい列は、最後の既存の列の後ろにのみ追加できます。

  • 構文

    -- 列を追加
    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> ADD COLUMN <new_column> <data_type>;
    
    -- 複数の列を追加
    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> ADD COLUMN <new_column_1> <data_type>, ADD COLUMN <new_column_2> <data_type>; 
  • -- holo_test テーブルに id 列を追加
    ALTER TABLE IF EXISTS public.holo_test ADD COLUMN id int;

列の削除 (ベータ)

Hologres V2.0 以降、列を削除できます。構文は次のとおりです。

  • 制限事項

    • この機能は Hologres V2.0 以降でのみ利用可能です。ご利用のインスタンスが V2.0 より前のバージョンの場合は、「アップグレード準備時の一般的なエラー」をご参照いただくか、Hologres DingTalk グループに参加してフィードバックをお寄せください。詳細については、「オンラインサポートの追加入手方法」をご参照ください。

    • パーティションテーブルを使用する場合、列は親テーブルからのみ削除でき、子テーブルから直接削除することはできません。親テーブルから列が削除されると、その子テーブルからも自動的に削除されます。この操作はオーバーヘッドが高いため、オフピーク時に実行することを推奨します。

    • テーブルのオーナーのみが列を削除できます。データベースで簡易権限モデルを使用している場合は、開発者ユーザーグループの権限が必要です。

    • プライマリキー、ディストリビューションキー、クラスタリングキー、または `Event_time_column` として設定されている列は削除できません。

    • 外部テーブルから列を削除することはできません。

    • JSONB 関連の列を削除すると、関連付けられた JSONB インデックスも削除されます。

    • `proxima_vector` 列を削除する場合は、cascade パラメーターを指定する必要があります。

    • `Serial` 列を削除する際に、この列に基づいてシーケンスが作成されていた場合、そのシーケンスも削除されます。

    • テーブルに対してマテリアライズドビューが作成されている場合、ソーステーブルや、マテリアライズドビューによって参照されているソーステーブルの列を削除することはできません。

  • 構文

    重要

    Hologres V2.0 より前のバージョンでは列を削除できません。

    set hg_experimental_enable_drop_column = on; --この GUC パラメーターを使用してこの機能を有効にします。
    ALTER TABLE IF EXISTS <table_name> DROP COLUMN  [ IF EXISTS ] <column> [ RESTRICT | CASCADE ]
  • -- テーブルの作成
    begin;
    CREATE TABLE tbl (
     "id" bigint NOT NULL,
     "name" text NOT NULL,
     "age" bigint,
     "class" text NOT NULL,
     "reg_timestamp" timestamptz NOT NULL,
    PRIMARY KEY (id,age)
    );
    call set_table_property('tbl', 'orientation', 'column');
    call set_table_property('tbl', 'distribution_key', 'id');
    call set_table_property('tbl', 'clustering_key', 'age');
    call set_table_property('tbl', 'event_time_column', 'reg_timestamp');
    call set_table_property('tbl', 'bitmap_columns', 'name,class');
    call set_table_property('tbl', 'dictionary_encoding_columns', 'class:auto');
    commit;
    
    -- 指定された列の削除
    set hg_experimental_enable_drop_column = on;--この機能はベータ版です。この GUC パラメーターを使用して有効にする必要があります。
    ALTER TABLE IF EXISTS tbl DROP COLUMN name;

    テーブルをクエリします。

    SELECT*FROMtbl;
    
    -- 次の結果が返されます。
    id    age    class    reg_timestamp
    ----+-----+---------+--------------
                        

列名の変更

Hologres V1.1 以降、列の名前を変更できます。構文は次のとおりです。

説明
  • ご利用のインスタンスが V1.1 より前のバージョンの場合は、アップグレード準備時の一般的なエラー」をご参照いただくか、Hologres DingTalk グループに参加してフィードバックをお寄せください。詳細については、「オンラインサポートの追加入手方法」をご参照ください。

  • パーティションテーブルを使用する場合、特定の-子テーブルではなく、親テーブルの列のみ名前を変更できます。親テーブルとその子テーブルのデータ構造は一致している必要があります。親テーブルの列の名前を変更すると、その変更はすべての子テーブルに自動的に適用されます。

  • 複数のテーブルの列を同時に名前変更することはできません。

  • テーブルのオーナーのみが列の名前を変更できます。データベースで簡易権限モデルを使用している場合は、開発者ユーザーグループの権限が必要です。

  • 構文

    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> RENAME COLUMN <old_column_name> TO <new_column_name>;
  • -- holo_test テーブルの id 列の名前を name に変更
    ALTER TABLE IF EXISTS public.holo_test RENAME COLUMN id TO name; 

デフォルト値の変更

`ALTER TABLE` 文を使用して、列のデフォルト値を変更できます。デフォルト値は定数または定数式に設定できます。新しいデフォルト値は、変更後に書き込みまたは更新されるデータにのみ適用されます。テーブル内の既存のデータには影響しません。この機能は Hologres V0.9.23 以降でのみ利用可能です。次のセクションでは、デフォルト値を変更する方法について説明します。

  • 構文

    -- テーブルフィールドのデフォルト値を変更
    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> ALTER COLUMN <column> SET DEFAULT <expression>;
    
    -- テーブルフィールドのデフォルト値を削除
    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> ALTER COLUMN <column> DROP DEFAULT;
  • -- holo_test テーブルの id 列のデフォルト値を 0 に設定
    ALTER TABLE IF EXISTS holo_test ALTER COLUMN id SET DEFAULT 0;
    
    -- holo_test テーブルの id 列のデフォルト値を削除
    ALTER TABLE IF EXISTS holo_test ALTER COLUMN id DROP DEFAULT;

テーブルプロパティの変更

Hologres では、文を実行してパラメーターを修正し、テーブルプロパティを変更できます。次のセクションでは、テーブルプロパティを変更する方法について説明します。

  • dictionary_encoding_columns プロパティの変更。ディクショナリエンコーディングの設定を変更すると、データファイルが再エンコードされます。このプロセスは、一定期間 CPU とメモリリソースを消費します。この変更はオフピーク時に実行することを推奨します。

    • 構文

      -- dictionary_encoding_columns の変更 (V2.1 から利用可能)
      ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (dictionary_encoding_columns = '[columnName{:[on|off|auto]}[,...]]'); --完全な変更のみがサポートされています。
      
      -- dictionary_encoding_columns の変更 (すべてのバージョン)
      --完全な変更
      CALL SET_TABLE_PROPERTY('[<schema_name>.]<table_name>', 'dictionary_encoding_columns', '[columnName{:[on|off|auto]}[,...]]');
      
      --増分変更。呼び出しで指定されたフィールドのみが変更されます。他のフィールドは変更されません。
      CALL UPDATE_TABLE_PROPERTY('[<schema_name>.]<table_name>', 'dictionary_encoding_columns', '[columnName{:[on|off|auto]}[,...]]');
      重要

      Hologres V2.0 以降、`UPDATE_TABLE_PROPERTY` 構文が最適化されました。次の文を実行しても、テーブルの dictionary_encoding_columns プロパティは変更されません。Hologres V2.0 より前のバージョンでは、テーブルの dictionary_encoding_columns プロパティはクリアされます。

      CALL UPDATE_TABLE_PROPERTY('<table_name>','dictionary_encoding_columns','');
    • パラメーターの説明

      パラメーター

      説明

      table_name

      テーブル名では大文字と小文字が区別され、スキーマ情報を含めることができます。

      on

      現在のフィールドに対して dictionary_encoding_columns を有効にします。

      off

      現在のフィールドに対して dictionary_encoding_columns を無効にします。

      auto

      自動。このパラメーターを auto に設定すると、Hologres は列の値の繰り返し率に基づいて dictionary_encoding_columns を有効にするかどうかを自動的に判断します。繰り返し率が高いほど、ディクショナリエンコーディングの利点が大きくなります。Hologres V0.8 以前では、すべての text 列に対して dictionary_encoding_columns がデフォルトで有効になっていました。Hologres V0.9 以降では、Hologres はデータの特徴に基づいてディクショナリエンコーディングを作成するかどうかを自動的に判断します。

      • 列 a のディクショナリを明示的に作成し、列 b のディクショナリを作成するかどうかを自動的に判断し、列 c または d のディクショナリは作成しません。

        CREATE TABLE dwd.holo_test (
         a text NOT NULL,
         b text NOT NULL,
         c text NOT NULL,
         d text
        );
        CALL UPDATE_TABLE_PROPERTY('dwd.holo_test','dictionary_encoding_columns','a:on,b:auto');
      • 列 a のディクショナリを明示的に無効にします。システムは、列 b、c、d にディクショナリインデックスを自動的に追加します。

        CREATE TABLE dwd.holo_test (
         a text NOT NULL,
         b text NOT NULL,
         c text NOT NULL,
         d text
        );
        CALL SET_TABLE_PROPERTY('dwd.holo_test','dictionary_encoding_columns','a:off');
  • bitmap_columns プロパティの変更

    Hologres V0.9 以降、次の文を実行して bitmap_columns プロパティを変更できます。このプロパティを変更するためにテーブルを再作成する必要はなくなりました。

    • 構文

      -- bitmap_columns の変更 (V2.1 から利用可能)
      ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (bitmap_columns = '[columnName{:[on|off]}[,...]]');
      
      -- bitmap_columns の変更 (すべてのバージョン)
      --完全な変更
      CALL SET_TABLE_PROPERTY('[<schema_name>.]<table_name>', 'bitmap_columns', '[columnName{:[on|off]}[,...]]');
      
      --増分変更。呼び出しで指定されたフィールドのみが変更されます。他のフィールドは変更されません。
      CALL UPDATE_TABLE_PROPERTY('[<schema_name>.]<table_name>', 'bitmap_columns', '[columnName{:[on|off]}[,...]]');
      重要

      Hologres V2.0 以降、`UPDATE_TABLE_PROPERTY` 構文が最適化されました。次の文を実行しても、テーブルの bitmap_columns プロパティは変更されません。Hologres V2.0 より前のバージョンでは、テーブルの bitmap_columns プロパティはクリアされます。

      CALL UPDATE_TABLE_PROPERTY('<table_name>','bitmap_columns','');
    • パラメーターの説明

      パラメーター

      説明

      table_name

      テーブル名では大文字と小文字が区別され、スキーマ情報を含めることができます。

      on

      現在のフィールドに対して bitmap_columns を有効にします。

      off

      現在のフィールドに対して bitmap_columns を無効にします。

      • 列 a のビットマップインデックスを有効にし、列 b、c、d では無効にします。

        CREATE TABLE dwd.holo_test (
         a text NOT NULL,
         b text NOT NULL,
         c text NOT NULL,
         d text
        );
        CALL UPDATE_TABLE_PROPERTY('dwd.holo_test','bitmap_columns','a:on');
      • 列 b のビットマップインデックスを無効にします。システムは、列 a、c、d にビットマップインデックスを自動的に作成します。

        CREATE TABLE dwd.holo_test_1 (
         a text NOT NULL,
         b text NOT NULL,
         c text NOT NULL,
         d text
        );
        CALL SET_TABLE_PROPERTY('dwd.holo_test_1','bitmap_columns','b:off');
  • テーブルデータの TTL の変更

    • 構文

      call set_table_property('[<schema_name>.]<table_name>', 'time_to_live_in_seconds', '<non_negative_literal>');
    • パラメーターの説明

      パラメーター

      説明

      time_to_live_in_seconds

      TTL と略されます。テーブルデータの存続時間 (秒単位)。値は正の整数である必要があります。

      説明

      TTL は、データが Hologres に書き込まれた時点から開始されます。指定された期間が経過すると、データは削除されます。削除は秒単位で正確ではありません。

    • call set_table_property('dwd.holo_test', 'time_to_live_in_seconds', '600');

テーブルのスキーマの変更

Hologres V1.3 以降、テーブルのスキーマを変更できます。たとえば、テーブルを再作成してデータをインポートすることなく、テーブルを schema1 から schema2 に移動できます。これにより、テーブルパスを迅速に切り替えることができます。

  • 構文

    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name>
        SET SCHEMA <new_schema>;

    schema_name は、テーブルが存在するスキーマの名前です。table_name は、変更するテーブルの名前です。new_schema は、テーブルが移動する新しいスキーマの名前です。

  • テーブル tb1public スキーマから testschema スキーマに移動します。

    ALTER TABLE IF EXISTS public.tbl
        SET SCHEMA testschema;

HoloWeb ビジュアルエディターを使用したテーブルの変更

HoloWeb は、テーブル用のビジュアルエディターを提供します。SQL コマンドを記述することなく、テーブルフィールドと一部のテーブルプロパティを変更できます。手順は次のとおりです。

  1. HoloWeb ページに移動します。詳細については、「HoloWeb に接続してクエリを実行する」をご参照ください。

  2. HoloWeb ページの上部のメニューバーで、Metadata Management をクリックします。

  3. Metadata Management ページの左側にある ログイン中のインスタンス リストで、変更するターゲットテーブルをダブルクリックします。

  4. テーブルの詳細ページで、テーブルフィールドと一部のテーブルプロパティを視覚的に変更できます。

    te111

  5. 右上隅にある Submit をクリックして、変更を完了します。