云数据库 GAUSSDB-ALTER TYPE:示例

时间:2024-11-13 14:45:10

示例

  • 对复合类型的修改。
    --创建复合类型。
    gaussdb=# CREATE TYPE typ_stu AS (name varchar(10),age int);
    
    --创建表并插入数据,其中info字段数据类型为typ_stu。
    gaussdb=# CREATE TABLE tbl_test (id int PRIMARY KEY,info typ_stu);
    gaussdb=# INSERT INTO tbl_test VALUES (1,('Jim',16));
    
    --查看tbl_test数据。
    gaussdb=# SELECT * FROM tbl_test;
     id |   info   
    ----+----------
      1 | (Jim,16)
    (1 row)
    
    --为复合类型增加一个新的属性。
    gaussdb=# ALTER TYPE typ_stu ADD ATTRIBUTE year int CASCADE;
    
    --再次查看tbl_test数据,info多了一个属性。
    gaussdb=# SELECT * FROM tbl_test;
     id |   info    
    ----+-----------
      1 | (Jim,16,)
    (1 row)
    
    --从复合类型删除一个属性。
    gaussdb=# ALTER TYPE typ_stu DROP ATTRIBUTE year;
  • 修改类型所有者。
    --创建用户test。
    gaussdb=# CREATE ROLE test PASSWORD '********';
    
    --修改typ_stu的所有者为test。
    gaussdb=# ALTER TYPE typ_stu OWNER TO test;
    
    --查询typ_stu拥有者。
    gaussdb=# SELECT t1.typname, t2.rolname AS owner
    FROM pg_type t1, gs_roles t2 
    WHERE t1.typname = 'typ_stu' AND 
          t1.typowner = t2.oid;
     typname | owner  
    ---------+--------
     typ_stu | test
    (1 row)
  • 修改类型或是一个复合类型中的一个属性的名称。
    --将typ_stu的其中一个属性age重命名为age1。
    gaussdb=# ALTER TYPE typ_stu RENAME ATTRIBUTE age to age1;
    
    --通过如下SQL查询tbl_test表中年龄为16的数据。
    gaussdb=# SELECT id,(info).name,(info).age1 FROM tbl_test WHERE (info).age1 = 16;
     id | name | age1 
    ----+------+------
      1 | Jim  |   16
    (1 row)
  • 将类型移至一个新的模式中。
    --创建模式sctest。
    gaussdb=# CREATE SCHEMA sctest;
    
    --将typ_stu移至模式sc_test中。
    gaussdb=# ALTER TYPE typ_stu SET SCHEMA sctest;
    
    --查询typ_stu的所属模式。
    gaussdb=# \dT sctest.*
              List of data types
     Schema |      Name      | Description 
    --------+----------------+-------------
     sctest | sctest.typ_stu | 
    (1 row)
    
    -- 删除表。
    gaussdb=# DROP TABLE tbl_test;
    gaussdb=# DROP TYPE sctest.typ_stu;
    gaussdb=# DROP ROLE test;
    gaussdb=# DROP SCHEMA sctest;
  • 为枚举类型增加一个新值。
    --创建一个枚举类型typ_bugstatus
    gaussdb=# CREATE TYPE typ_bugstatus AS ENUM ('create', 'modify', 'closed');
    
    --创建表tbl_test1。
    gaussdb=# CREATE TABLE tbl_test1 (id serial, bugstat typ_bugstatus);
    
    --插入数据时bugstat字段必须是枚举类型中的值,否则报错。
    gaussdb=# INSERT INTO tbl_test1 (bugstat) VALUES ('closed');
    gaussdb=# INSERT INTO tbl_test1 (bugstat) VALUES ('deleted');
    ERROR:  invalid input value for enum typ_bugstatus: "deleted"
    LINE 1: INSERT INTO tbl_test1 (bugstat) VALUES ('deleted');
                                                    ^
    CONTEXT:  referenced column: bugstat
    
    --查看tbl_test1数据。
    gaussdb=# SELECT * FROM tbl_test1;
     id | bugstat 
    ----+---------
      1 | closed
    (1 row)
    
    --为枚举类型增加一个标签值。
    gaussdb=# ALTER TYPE typ_bugstatus ADD VALUE IF NOT EXISTS 'regress' BEFORE 'closed';
    --查询。
    gaussdb=# \dT+ typ_bugstatus
                                         List of data types
     Schema |     Name      | Internal name | Size | Elements | Access privileges | Description 
    --------+---------------+---------------+------+----------+-------------------+-------------
     public | typ_bugstatus | typ_bugstatus | 4    | create  +|                   | 
            |               |               |      | modify  +|                   | 
            |               |               |      | regress +|                   | 
            |               |               |      | closed   |                   | 
    (1 row)
  • 重命名枚举类型的一个标签值。
    --将类型typ_bugstatus中closed修改为close。
    gaussdb=# ALTER TYPE typ_bugstatus RENAME VALUE 'closed' TO 'close';
    
    --查看表tbl_test1数据,其中closed的数据也都改成了close。
    gaussdb=# SELECT * FROM tbl_test1;
     id | bugstat 
    ----+---------
      1 | close
    (1 row)
    
    --查询。
    gaussdb=# \dT+ typ_bugstatus;
                                         List of data types
     Schema |     Name      | Internal name | Size | Elements | Access privileges | Description 
    --------+---------------+---------------+------+----------+-------------------+-------------
     public | typ_bugstatus | typ_bugstatus | 4    | create  +|                   | 
            |               |               |      | modify  +|                   | 
            |               |               |      | regress +|                   | 
            |               |               |      | close    |                   | 
    (1 row)
    
    --删除。
    gaussdb=# DROP TABLE tbl_test1;
    gaussdb=# DROP TYPE typ_bugstatus;
support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0518.html