日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

ALTER TABLE

ALTER TABLE語句用于修改表,其中對分區(qū)父表的修改會自動應用到分區(qū)子表中。本文為您介紹ALTER TABLE的用法。

使用限制

Hologres當前對修改表的支持情況如下:

  • 目前支持對表進行重命名、增加列和修改表數(shù)據(jù)生存時間的操作。

  • 支持修改字段的默認值、dictionary_encoding_columns和bitmap_columns屬性。

  • 目前不支持修改數(shù)據(jù)類型。

注意事項

進行修改dictionary_encoding_columns、bitmap_columns、time_to_live_in_seconds等表屬性操作時,可能會觸發(fā)后臺異步執(zhí)行Compaction,占用一定的CPU資源,同時實例的存儲量可能會出現(xiàn)先上升后回落的情況。

修改數(shù)據(jù)類型

Hologres V3.0版本起,支持修改內(nèi)表列的數(shù)據(jù)類型。

  • 使用限制

    • 支持修改非分區(qū)表、分區(qū)父表的列類型,不支持修改分區(qū)子表的列類型。

    • 不支持修改分區(qū)父表的分區(qū)列類型。

    • 不支持COLLATE語法和USING語法。

    • 僅支持如下數(shù)據(jù)類型的轉(zhuǎn)換:

      源數(shù)據(jù)類型

      目標類型

      備注

      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 t ALTER COLUMN a TYPE text;

重命名

ALTER TABLE語句可以對表進行重命名,如果目標表不存在,或者重命名目標表為已存在的表名稱,系統(tǒng)均會返回異常。

說明

目前不支持跨Schema對表進行重命名操作。

  • 使用語法

    --內(nèi)部表重命名
    ALTER TABLE [schema_name.]<table_name> RENAME TO <new_table_name>;
    
    --外部表重命名
    ALTER FOREIGN TABLE [schema_name.]<foreign_table_name> RENAME TO <new_foreign_table_name>;
  • 使用示例

    --將表holo_test重命名為holo_test_1
    ALTER TABLE public.holo_test RENAME TO holo_test_1 ;
    
    --將外部表foreign_holo_test重命名為foreign_holo_test_1
    ALTER FOREIGN TABLE 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;

刪除列(Beta)

Hologres從V2.0版本開始,支持刪除列,具體語法如下。

  • 使用限制

    • 僅適用于Hologres V2.0及以上版本,如果您的實例是V2.0以下版本,請您使用自助升級或加入Hologres釘釘交流群反饋,詳情請參見如何獲取更多的在線支持?

    • 若您的表是分區(qū)表,僅能刪除分區(qū)父表的列,無法直接刪除分區(qū)子表的列。對于分區(qū)子表,在父表的列刪除后自動刪除。此操作開銷較高,建議在業(yè)務低峰期執(zhí)行。

    • 僅只有表Owner才能刪除列,若您的數(shù)據(jù)庫使用的是簡單權限模型,需要設置為developer用戶組權限。

    • 設置了Primary Key、Distribution Key、Clustering Key、Event_time_column屬性的列無法刪除。

    • 不支持刪除外部表的列。

    • 刪除JSONB相關列后,相關JSONB索引會一并刪除。

    • 刪除proxima_vector列時,需要指定cascade參數(shù)。

    • 刪除Serial列時,如果Sequence是基于這一列創(chuàng)建的,則Sequence會一并被刪除。

    • 如果表創(chuàng)建了物化視圖,不支持刪除源表,也不支持刪除源表中被物化視圖引用的列。

  • 使用語法

    重要

    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;--Beta階段,需要通過GUC參數(shù)打開這個功能
    ALTER TABLE IF EXISTS tbl DROP COLUMN name;

    查詢表:

    SELECT*FROMtbl;
    
    --返回結(jié)果
    id    age    class    reg_timestamp
    ----+-----+---------+--------------
                        

重命名列

Hologres從V1.1版本開始,支持重命名列,具體語法如下。

說明
  • 如果您的實例是V1.1以下版本,請您使用自助升級或加入Hologres釘釘交流群反饋,詳情請參見如何獲取更多的在線支持?

  • 若您的表是分區(qū)表,由于存在分區(qū)子表和父表數(shù)據(jù)結(jié)構一致性的要求,僅支持重命名分區(qū)父表的列,不支持單獨重命名某個分區(qū)子表的列。重命名分區(qū)父表的列,所有子表自動生效。

  • 不支持同時重命名多個表的列名稱。

  • 僅只有表Owner才能重命名列,若您的數(shù)據(jù)庫使用的是簡單權限模型,需要設置為developer用戶組權限。

  • 使用語法

    ALTER TABLE [schema_name.]<table_name> RENAME COLUMN <old_column_name> TO <new_column_name>;
  • 使用示例

    --將表holo_test的id列重命名為name
    ALTER TABLE public.holo_test RENAME COLUMN id TO name; 

修改默認值

ALTER TABLE語句支持修改默認值設置(常量或常量表達式),該默認值僅對設置之后新寫入/更新數(shù)據(jù)有效,不會更新表中已有數(shù)據(jù)的默認值。當前僅Hologres V0.9.23及以上版本支持修改默認值。具體修改方式說明如下:

  • 使用語法

    --修改表字段的默認值
    ALTER TABLE [schema_name.]<table_name> ALTER COLUMN <column> SET DEFAULT <expression>;
    
    --刪除表字段的默認值
    ALTER TABLE [schema_name.]<table_name> ALTER COLUMN <column> DROP DEFAULT;
  • 使用示例

    --修改表holo_test中id列的默認值為0
    ALTER TABLE holo_test ALTER COLUMN id SET DEFAULT 0;
    
    --刪除表holo_test中id列的默認值
    ALTER TABLE holo_test ALTER COLUMN id DROP DEFAULT;

修改表屬性

Hologres支持通過執(zhí)行語句修改參數(shù),達到修改表屬性的目的。具體修改方式說明如下:

  • 修改dictionary_encoding_columns字典編碼列。修改Dictionary Encoding設置,會引起數(shù)據(jù)文件重新編碼存儲,會在一段時間內(nèi)消耗一部分CPU和內(nèi)存資源,建議在業(yè)務低峰期執(zhí)行變更。

    • 使用語法

      -- 修改dictionary_encoding_columns(2.1版本起)
      ALTER TABLE <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里面的指定字段,其余字段不變
      CALL UPDATE_TABLE_PROPERTY('[schema_name.]<table_name>', 'dictionary_encoding_columns', '[columnName{:[on|off|auto]}[,...]]');
      重要

      Hologres V2.0版本起,針對UPDATE_TABLE_PROPERTY語法進行了優(yōu)化,運行如下語句時,表的dictionary_encoding_columns屬性保持不變。Hologres V2.0以前版本則是會清空表的dictionary_encoding_columns屬性。

      CALL UPDATE_TABLE_PROPERTY('<table_name>','dictionary_encoding_columns','');
    • 參數(shù)說明

      參數(shù)

      說明

      table_name

      需要和待修改的表名大小寫保持一致,可以攜帶Schema信息。

      on

      表示當前字段打開dictionary_encoding_columns

      off

      表示當前字段關閉dictionary_encoding_columns

      auto

      表示自動。如果是設置了auto,Hologres會根據(jù)所在列數(shù)值的重復程度自動選擇是否進行dictionary_encoding_columns,值的重復度越高,字典編碼的收益越大。在Hologres V0.8版本及更早版本中默認所有text列都會被設置為dictionary_encoding_columns,在Hologres V0.9版本及之后版本,會根據(jù)數(shù)據(jù)特征自動選擇是否創(chuàng)建字典編碼。

    • 使用示例

      • 對a列顯示創(chuàng)建dictionary,b列自動選擇是否創(chuàng)建dictionary,c、d兩列不創(chuàng)建dictionary。

        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列顯式關閉dictionary,系統(tǒng)也會自動給b、c、d字段加上dictionary索引。

        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版本開始支持通過執(zhí)行以下語句修改bitmap_columns,無需再重新建表即可修改表屬性。

    • 使用語法

      -- 修改bitmap_columns(2.1版本起)
      ALTER TABLE <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里面的指定字段,其余字段不變
      CALL UPDATE_TABLE_PROPERTY('[schema_name.]<table_name>', 'bitmap_columns', '[columnName{:[on|off]}[,...]]');
      重要

      Hologres V2.0版本起,針對UPDATE_TABLE_PROPERTY語法進行了優(yōu)化,運行如下語句時,表的bitmap_columns屬性保持不變。Hologres V2.0以前版本則是會清空表的bitmap_columns屬性。

      CALL UPDATE_TABLE_PROPERTY('<table_name>','bitmap_columns','');
    • 參數(shù)說明

      參數(shù)

      說明

      table_name

      需要和待修改的表名大小寫保持一致,可以攜帶Schema信息。

      on

      當前字段打開bitmap_columns

      off

      當前字段關閉bitmap_columns

    • 使用示例

      • 對a列啟動bitmap索引,對b、c、d不啟動bitmap索引。

        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關閉bitmap索引,系統(tǒng)會自動給a、c、d創(chuàng)建bitmap索引。

        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');
  • 修改表數(shù)據(jù)的生存時間

    • 使用語法

      call set_table_property('[schema_name.]<table_name>', 'time_to_live_in_seconds', '<non_negative_literal>');
    • 參數(shù)說明

      參數(shù)

      說明

      time_to_live_in_seconds

      簡稱TTL,表數(shù)據(jù)的生存時間,單位為秒,必須是正整數(shù)。

      說明

      表數(shù)據(jù)生存時間是按照數(shù)據(jù)寫入Hologres開始,超過該指定時間,表數(shù)據(jù)將會在某個時間內(nèi)被刪除,但并不是精準的時間。

    • 使用示例

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

修改表所在Schema

Hologres從 V1.3版本開始,支持修改表所在的Schema,例如將表從schema1移動至schema2,無須重新建表導數(shù)據(jù),實現(xiàn)快速表路徑切換。

  • 使用語法

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

    schema為表所在的Schema名稱;table_name為修改表的名稱;new_schema為移動至新Schema的名稱。

  • 使用示例

    將表名稱為tb1的表從publicSchema移動至testschemaSchema下。

    ALTER TABLE IF EXISTS public.tbl
        SET SCHEMA testschema;

HoloWeb可視化修改表

HoloWeb提供可視化編輯表功能,無需寫SQL命令就能修改表字段和部分表屬性,步驟如下。

  1. 進入HoloWeb頁面,詳情請參見連接HoloWeb并執(zhí)行查詢

  2. HoloWeb頁面頂部菜單欄,單擊元數(shù)據(jù)管理

  3. 元數(shù)據(jù)管理頁面左側(cè)的已登錄實例列表,雙擊要修改的目標表。

  4. 在表的詳情頁面,可視化修改表的字段和部分表屬性。

    44345

  5. 單擊右上角的提交,完成表修改。