国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - PostgreSQL - PostgreSQL教程(十五):系統表詳解

PostgreSQL教程(十五):系統表詳解

2020-04-27 17:07PostgreSQL教程網 PostgreSQL

這篇文章主要介紹了PostgreSQL教程(十五):系統表詳解,本文講解了pg_class、pg_attribute、pg_attrdef、pg_authid、pg_auth_members、pg_constraint、pg_tablespace、pg_namespace、pg_database等表的作用和字段介紹,需要的朋友可以參考下

一、pg_class:

    該系統表記錄了數據表、索引(仍然需要參閱pg_index)、序列、視圖、復合類型和一些特殊關系類型的元數據。注意:不是所有字段對所有對象類型都有意義。

 

名字

類型

引用

描述

relname

name

 

數據類型名字。

relnamespace

oid

pg_namespace.oid

包含這個對象的名字空間(模式)的OI。

reltype

oid

pg_type.oid

對應這個表的行類型的數據類型。

relowner

oid

pg_authid.oid

對象的所有者。

relam

oid

pg_am.oid

對于索引對象,表示該索引的類型(B-tree,hash)。

relfilenode

oid

 

對象存儲在磁盤上的文件名,如果沒有則為0。

reltablespace

oid

pg_tablespace.oid

對象所在的表空間。如果為零,則表示使用該數據庫的缺省表空間。(如果對象在磁盤上沒有文件,這個字段就沒有什么意義)

relpages

int4

 

該數據表或索引所占用的磁盤頁面數量,查詢規劃器會借助該值選擇最優路徑。

reltuples

float4

 

表中行的數量,該值只是被規劃器使用的一個估計值。

reltoastrelid

oid

pg_class.oid

與此表關聯的TOAST表的OID,如果沒有為0。TOAST表在一個從屬表里"離線"存儲大字段。

reltoastidxid

oid

pg_class.oid

如果是TOAST表,該字段為它索引的OID,如果不是TOAST表則為0。

relhasindex

bool 

 

如果這是一個數據表而且至少有(或者最近有過)一個索引,則為真。它是由CREATE INDEX設置的,但DROP INDEX不會立即將它清除。如果VACUUM發現一個表沒有索引,那么它清理 relhasindex。

relisshared

bool 

 

如果該表在整個集群中由所有數據庫共享,則為真。 

relkind

char

 

r = 普通表,i = 索引,S = 序列,v = 視圖, c = 復合類型,s = 特殊,t = TOAST表

relnatts

int2

 

數據表中用戶字段的數量(除了系統字段以外,如oid)。在pg_attribute里肯定有相同數目的數據行。見pg_attribute.attnum.

relchecks

int2

 

表中檢查約束的數量,參閱pg_constraint表。

reltriggers

int2

 

表中觸發器的數量;參閱pg_trigger表。

relhasoids

bool

 

如果我們為對象中的每行都生成一個OID,則為真。

relhaspkey

bool

 

如果該表存在主鍵,則為真。

relhasrules 

bool

 

如表有規則就為真;參閱pg_rewrite表。

relhassubclass

bool 

 

如果該表有子表,則為真。

relacl

aclitem[]

 

訪問權限。

 

 見如下應用示例:
 

復制代碼 代碼如下:

    #查看指定表對象testtable的模式
    postgres=# SELECT relname,relnamespace,nspname FROM pg_class c,pg_namespace n WHERE relname = 'testtable' AND relnamespace = n.oid;
      relname   | relnamespace | nspname
    -------------+--------------+---------
     testtable   |         2200    | public
    (1 row)
    #查看指定表對象testtable的owner(即role)。
    postgres=# select relname,rolname from pg_class c,pg_authid au where relname = 'testtable' and relowner = au.oid;
      relname   | rolname
    -------------+----------
     testtable   | postgres
    (1 row)

 

二、pg_attribute:

    該系統表存儲所有表(包括系統表,如pg_class)的字段信息。數據庫中的每個表的每個字段在pg_attribute表中都有一行記錄。

 

名字

類型

引用

描述

attrelid

oid

pg_class.oid

此字段所屬的表。

attname

name

 

字段名。

atttypid

oid

pg_type.oid

字段的數據類型。

attstattarget

int4

 

attstattarget控制ANALYZE為這個字段設置的統計細節的級別。零值表示不收集統計信息,負數表示使用系統缺省的統計對象。正數值的確切信息是和數據類型相關的。

attlen

int2

 

該字段所屬類型的長度。(pg_type.typlen的拷貝)

attnum

int2

 

字段的編號,普通字段是從1開始計數的。系統字段,如oid,是任意的負數。

attndims

int4

 

如果該字段是數組,該值表示數組的維數,否則是0。

attcacheoff

int4

 

在磁盤上總是-1,但是如果裝載入內存中的行描述器中, 它可能會被更新為緩沖在行中字段的偏移量。

atttypmod

int4

 

表示數據表在創建時提供的類型相關的數據(比如,varchar字段的最大長度)。其值對那些不需要atttypmod的類型而言通常為-1。

attbyval

bool

 

pg_type.typbyval字段值的拷貝。

attstorage

char

 

pg_type.typstorage字段值的拷貝。

attalign

char

 

pg_type.typalign字段值的拷貝。

attnotnull

bool

 

如果該字段帶有非空約束,則為真,否則為假。

atthasdef

bool

 

該字段是否存在缺省值,此時它對應pg_attrdef表里實際定義此值的記錄。

attisdropped

bool

 

該字段是否已經被刪除。如果被刪除,該字段在物理上仍然存在表中,但會被分析器忽略,因此不能再通過SQL訪問。

attislocal

bool

 

該字段是否局部定義在對象中的。

attinhcount

int4

 

該字段所擁有的直接祖先的個數。如果一個字段的祖先個數非零,那么它就不能被刪除或重命名。

 

 見如下應用示例:
 

復制代碼 代碼如下:

    #查看指定表中包含的字段名和字段編號。
    postgres=# SELECT relname, attname,attnum FROM pg_class c,pg_attribute attr WHERE relname  = 'testtable' AND c.oid = attr.attrelid;
      relname   | attname  | attnum
    -------------+----------+--------
     testtable   | tableoid   |     -7
     testtable   | cmax       |     -6
     testtable   | xmax      |     -5
     testtable   | cmin       |     -4
     testtable   | xmin       |     -3
     testtable   | ctid         |     -1
     testtable   | i             |      1
    (7 rows)
    #只查看用戶自定義字段的類型
    postgres=# SELECT relname,attname,typname FROM pg_class c,pg_attribute a,pg_type t WHERE c.relname = 'testtable' AND c.oid = attrelid AND atttypid = t.oid AND attnum > 0;
      relname   | attname  | typname
    -------------+----------+---------
     testtable   | i             | int4
    (7 rows)

 

三、pg_attrdef:

    該系統表主要存儲字段缺省值,字段中的主要信息存放在pg_attribute系統表中。注意:只有明確聲明了缺省值的字段在該表中才會有記錄。

 

名字

類型

引用

描述

adrelid

oid

pg_class.oid

這個字段所屬的表

adnum

int2

pg_attribute.attnum

字段編號,其規則等同于pg_attribute.attnum

adbin

text

 

字段缺省值的內部表現形式。

adsrc

text

 

缺省值的人可讀的表現形式。

 

 見如下應用示例:
 

復制代碼 代碼如下:

    #查看指定表有哪些字段存在缺省值,同時顯示出字段名和缺省值的定義方式
    postgres=# CREATE TABLE testtable2 (i integer DEFAULT 100);
    CREATE TABLE        
    postgres=# SELECT c.relname, a.attname, ad.adnum, ad.adsrc FROM pg_class c, pg_attribute a, pg_attrdef ad WHERE relname = 'testtable2' AND ad.adrelid = c.oid AND adnum = a.attnum AND attrelid = c.oid;
      relname    | attname | adnum  | adsrc
    -------------+----------+---------+-------
     testtable2  | i            |         1  | 100
    (1 row)
 

 

四、pg_authid:

    該系統表存儲有關數據庫認證的角色信息,在PostgreSQL中角色可以表現為用戶和組兩種形式。對于用戶而言只是設置了rolcanlogin標志的角色。由于該表包含口令數據,所以它不是公共可讀的。PostgreSQL中提供了另外一個建立在該表之上的系統視圖pg_roles,該視圖將口令字段填成空白。

 

名字

類型

引用

描述

rolname

name

 

角色名稱。

rolsuper

bool

 

角色是否擁有超級用戶權限。

rolcreaterole

bool

 

角色是否可以創建其它角色。

rolcreatedb

bool

 

角色是否可以創建數據庫。

rolcatupdate

bool

 

角色是否可以直接更新系統表(如果該設置為假,即使超級用戶也不能更新系統表)。

rolcanlogin

bool

 

角色是否可以登錄,換句話說,這個角色是否可以給予會話認證標識符。

rolpassword

text

 

口令(可能是加密的);如果沒有則為NULL。

rolvaliduntil

timestamptz

 

口令失效時間(只用于口令認證);如果沒有失效期,則為NULL。

rolconfig

text[]

 

運行時配置變量的會話缺省。

 

見如下應用示例:

復制代碼 代碼如下:

    #從輸出結果可以看出口令字段已經被加密。
    postgres=# SELECT rolname,rolpassword FROM pg_authid;
     rolname  |             rolpassword
    -----------+-------------------------------------
     postgres | md5a3556571e93b0d20722ba62be61e8c2d

 

五、pg_auth_members:

    該系統表存儲角色之間的成員關系。

 

名字

類型

引用

描述

roleid

oid

pg_authid.oid

組角色的ID。

member

oid

pg_authid.oid

屬于組角色roleid的成員角色的ID。

grantor

oid

pg_authid.oid

賦予此成員關系的角色的ID。

admin_option

bool

 

如果具有把其它成員角色加入組角色的權限,則為真。

 

  見如下應用示例:
 

復制代碼 代碼如下:

    #1. 先查看角色成員表中有哪些角色之間的隸屬關系,在當前結果集中只有一個成員角色隸屬于一個組角色,
    #    如果有多個成員角色隸屬于同一個組角色,這樣將會有多條記錄。
    postgres=# SELECT * FROM pg_auth_members ;
     roleid  | member | grantor | admin_option
    --------+--------+---------+--------------
      16446 |  16445  |      10   | f
    (1 row)
    #2. 查看組角色的名字。
    postgres=# SELECT rolname FROM pg_authid a,pg_auth_members am WHERE a.oid = am.roleid;
     rolname
    ---------
     mygroup
    (1 row)
    #3. 查看成員角色的名字。
    #4. 如果需要用一個結果集獲取角色之間的隸屬關系,可以將這兩個結果集作為子查詢后再進行關聯。
    postgres=# SELECT rolname FROM pg_authid a,pg_auth_members am WHERE a.oid = am.member;
     rolname
    ---------
     myuser
    (1 row)


六、pg_constraint:

 

    該系統表存儲PostgreSQL中表對象的檢查約束、主鍵、唯一約束和外鍵約束。

 

名字

類型

引用

描述

conname

name

 

約束名字(不一定是唯一的)。

connamespace

oid

pg_namespace.oid

包含這個約束的名字空間(模式)的OID。

contype

char

 

c = 檢查約束, f = 外鍵約束, p = 主鍵約束, u = 唯一約束

condeferrable

bool

 

該約束是否可以推遲。

condeferred

bool

 

缺省時這個約束是否是推遲的?

conrelid

oid

pg_class.oid

該約束所在的表,如果不是表約束則為0。

contypid

oid

pg_type.oid

該約束所在的域,如果不是域約束則為0。

confrelid

oid

pg_class.oid

如果為外鍵,則指向參照的表,否則為0。

confupdtype

char

 

外鍵更新動作代碼。

confdeltype

char

 

外鍵刪除動作代碼。

confmatchtype

char

 

外鍵匹配類型。

conkey

int2[]

pg_attribute.attnum

如果是表約束,則是約束控制的字段列表。

confkey

int2[]

pg_attribute.attnum

如果是外鍵,則是參照字段的列表。

conbin

text

 

如果是檢查約束,則表示表達式的內部形式。

consrc

text

 

如果是檢查約束,則是表達式的人可讀的形式。

 

七、pg_tablespace:

    該系統表存儲表空間的信息。注意:表可以放在特定的表空間里,以幫助管理磁盤布局和解決IO瓶頸。

 

名字

類型

引用

描述

spcname

name

 

表空間名稱。

spcowner

oid

pg_authid.oid

表空間的所有者,通常是創建它的角色。

spclocation

text

 

表空間的位置(目錄路徑)。

spcacl

aclitem[]

 

訪問權限。

 

見如下應用示例:

復制代碼 代碼如下:

    #1. 創建表空間。
    postgres=# CREATE TABLESPACE my_tablespace LOCATION '/opt/PostgreSQL/9.1/mydata';
    CREATE TABLESPACE
    #2. 將新建表空間的CREATE權限賦予public。
    postgres=# GRANT CREATE ON TABLESPACE my_tablespace TO public;
    GRANT
    #3. 查看系統內用戶自定義表空間的名字、文件位置和創建它的角色名稱。
    #4. 系統創建時自動創建的兩個表空間(pg_default和pg_global)的文件位置為空(不是NULL)。
    postgres=# SELECT spcname,rolname,spclocation FROM pg_tablespace ts,pg_authid a WHERE ts.spcowner = a.oid AND spclocation <> '';
        spcname    | rolname  |        spclocation
    ---------------+----------+----------------------------
     my_tablespace | postgres | /opt/PostgreSQL/9.1/mydata
    (1 row)


八、pg_namespace:

 

    該系統表存儲名字空間(模式)。

 

名字

類型

引用

描述

nspname

name

 

名字空間(模式)的名稱。

nspowner

oid

pg_authid.oid

名字空間(模式)的所有者

nspacl

aclitem[]

 

訪問權限。

 

見如下應用示例:  

復制代碼 代碼如下:

    #查看當前數據庫public模式的創建者的名稱。
    postgres=# SELECT nspname,rolname FROM pg_namespace n, pg_authid a WHERE nspname = 'public' AND nspowner = a.oid;
     nspname | rolname
    ----------+----------
     public    | postgres
    (1 row)


九、pg_database:

 

    該系統表存儲數據庫的信息。和大多數系統表不同的是,在一個集群里該表是所有數據庫共享的,即每個集群只有一份pg_database拷貝,而不是每個數據庫一份。

 

名字

類型

引用

描述

datname

name

 

數據庫名稱。

datdba

oid

pg_authid.oid

數據庫所有者,通常為創建該數據庫的角色。

encoding

int4

 

數據庫的字符編碼方式。

datistemplate

bool

 

如果為真,此數據庫可以用于CREATE DATABASE TEMPLATE子句,把新數據庫創建為此數據庫的克隆。

datallowconn

bool

 

如果為假,則沒有人可以聯接到這個數據庫。

datlastsysoid

oid

 

數據庫里最后一個系統OID,此值對pg_dump特別有用。

datvacuumxid

xid

 

 

datfrozenxid

xid

 

 

dattablespace

text

pg_tablespace.oid

該數據庫的缺省表空間。在這個數據庫里,所有pg_class.reltablespace為零的表都將保存在這個表空間里,特別要指出的是,所有非共享的系統表也都存放在這里。

datconfig

text[]

 

運行時配置變量的會話缺省值。

datacl

aclitem[]

 

訪問權限。

 

十、pg_index:

    該系統表存儲關于索引的一部分信息。其它的信息大多數存儲在pg_class。

 

名字

類型

引用

描述

indexrelid

oid

pg_class.oid

該索引在pg_class里的記錄的OID。

indrelid

oid

pg_class.oid

索引所在表在pg_class里的記錄的OID。

indnatts

int2

 

索引中的字段數量(拷貝的pg_class.relnatts)。

indisunique

bool

 

如果為真,該索引是唯一索引。

indisprimary

bool

 

如果為真,該索引為該表的主鍵。

indisclustered

bool

 

如果為真,那么該表在這個索引上建了簇。

indkey

int2vector

pg_attribute.attnum

該數組的元素數量為indnatts,數組元素值表示建立這個索引時所依賴的字段編號,如1 3,表示第一個字段和第三個字段構成這個索引的鍵值。如果為0,則表示是表達式索引,而不是基于簡單字段的索引。

indclass

oidvector

pg_opclass.oid

對于構成索引鍵值的每個字段,這個字段都包含一個指向所使用的操作符表的OID。

indexprs

text

 

表達式樹用于那些非簡單字段引用的索引屬性。它是一個列表,在indkey里面的每個零條目一個元素。如果所有索引屬性都是簡單的引用,則為空。

indpred

text

 

部分索引斷言的表達式樹。如果不是部分索引, 則是空字串。

 

見如下應用示例:

復制代碼 代碼如下:

    #查看該索引所在表的名稱,以及構成該索引的鍵值數量和具體鍵值的字段編號。 
    postgres=# SELECT indnatts,indkey,relname FROM pg_index i, pg_class c WHERE c.relname = 'testtable2' AND indrelid = c.oid;
     indnatts | indkey |  relname
    ----------+--------+------------
            2 | 1 3    | testtable2
    (1 row)
    #查看指定表包含的索引,同時列出索引的名稱。
    postgres=# SELECT t.relname AS table_name, c.relname AS index_name FROM (SELECT relname,indexrelid FROM pg_index i, pg_class c WHERE c.relname = 'testtable2' AND indrelid = c.oid) t, pg_index i,pg_class c WHERE t.indexrelid = i.indexrelid AND i.indexrelid = c.oid;
     table_name |   index_name
    ------------+----------------
     testtable2 | testtable2_idx
    (1 row)

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: av一区二区在线观看 | 成人av片在线观看 | 俺来也俺也啪www色 性色视频在线 | 狠狠影院| 激情视频网 | 久久久高清 | 日本乱码视频 | 久久久www成人免费精品 | 国产一区二区三区在线 | 欧美激情一区二区三级高清视频 | 日韩精品99久久久久中文字幕 | 日韩欧美一区二区精品 | 91视频.www | 亚洲天堂一区 | 无码日韩精品一区二区免费 | 午夜三区| 亚洲一区二区在线 | 国产福利视频 | 日韩中文字幕在线免费观看 | 日韩激情一区 | 红杏首页 | 成人欧美| 亚洲一区二区三区四区的 | 精品久久精品 | 亚洲福利社区 | 午夜私人影院在线观看 | 亚洲综合一区二区 | 国产成人久久 | 免费观看一级视频 | 污视频网站在线观看 | 五月宗合网 | 欧美一级做a爰片久久高潮 免费在线毛片 | 久久成| 久久首页 | 国产欧美精品一区二区色综合 | 成年人在线免费观看视频网站 | 日韩欧美在线观看一区二区三区 | 美日韩成人 | 日韩久久综合 | 欧美一级片免费在线观看 | 精品久久久一 |