<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### [PostgreSQL學習手冊(系統表)](http://www.cnblogs.com/stephen-liu74/archive/2012/05/25/2305415.html) Posted on?2012-05-25 09:04?[Stephen_Liu](http://www.cnblogs.com/stephen-liu74/)?閱讀(1430) 評論(0)?[編輯](http://www.cnblogs.com/stephen-liu74/admin/EditPosts.aspx?postid=2305415)?[收藏](http://www.cnblogs.com/stephen-liu74/archive/2012/05/25/2305415.html#)?![](https://box.kancloud.cn/2015-10-30_5632e1b890a73.jpg) **一、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) 分類:?[PostgreSQL](http://www.cnblogs.com/stephen-liu74/category/343171.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看