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

Hologres:ALTER TABLE

最終更新日:Aug 21, 2026

ALTER TABLE 文はテーブルの定義を変更します。親テーブルへの変更は、その子テーブルに自動的に適用されます。

制限事項

Hologres では、以下のテーブル変更がサポートされています:

  • ALTER TABLE ADD COLUMN を使用して列を追加する場合、列の総数が 6,400 を超えることはできません。

  • テーブル名の変更、列の追加、Time to Live (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>;
  • 例

    -- テーブルを作成します。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 文を使用して、テーブルの名前を変更できます。テーブルが存在しない場合や、新しい名前が既に使用されている場合、操作は失敗します。

説明

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

  • 構文

    -- 内部テーブルの名前を変更します。
    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 文を使用して、テーブルに列を追加できます。新しい列は常にテーブルの末尾に追加されます。

  • 構文

    -- 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 より前のバージョンを実行している場合は、「一般的なアップグレード準備エラーのトラブルシューティング」をご参照いただくか、サポートにお問い合わせください。詳細については、「オンラインサポートの利用方法」をご参照ください。

    • パーティションテーブルの場合、親テーブルからのみ列を削除できます。この操作は、すべての子テーブルから対応する列を自動的に削除します。この操作はリソースを大量に消費するため、オフピーク時に実行する必要があります。

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

    • プライマリキー、分散キー、クラスタリングキーとして設定されている列、または event_time_column プロパティで指定されている列は削除できません。

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

    • 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 行)

列名の変更

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

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

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

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

  • テーブル所有者のみが列名を変更できます。データベースで簡易権限モデル (SPM) を使用している場合、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

デフォルト値の変更

ALTER TABLE 文を使用して、列のデフォルト値を変更できます。デフォルト値は定数または定数式にすることができます。この変更は、後続の INSERT および UPDATE 操作にのみ影響し、既存のデータは変更されません。この機能は、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;
  • 例

    -- テーブルを作成し、デフォルト値なしで初期行を挿入します。
    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;
    -- 次の結果が返されます:
    -- NULL, 'Alice'   (SET DEFAULT の前に挿入されたため、デフォルト値は適用されません。)
    --      0, 'Bob'      (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] プロパティを変更します。辞書エンコーディング設定を変更すると、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 プロパティは保持されます。以前のバージョンでは、同じ操作で dictionary_encoding_columns プロパティがクリアされます。

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

      パラメーター

      説明

      table_name

      対象テーブルの名前。名前は大文字と小文字が区別され、スキーマ修飾が可能です。

      on

      指定された列に対して [dictionary_encoding_columns] プロパティを有効にします。

      off

      指定された列に対して [dictionary_encoding_columns] プロパティを無効にします。

      auto

      Hologres は、列の値の繰り返し率に基づいて [dictionary_encoding_columns] を適用するかどうかを自動的に決定します。繰り返し率が高いほど、辞書エンコーディングのメリットが大きくなります。Hologres V0.8 以前では、[dictionary_encoding_columns] プロパティはすべての text 列に対してデフォルトで有効になっていました。Hologres 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 以降では、UPDATE_TABLE_PROPERTY 文を空の値で実行すると、bitmap_columns プロパティは保持されます。以前のバージョンでは、この操作で bitmap_columns プロパティがクリアされます。

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

      パラメーター

      説明

      table_name

      対象テーブルの名前。名前は大文字と小文字が区別され、スキーマ修飾が可能です。

      on

      指定された列に対して [bitmap_columns] プロパティを有効にします。

      off

      指定された列に対して [bitmap_columns] プロパティを無効にします。

    • 例

      • 増分変更のために UPDATE_TABLE_PROPERTY を使用します:列 a のビットマップインデックスのみを無効にし、列 b、c、d は変更しません。デフォルトでは、新しいテーブルのすべての列でビットマップインデックスが自動的に有効になります。

        -- テーブルを作成します。
        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 のビットマップインデックスのみを有効にします。リストにない列 a、c、d のビットマップインデックスは削除されます。

        -- テーブルを作成します。
        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

      テーブルデータの Time to Live (TTL) (秒単位)。値は 86,400 (1 日) 以上の整数である必要があります。

      説明

      期限切れデータの削除は自動的に行われますが、遅延する場合があります。

    • 例

      -- テーブルを作成します。
      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 でのテーブル変更

SQL を記述せずに、HoloWeb ビジュアルエディターを使用してテーブルの列とプロパティを変更することもできます。そのためには、次の手順に従ってください:

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

  2. [HoloWeb] ページのトップメニューバーで、メタデータ管理 をクリックします。

  3. メタデータ管理 ページで、左側の [接続済みインスタンス] リストからインスタンスを見つけ、対象のテーブルをダブルクリックします。

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

    [Columns] タブでは、すべての列情報を表示できます。列を追加するには、下部にある [Add Column] をクリックし、表示される新しい行に名前とデータ型を入力します。

  5. 右上隅のコミットをクリックして、変更を適用します。