• postgresql9.1_gaussdb200_解析表结构


    --解析表结构
    SELECT a8.nspname as schema_name,a5.relname as table_name,a5.relnamespace,a8.nspowner,a9.tableowner,a1.attrelid,
    a1.atttypid,a1.attnum,a1.attname attname,
    a6.typname,
    case when a1.attlen<>-1 then a1.attlen else a1.atttypmod end AS col_length,
    a1.attnotnull,
    a1.atthasdef,a2.adsrc as default_value,
    a3.indisprimary,a3.indisunique,a3.indisvalid,
    case when (a3.indisprimary is not null or a3.indisunique is not null) then 1 else 0 end as is_ind,
    case when a3.indisprimary='false' and a3.indisunique='true' then 1 else 0 end as is_unicons_uniind,
    --case when a4.partkey is not null then true else false end as ispartkey,
    a7.contype,
    CASE WHEN a7.contype='p' THEN 1 ELSE 0 END AS ISPK
    from pg_catalog.pg_attribute a1
    left join pg_catalog.pg_attrdef a2 on a2.adrelid=a1.attrelid and a2.adnum=a1.attnum
    left join pg_class a5 on a5.oid=a1.attrelid
    left join pg_catalog.pg_namespace a8 on a5.relnamespace=a8.oid
    left join pg_catalog.pg_index a3 on a3.indrelid=a1.attrelid and a1.attnum=any(a3.indkey)
    --left join pg_catalog.pg_partition a4 on a4.parentid=a1.attrelid and a1.attnum=any(a4.partkey) and a4.parttype='r'
    left join pg_catalog.pg_tables a9 on a9.schemaname=a8.nspname and a9.tablename=a5.relname
    left join pg_type a6 on a6.oid=a1.atttypid
    left join (select contype,conrelid,unnest(conkey) conkey from pg_constraint) a7 on a7.conrelid=a5.oid and a7.conkey=a1.attnum
    where a1.atttypid>0 and a1.attnum>0
    and a8.nspname='zyj'
    and a5.relname='a34';
    ------------------------------------------------
    --创建user 、chema、表
    create user secbak_sub with password 'Sec$123456';

    create schema "zyj";
    create schema "ZYJ";

    create table "zyj".a34(id int primary key,name varchar(6),addr varchar(6));

    --postgresql默认为小写
    create table zyj."A34"(id int,name VARCHAR(6));

    alter table zyj."a34" add column v_number DECIMAL(8,3) not null default '111';

    alter table zyj."a34" add column v_tinyint int;
    alter table zyj."a34" alter column addr set default 'aaa';
    create unique index idxu_tinyint on zyj.a34(v_tinyint);
    --创建唯一键
    alter table zyj."a34" add CONSTRAINT cons_unique unique(v_number);

    create table zyj.a34_references(
    id int,
    name varchar(10),
    constraint fk_a34_references foreign key(id) references zyj.a34(id)
    );

    --不能直接创建分区

    create table zyj."fenqu1"(
    id char(10),
    col1 number(10),
    col2 number(10),
    col3 number(10)
    )
    partition by range(col1)(
    partition p1 values less than(10),
    partition p2 values less than(20),
    partition p3 values less than(30),
    partition P3_AFTER values less than (MAXVALUE)
    );

    ------------------------------------------------
    --查询用户
    select * from pg_user;
    --查询角色
    SELECT * FROM pg_roles;

    --验证模式csm_ca和用户csm_ca
    --模式列表
    beigang=# dn
    --角色列表
    beigang=# du

    --超级用户csm给普通用户csm_ca授予操作schema csm_ca的权限
    beigang=# grant all on schema csm_ca to csm_ca;
    beigang=# grant all on all tables in schema csm_ca to csm_ca;
    ------------------------------------------------
    pg_class,表,索引,序列,视图("关系")。字段:
    relname 表,索引,视图等的名字。
    relnamespace 包含这个关系的名字空间(模式)的 OID,对应pg_namespace.oid
    relkind r = 普通表,i = 索引,S = 序列,v = 视图, c = 复合类型,s = 特殊,t = TOAST表

    pg_namespace,名字空间(模式),字段:
    nspname 名字空间的名字
    nspowner 名字空间的所有者

    pg_attribute,记录了数据库关于表的字段的信息。
    字段:
    attrelid 此列/字段所属的表,对应于pg_class.oid
    attname 字段名字
    atttypid 这个字段的数据类型,对应于pg_type.oid
    attlen 对于定长类型,typlen是该类型内部表现形式的字节数目。 对于变长类型,typlen 是负数。 -1 表示一种"变长"类型(有长度字属性的数据), -2 表示这是一个 NULL 结尾的 C 字串。是本字段类型 pg_type.typlen 的拷贝。
    attnum 字段数目。普通字段是从 1 开始计数的。系统字段, 比如 oid, 有(任意)正数。
    atttypmod atttypmod 元组在创建表的时候 提供的类型相关的数据(比如,一个 varchar 字段的最大长度)。 它传递给类型相关的输入和长度转换函数当做第三个参数。 其值对那些不需要 atttypmod 的类型而言通常为 -1。
    attnotnull 类型为boolean,这代表一个非空约束。我们可以改变这个字段以打开或者关闭这个约束。
    attisdropped 这个字段已经被删除了,不再有效。
    注意:如果字段类型为变长类型(如varchar),那么在atttypmod中存储的长度比实际长度多4。如果字段类型为numeric,那么可通过atttypmod获得长度、精度等信息。

    pg_type,数据类型的信息。字段:
    typname 数据类型名字
    typlen 对于定长类型,typlen是该类型内部表现形式的字节数目。 对于变长类型,typlen 是负数。 -1 表示一种"变长"类型(有长度字属性的数据), -2 表示这是一个 NULL 结尾的 C 字串。

    pg_description,对象(表、字段等)的注释。字段:
    objoid 这条描述所描述的对象的 OID。如果这条注释是一个表或表中字段的注释,那么,该值对应于pg_class.oid
    objsubid 对于一个表字段的注释,它是字段号,对应于pg_attribute.attnum。对于其它对象类型,它是零。
    description 作为对该对象的描述的任意文本

    -------------------------------------------------------------------------------------------------

    --gaussdb200解析表结构

    SELECT a8.nspname as schema_name,a5.relname as table_name,a5.relnamespace,a8.nspowner,a9.tableowner,a1.attrelid,
    a1.atttypid,a1.attnum,a1.attname attname,
    a6.typname,
    case when a1.attlen<>-1 then a1.attlen else a1.atttypmod end AS col_length,
    a1.attnotnull,
    a1.atthasdef,a2.adsrc as default_value,
    a3.indisprimary,a3.indisunique,a3.indisusable,a3.indisvalid,
    case when (a3.indisprimary is not null or a3.indisunique is not null) then 1 else 0 end as is_ind,
    case when a3.indisprimary='false' and a3.indisunique='true' then 1 else 0 end as is_unicons_uniind,
    case when a4.partkey is not null then true else false end as ispartkey,
    a7.contype,CASE WHEN a7.contype='p' THEN 1 ELSE 0 END AS ISPK
    from pg_attribute a1
    left join pg_catalog.pg_attrdef a2 on a2.adrelid=a1.attrelid and a2.adnum=a1.attnum
    left join pg_class a5 on a5.oid=a1.attrelid
    left join pg_catalog.pg_namespace a8 on a5.relnamespace=a8.oid
    left join pg_catalog.pg_index a3 on a3.indrelid=a1.attrelid and a1.attnum=any(a3.indkey)
    left join pg_catalog.pg_partition a4 on a4.parentid=a1.attrelid and a1.attnum=any(a4.partkey) and a4.parttype='r'
    left join pg_catalog.pg_tables a9 on a9.schemaname=a8.nspname and a9.tablename=a5.relname
    left join pg_catalog.pg_type a6 on a6.oid=a1.atttypid
    left join (select contype,conrelid,unnest(conkey) conkey from pg_catalog.pg_constraint) a7 on a7.conrelid=a5.oid and a7.conkey=a1.attnum
    where a1.atttypid>0 and a1.attnum>0
    and a8.nspname='zyj'
    and a5.relname='a34';

  • 相关阅读:
    RabbitMQ source was instantiated with usesCorrelationId set to true but a message was received with correlation id set to null
    【Ubuntu】运行命令如何免输入YES和回车?
    运营的本质
    什么???前端页面统计停留时间你不会???那可得好好看看这个文章了
    使用el-switch实现开关(更改状态后展示状态)
    Linux编译安装时常见错误解决办法
    SignalR前后端通信
    声音类型识别库运行环境搭建
    uniapp使用axios(亲测可用)
    background + gradient 使用技巧
  • 原文地址:https://www.cnblogs.com/buffercache/p/11607838.html
Copyright © 2020-2023  润新知