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

Hologres:ALTER TABLE

最終更新日:Jun 04, 2026

ALTER TABLE ステートメントは、テーブル構造、列、プロパティを変更します。親テーブルへの変更は、自動的に子テーブルに伝播されます。

制限事項

サポートされている変更:

  • Hologres は、1 つのテーブルあたり最大 6,400 列をサポートしています。ALTER TABLE ADD COLUMN を使用して列を追加する場合、列の総数はこの制限を超えることはできません。

  • テーブルの名前変更、列の追加、TTL の変更。

  • 列のデフォルト値、および dictionary_encoding_columnsbitmap_columns プロパティの変更。

注意事項

dictionary_encoding_columnsbitmap_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>;
  • -- テーブルを作成します。class 列の初期データ型は varchar(10) です。
    BEGIN;
    CREATE TABLE tbl (
      "id" bigint NOT NULL,
      "name" text NOT NULL,
      "age" bigint,
      "class" varchar(10) 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');
    COMMIT;
    
    -- サンプルデータを挿入します。
    INSERT INTO tbl VALUES (1, 'Alice', 18, 'class1', '2024-01-01 10:00:00');
    INSERT INTO tbl VALUES (2, 'Bob', 20, 'class2', '2024-01-02 11:00:00');
    
    -- 変更前の class 列のデータ型を確認します。
    SELECT column_name, data_type, character_maximum_length
    FROM information_schema.columns
    WHERE table_schema = 'public' AND table_name = 'tbl' AND column_name = 'class';
    -- 次の結果が返されます:
    -- class | character varying | 10
    
    -- class 列のデータ型を text に変更します。
    ALTER TABLE tbl ALTER COLUMN class TYPE text;
    
    -- 変更後の class 列のデータ型を確認します。
    SELECT column_name, data_type, character_maximum_length
    FROM information_schema.columns
    WHERE table_schema = 'public' AND table_name = 'tbl' AND column_name = 'class';
    -- 次の結果が返されます:
    -- class | text | NULL

テーブルの名前変更

テーブルの名前を変更します。テーブルが存在しない場合、または新しい名前が既に使用されている場合、操作は失敗します。

説明

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

  • 構文

    -- 内部テーブルの名前を変更します。
    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>;
  • -- テーブルを作成し、サンプルデータを挿入します。
    CREATE TABLE public.holo_test (id bigint, name text);
    INSERT INTO public.holo_test VALUES (1, 'Alice'), (2, 'Bob');
    
    -- 名前変更前のテーブル名を確認します。
    SELECT table_name FROM information_schema.tables
    WHERE table_schema='public' AND table_name IN ('holo_test', 'holo_test_1');
    -- 次の結果が返されます:
    -- holo_test
    
    -- holo_test テーブルの名前を holo_test_1 に変更します。
    ALTER TABLE IF EXISTS public.holo_test RENAME TO holo_test_1;
    
    -- 名前変更後のテーブル名を確認します。
    SELECT table_name FROM information_schema.tables
    WHERE table_schema='public' AND table_name IN ('holo_test', 'holo_test_1');
    -- 次の結果が返されます:
    -- holo_test_1
    
    -- データが保持されていることを確認します。
    SELECT * FROM public.holo_test_1 ORDER BY id;
    -- 次の結果が返されます:
    -- 1, Alice
    -- 2, Bob
    
    -- 外部テーブル foreign_holo_test の名前を foreign_holo_test_1 に変更します。
    ALTER FOREIGN TABLE IF EXISTS public.foreign_holo_test RENAME TO foreign_holo_test_1;

列の追加

テーブルに列を追加します。新しい列は、既存の列の末尾に追加されます。

  • 構文

    -- 単一の列を追加します。
    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>; 
  • -- テーブルを作成し、サンプルデータを挿入します。
    CREATE TABLE public.holo_test (name text);
    INSERT INTO public.holo_test VALUES ('Alice'), ('Bob');
    
    -- 列を追加する前のスキーマを確認します。
    SELECT column_name, data_type FROM information_schema.columns
    WHERE table_schema='public' AND table_name='holo_test' ORDER BY ordinal_position;
    -- 次の結果が返されます:
    -- name | text
    
    -- holo_test テーブルに id 列を追加します。
    ALTER TABLE IF EXISTS public.holo_test ADD COLUMN id int;
    
    -- id 列を追加した後のスキーマを確認します。
    SELECT column_name, data_type FROM information_schema.columns
    WHERE table_schema='public' AND table_name='holo_test' ORDER BY ordinal_position;
    -- 次の結果が返されます:
    -- name | text
    -- id   | integer
    
    -- 複数の列を一度に追加します。
    ALTER TABLE IF EXISTS public.holo_test ADD COLUMN age int, ADD COLUMN city text;
    
    -- 複数の列を追加した後のスキーマを確認します。
    SELECT column_name, data_type FROM information_schema.columns
    WHERE table_schema='public' AND table_name='holo_test' ORDER BY ordinal_position;
    -- 次の結果が返されます:
    -- name | text
    -- id   | integer
    -- age  | integer
    -- city | text

列の削除 (ベータ版)

Hologres V2.0 以降では、テーブルから列を削除できます。

  • 制限事項

    • この機能は、Hologres V2.0 以降でのみ使用できます。インスタンスが V2.0 より前のバージョンの場合は、アップグレード準備の一般的なエラーのトラブルシューティング」をご参照いただくか、サポートにお問い合わせください。詳細については、「オンラインサポートを受けるには」をご参照ください。

    • パーティションテーブルの場合、親テーブルからのみ列を削除してください。変更はすべての子テーブルに自動的に伝播されます。この操作はリソースを大量に消費します。オフピーク時に実行してください。

    • 列を削除できるのは、テーブル所有者のみです。データベースで簡易権限モデルを使用している場合は、developer ユーザーグループのメンバーである必要があります。

    • プライマリキー、分散キー、クラスタリングキー、または 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;
    
    -- サンプルデータを挿入します。
    INSERT INTO tbl VALUES (1, 'Alice', 18, 'class1', '2024-01-01 10:00:00');
    INSERT INTO tbl VALUES (2, 'Bob', 20, 'class2', '2024-01-02 11:00:00');
    
    -- 指定した列を削除します。
    set hg_experimental_enable_drop_column = on;-- この機能はベータ版です。GUC パラメータを使用して有効にする必要があります。
    ALTER TABLE IF EXISTS tbl DROP COLUMN name;

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

    SELECT * FROM tbl;
    
    -- 次の結果が返されます:
     id | age | class  |      reg_timestamp
    ----+-----+--------+------------------------
      1 |  18 | class1 | 2024-01-01 10:00:00+08
      2 |  20 | class2 | 2024-01-02 11:00:00+08
    (2 rows)

列の名前変更

Hologres V1.1 以降では、列の名前を変更できます。

説明
  • インスタンスが V1.1 より前のバージョンの場合は、アップグレード準備の一般的なエラーのトラブルシューティング」をご参照いただくか、サポートにお問い合わせください。詳細については、「オンラインサポートを受けるには」をご参照ください。

  • パーティションテーブルの場合、親テーブルでのみ列の名前を変更してください。変更はすべての子テーブルに自動的に伝播されます。

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

  • 列の名前を変更できるのは、テーブル所有者のみです。データベースで簡易権限モデルを使用している場合は、developer ユーザーグループのメンバーである必要があります。

  • 構文

    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> RENAME COLUMN <old_column_name> TO <new_column_name>;
  • -- テーブルを作成し、サンプルデータを挿入します。
    CREATE TABLE public.holo_rename_col (id bigint, age int);
    INSERT INTO public.holo_rename_col VALUES (1, 18), (2, 20);
    
    -- 名前変更前の列名を確認します。
    SELECT column_name FROM information_schema.columns
    WHERE table_schema='public' AND table_name='holo_rename_col' ORDER BY ordinal_position;
    -- 次の結果が返されます:
    -- id
    -- age
    
    -- holo_rename_col テーブルの age 列の名前を user_age に変更します。
    ALTER TABLE IF EXISTS public.holo_rename_col RENAME COLUMN age TO user_age;
    
    -- 名前変更後の列名を確認します。
    SELECT column_name FROM information_schema.columns
    WHERE table_schema='public' AND table_name='holo_rename_col' ORDER BY ordinal_position;
    -- 次の結果が返されます:
    -- id
    -- user_age
    
    -- データが保持されていることを確認します。
    SELECT * FROM public.holo_rename_col ORDER BY id;
    -- 次の結果が返されます:
    -- 1, 18
    -- 2, 20

デフォルト値の変更

列のデフォルト値を定数または定数式に変更します。これは以降の書き込みにのみ影響し、既存のデータは変更されません。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;
  • -- テーブルを作成し、id 列にデフォルト値を設定せずに最初の行を挿入します。
    CREATE TABLE public.holo_default (id int, name text);
    INSERT INTO public.holo_default (name) VALUES ('Alice');
    
    -- 初期のデフォルト値を確認します。
    SELECT column_name, column_default FROM information_schema.columns
    WHERE table_schema='public' AND table_name='holo_default' ORDER BY ordinal_position;
    -- 次の結果が返されます:
    -- id,   NULL
    -- name, NULL
    
    -- id 列のデフォルト値を 0 に変更します。
    ALTER TABLE IF EXISTS public.holo_default ALTER COLUMN id SET DEFAULT 0;
    
    -- 変更後のデフォルト値を確認します。
    SELECT column_name, column_default FROM information_schema.columns
    WHERE table_schema='public' AND table_name='holo_default' ORDER BY ordinal_position;
    -- 次の結果が返されます:
    -- id,   0
    -- name, NULL
    
    -- デフォルト値が新しいデータにのみ適用されることを確認するために、新しい行を挿入します。
    INSERT INTO public.holo_default (name) VALUES ('Bob');
    SELECT * FROM public.holo_default ORDER BY name;
    -- 次の結果が返されます:
    -- Alice, NULL   (SET DEFAULT の前に挿入されたため、デフォルト値は適用されません。)
    -- Bob,   0      (SET DEFAULT の後に挿入されたため、デフォルト値 0 が自動的に適用されます。)
    
    -- id 列のデフォルト値を削除します。
    ALTER TABLE IF EXISTS public.holo_default ALTER COLUMN id DROP DEFAULT;
    
    -- デフォルト値が削除された後の値を確認します。
    SELECT column_name, column_default FROM information_schema.columns
    WHERE table_schema='public' AND table_name='holo_default' ORDER BY ordinal_position;
    -- 次の結果が返されます:
    -- id,   NULL
    -- name, NULL

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

  • [dictionary_encoding_columns] プロパティの変更。これによりデータファイルが再エンコードされ、リソースを大量に消費します。オフピーク時に実行してください。

    • 構文

      -- 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 以降では、このステートメントを空の値で実行すると、dictionary_encoding_columns プロパティは保持されます。以前のバージョンでは、dictionary_encoding_columns プロパティがクリアされます。

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

      パラメータ

      説明

      table_name

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

      on

      現在の列の [辞書エンコーディング] を有効にします。

      off

      現在の列の [辞書エンコーディング] を無効にします。

      auto

      Hologres は、列の値の重複率に基づいて、[dictionary_encoding_columns] を適用するかどうかを自動的に決定します。重複率が高いほど、より大きなメリットが得られます。V0.8 以前では、すべての text 列で [dictionary_encoding_columns] がデフォルトで有効でした。V0.9 以降では、これはデータの特性に基づいて自動的に決定されます。

      • UPDATE_TABLE_PROPERTY を使用した増分変更: 列 a の辞書エンコーディングを明示的に有効にし、列 b を auto に設定し、他の列は変更しません。

        -- テーブルを作成します。
        CREATE TABLE public.holo_dict_test (
         a text NOT NULL,
         b text NOT NULL,
         c text NOT NULL,
         d text
        );
        
        -- 変更前の dictionary_encoding_columns プロパティを確認します。
        SELECT property_value FROM hologres.hg_table_properties
        WHERE table_name='holo_dict_test' AND property_key='dictionary_encoding_columns';
        -- 次の結果が返されます: a:auto,b:auto,c:auto,d:auto (デフォルトでは、新しいテーブルのすべての text 列に 'auto' が設定されます。)
        
        -- 増分変更を実行します: 列 a を明示的に有効にし、列 b を auto に設定します。
        CALL UPDATE_TABLE_PROPERTY('public.holo_dict_test','dictionary_encoding_columns','a:on,b:auto');
        
        -- 変更後の dictionary_encoding_columns プロパティを確認します。
        SELECT property_value FROM hologres.hg_table_properties
        WHERE table_name='holo_dict_test' AND property_key='dictionary_encoding_columns';
        -- 次の結果が返されます: b:auto,c:auto,d:auto,a (指定された通り、a と b のみが変更されます。c と d は変更されません。':on' サフィックスはデフォルト値であるため省略されます。明示的に変更された列はリストの最後に移動されます。)
      • SET_TABLE_PROPERTY を使用した完全上書き: 列 a の辞書エンコーディングを明示的に無効にします。リストに含まれていない列の辞書設定はリセットされます。

        -- テーブルを作成します。
        CREATE TABLE public.holo_dict_test_2 (
         a text NOT NULL,
         b text NOT NULL,
         c text NOT NULL,
         d text
        );
        
        -- 変更前の dictionary_encoding_columns プロパティを確認します。
        SELECT property_value FROM hologres.hg_table_properties
        WHERE table_name='holo_dict_test_2' AND property_key='dictionary_encoding_columns';
        -- 次の結果が返されます: a:auto,b:auto,c:auto,d:auto
        
        -- 完全変更を実行します: 列 a の辞書エンコーディングを無効にします。他の列はリストに含まれていません。
        CALL SET_TABLE_PROPERTY('public.holo_dict_test_2','dictionary_encoding_columns','a:off');
        
        -- 変更後の dictionary_encoding_columns プロパティを確認します。
        SELECT property_value FROM hologres.hg_table_properties
        WHERE table_name='holo_dict_test_2' AND property_key='dictionary_encoding_columns';
        -- 次の結果が返されます: b:auto,c:auto,d:auto ('a:off' の設定により、列 a はリストから削除されます。リストに含まれていない列 b、c、d は 'auto' にリセットされます。)
  • [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 以降では、このステートメントを空の値で実行すると、bitmap_columns プロパティが保持されます。以前のバージョンでは、これにより bitmap_columns プロパティがクリアされます。

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

      パラメータ

      説明

      table_name

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

      on

      現在の列の [ビットマップインデックス] を有効にします。

      off

      現在の列の [ビットマップインデックス] を無効にします。

      • UPDATE_TABLE_PROPERTY を使用した増分変更: 列 a のビットマップインデックスを無効にし、他の列は変更しません。

        -- テーブルを作成します。
        CREATE TABLE public.holo_bitmap_test (
         a text NOT NULL,
         b text NOT NULL,
         c text NOT NULL,
         d text
        );
        
        -- 変更前の bitmap_columns プロパティを確認します。
        SELECT property_value FROM hologres.hg_table_properties
        WHERE table_name='holo_bitmap_test' AND property_key='bitmap_columns';
        -- 次の結果が返されます: a,b,c,d (デフォルトでは、新しいテーブルのすべての列で有効になっています。':on' サフィックスはデフォルトであるため省略されます。)
        
        -- 増分変更を実行します: 列 a のビットマップインデックスのみを無効にします。
        CALL UPDATE_TABLE_PROPERTY('public.holo_bitmap_test','bitmap_columns','a:off');
        
        -- 変更後の bitmap_columns プロパティを確認します。
        SELECT property_value FROM hologres.hg_table_properties
        WHERE table_name='holo_bitmap_test' AND property_key='bitmap_columns';
        -- 次の結果が返されます: b,c,d (列 a は無効化され、リストから削除されます。列 b、c、d はデフォルトで有効なままです。':on' サフィックスはデフォルトであるため省略されます。)
      • SET_TABLE_PROPERTY を使用した完全上書き: 列 b のビットマップインデックスのみを有効にします。リストに含まれていない列の設定はクリアされます。

        -- テーブルを作成します。
        CREATE TABLE public.holo_bitmap_test_2 (
         a text NOT NULL,
         b text NOT NULL,
         c text NOT NULL,
         d text
        );
        
        -- 変更前の bitmap_columns プロパティを確認します。
        SELECT property_value FROM hologres.hg_table_properties
        WHERE table_name='holo_bitmap_test_2' AND property_key='bitmap_columns';
        -- 次の結果が返されます: a,b,c,d (デフォルトでは、新しいテーブルのすべての列で有効になっています。':on' サフィックスはデフォルトであるため省略されます。)
        
        -- 完全変更を実行します: 列 b のみを有効にします。他の列はリストに含まれていません。
        CALL SET_TABLE_PROPERTY('public.holo_bitmap_test_2','bitmap_columns','b:on');
        
        -- 変更後の bitmap_columns プロパティを確認します。
        SELECT property_value FROM hologres.hg_table_properties
        WHERE table_name='holo_bitmap_test_2' AND property_key='bitmap_columns';
        -- 次の結果が返されます: b (リストに含まれていない列 a、c、d のビットマップインデックス設定はクリアされます。':on' サフィックスはデフォルトであるため省略されます。)
  • テーブルの Time to Live (TTL) の変更。

    • 構文

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

      パラメータ

      説明

      time_to_live_in_seconds

      テーブルデータの TTL (秒単位)。86400 (1 日) 以上の正の整数である必要があります。

      説明

      TTL のカウントダウンは、データが書き込まれたときに開始されます。期限切れのデータは自動的に削除されますが、必ずしもすぐに削除されるわけではありません。

    • -- テーブルを作成します。
      CREATE TABLE public.holo_ttl_test (
       id bigint,
       name text
      );
      
      -- 変更前の TTL プロパティを確認します。
      SELECT property_value FROM hologres.hg_table_properties
      WHERE table_name='holo_ttl_test' AND property_key='time_to_live_in_seconds';
      -- 次の結果が返されます: 3153600000 (デフォルト値、約 100 年。)
      
      -- TTL を 1 日 (86,400 秒) に変更します。
      CALL SET_TABLE_PROPERTY('public.holo_ttl_test', 'time_to_live_in_seconds', '86400');
      
      -- 変更後の TTL プロパティを確認します。
      SELECT property_value FROM hologres.hg_table_properties
      WHERE table_name='holo_ttl_test' AND property_key='time_to_live_in_seconds';
      -- 次の結果が返されます: 86400 (TTL が 1 日に設定されました。)

テーブルスキーマの変更

Hologres V1.3 以降では、テーブルを再作成したりデータをインポートしたりすることなく、スキーマ間 (例: schema1 から schema2 へ) でテーブルを移動できます。

  • 構文

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

    schema_name: テーブルの現在のスキーマ。table_name: 変更するテーブル。new_schema: 移動先のスキーマ。

  • schema_demo という名前のテーブルを、public スキーマから testschema スキーマに移動します。

    -- ターゲットスキーマを作成します。
    CREATE SCHEMA IF NOT EXISTS testschema;
    
    -- テーブルを作成し、サンプルデータを挿入します。
    CREATE TABLE public.schema_demo (
     id bigint PRIMARY KEY,
     name text
    );
    INSERT INTO public.schema_demo VALUES (1, 'alice'), (2, 'bob');
    
    -- 移動前にテーブルが存在するスキーマを確認します。
    SELECT table_schema, table_name FROM information_schema.tables
    WHERE table_name='schema_demo';
    -- 次の結果が返されます:
    -- public | schema_demo
    
    -- テーブルを public スキーマから testschema スキーマに移動します。
    ALTER TABLE IF EXISTS public.schema_demo SET SCHEMA testschema;
    
    -- 移動後にテーブルが存在するスキーマを確認します。
    SELECT table_schema, table_name FROM information_schema.tables
    WHERE table_name='schema_demo';
    -- 次の結果が返されます:
    -- testschema | schema_demo
    
    -- データが完全に保持されていることを確認します。
    SELECT * FROM testschema.schema_demo ORDER BY id;
    -- 次の結果が返されます:
    -- 1, alice
    -- 2, bob

HoloWeb を使用したテーブルの変更

HoloWeb は、SQL を使用せずにテーブルの列とプロパティを変更するためのビジュアルエディタを提供します。

  1. HoloWeb コンソールに移動します (HoloWeb に接続してクエリを実行する)。

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

  3. Metadata Management ページで、[接続済みインスタンス] リストからインスタンスを見つけ、ターゲットテーブルをダブルクリックします。

  4. テーブル詳細ページで、列とプロパティを変更します。

    te111

  5. 右上隅の Submit をクリックします。