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';


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM