GaussDB A (DWS) sequence 序列使用注意事项(持续更新)

查看库内所有sequence

 SELECT * FROM pg_class c WHERE c.relkind = 'S' and relname ='serial';

Sequence 赋权的使用注意事项:

  1. 关联具体表的sequence,不能将owner 权限赋予其他用户。

案例:

CREATE TABLE test.customer_address

(

    ca_address_sk             integer               not null,

    ca_address_id             char(16)              not null,

    ca_street_number          char(10)                      ,

    ca_street_name            varchar(60)                   ,

    ca_street_type            char(15)                      ,

    ca_suite_number           char(10)                      ,

    ca_city                   varchar(60)                   ,

    ca_county                 varchar(30)                   ,

    ca_state                  char(2)                       ,

    ca_zip                    char(10)                      ,

    ca_country                varchar(20)                   ,

    ca_gmt_offset             decimal(5,2)                  ,

    ca_location_type          char(20)                    

) ;

 

CREATE SEQUENCE test.serial1

 START 101

 CACHE 20

OWNED BY test.customer_address.ca_address_sk;

 alter SEQUENCE test.serial1 OWNER TO cbgdm_w;

2.关联的用户的new_owner 必须是间接或者直接用户

所谓直接用户和间接用户:

grant cbgdm_w to disapp;
这样cbgdm_w就是disapp的直接成员;
grant cbgdm_w to cbgdm_etl
这样cbgdm_w就是cbgdm_etl的直接成员,cbgdm_etl是disapp的间接成员。

即就是要继承祖先角色的权限。不然会报错

3.间接用户、直接用户必须是同一逻辑集群

如果cbgdm_w 与 cbgdm_etl 不在同一个逻辑集群。配置直接用户,间接用户的时候会报错。

4.创建 Sequence 如果带了cache ,新旧用户nextval的时候会有不同

例子:

CREATE SEQUENCE test.serial1

 START 101

 CACHE 20

比如 旧用户 查询时结果是

SELECT nextval('test.serial1');

结果:

101

新用户的查询的结果是

 SELECT nextval('test.serial1');

结果:

121

5.Sequence 转换owner 之后, 旧owner 可以执行,但不能删除

(完)