postgresql數(shù)據(jù)庫如何查看數(shù)據(jù)中表的信息
切換到postgresql數(shù)據(jù)庫,各種不適應吧。
有個需求需要查詢數(shù)據(jù)表的各種信息。
下面我們一起學習吧。
●PostgreSQL: Documentation
●pg_namespace
存儲名字空間。名字空間是 SQL 模式下層的結(jié)構(gòu):每個名字空間有獨立的關(guān)系, 類型等集合但并不會相互沖突。

OID
在PostgreSQL中,對象標識符Object identifiers (OIDs) 用來在整個數(shù)據(jù)集簇中唯一的標識一個數(shù)據(jù)庫對象,這個對象可以是數(shù)據(jù)庫、表、索引、視圖、元組、類型等等。
OID的分配由系統(tǒng)中的一個全局OID計數(shù)器來實現(xiàn),OID分配時會采用互斥鎖加以鎖定以避免多個要求分配OID的請求獲得相同的OID。
sql
select * from pg_namespace WHERE nspname ='screen';

●pg_tables
pg_tables 提供了對有關(guān)數(shù)據(jù)庫中每個表的有用信息地訪問。

SQl
select * from pg_tables where schemaname = 'creen' and tablename = 'title';

●pg_class
pg_class表記載表和幾乎所有有字段或者是那些類似表的東西。 包括索引(不過還要參閱pg_index)、序列、視圖、物化視圖、 復合類型和一些特殊關(guān)系類型;
| 名字 | 類型 | 引用 | 描述 |
| oid | oid | 行標識符(隱藏屬性; 必須明確選擇) | |
| relname | name | 表、索引、視圖等的名字。 | |
| relnamespace | oid | pg_namespace.oid | 包含這個關(guān)系的名字空間(模式)的 OID |
| reltype | oid | pg_type.oid | 如果有,則為對應這個表的行類型的數(shù)據(jù)類型的OID(索引為零,它們沒有pg_type記錄)。 |
| reloftype | oid | pg_type.oid | 對于類型表,為底層復合類型的OID,對于所有其他關(guān)系為0 |
| relowner | oid | pg_authid.oid | 關(guān)系所有者 |
| relam | oid | pg_am.oid | 如果行是索引,那么就是所用的訪問模式(B-tree, hash 等等) |
| relfilenode | oid | 這個關(guān)系在磁盤上的文件的名字,0表示這是一個"映射的"關(guān)系, 它的文件名取決于行級別的狀態(tài) | |
| reltablespace | oid | pg_tablespace.oid | 這個關(guān)系存儲所在的表空間。如果為零,則意味著使用該數(shù)據(jù)庫的缺省表空間。 如果關(guān)系在磁盤上沒有文件,則這個字段沒有什么意義。 |
| relpages | int4 | 以頁(大小為BLCKSZ)的此表在磁盤上的形式的大小。 它只是規(guī)劃器用的一個近似值,是由VACUUM,ANALYZE 和幾個 DDL 命令,比如CREATE INDEX更新。 | |
| reltuples | float4 | 表中行的數(shù)目。只是規(guī)劃器使用的一個估計值,由VACUUM,ANALYZE 和幾個 DDL 命令,比如CREATE INDEX更新。 | |
| relallvisible | int4 | 在表的可見映射中標記所有可見的頁的數(shù)目。只是規(guī)劃器使用的一個估計值, 由VACUUM,ANALYZE 和幾個 DDL 命令,比如CREATE INDEX更新。 | |
| reltoastrelid | oid | pg_class.oid | 與此表關(guān)聯(lián)的 TOAST 表的 OID ,如果沒有為 0 。TOAST 表在一個從屬表里"離線"存儲大字段。 |
| reltoastidxid | oid | pg_class.oid | 對于 TOAST 表是它的索引的 OID ,如果不是 TOAST 表則為 0 |
| relhasindex | bool | 如果它是一個表而且至少有(或者最近有過)一個索引,則為真。 | |
| relisshared | bool | 如果該表在整個集群中由所有數(shù)據(jù)庫共享則為真。只有某些系統(tǒng)表 (比如pg_database)是共享的。 | |
| relpersistence | char | p = permanent table(永久表), u = unlogged table(未加載的表), t = temporary table (臨時表) | |
| relkind | char | r = ordinary table(普通表), i = index(索引), S = sequence(序列), v = view(視圖), m = materialized view(物化視圖), c = composite type(復合類型), t = TOAST table(TOAST 表), f = foreign table(外部表) | |
| relnatts | int2 | 關(guān)系中用戶字段數(shù)目(除了系統(tǒng)字段以外)。在pg_attribute 里肯定有相同數(shù)目對應行。又見pg_attribute.attnum。 | |
| relchecks | int2 | 表里的CHECK約束的數(shù)目;參閱pg_constraint表 | |
| relhasoids | bool | 如果為關(guān)系中每行都生成一個 OID 則為真 | |
| relhaspkey | bool | 如果這個表有一個(或者曾經(jīng)有一個)主鍵,則為真。 | |
| relhasrules | bool | 如表有(或曾經(jīng)有)規(guī)則就為真;參閱pg_rewrite表 | |
| relhastriggers | bool | 如果表有(或者曾經(jīng)有)觸發(fā)器,則為真;參閱pg_trigger表 | |
| relhassubclass | bool | 如果有(或者曾經(jīng)有)任何繼承的子表,為真。 | |
| relispopulated | bool | 如果關(guān)系是填充的則為真(對所有關(guān)系為真,除了一些物化視圖) | |
| relfrozenxid | xid | 該表中所有在這個之前的事務(wù) ID 已經(jīng)被一個固定的("frozen")事務(wù) ID 替換。 這用于跟蹤該表是否需要為了防止事務(wù) ID 重疊或者允許收縮pg_clog 而進行清理。如果該關(guān)系不是表則為零(InvalidTransactionId)。 | |
| relminmxid | xid | 該表中所有在這個之前的多事務(wù) ID 已經(jīng)被一個事務(wù) ID 替換。 這用于跟蹤該表是否需要為了防止多事務(wù) ID 重疊或者允許收縮pg_clog 而進行清理。如果該關(guān)系不是表則為零(InvalidTransactionId)。 | |
| relacl | aclitem[] | 訪問權(quán)限。參閱GRANT和REVOKE獲取詳細信息。 | |
| reloptions | text[] | 訪問方法特定的選項,使用"keyword=value"格式的字符串 |
SQl
select * from pg_class where relname = 'title' ;

● pg_description
pg_description表可以給每個數(shù)據(jù)庫對象存儲一個可選的描述(注釋)。 你可以用COMMENT命令操作這些描述,并且可以用psql 的\d命令查看。許多內(nèi)置的系統(tǒng)對象的描述提供了 pg_description的初始內(nèi)容。
pg_shdescription 提供了類似的功能,它記錄了整個集群范圍內(nèi)共享對象的注釋。
| 名字 | 類型 | 引用 | 描述 |
| objoid | oid | 任意 oid 屬性 | 這條描述所描述的對象的 OID |
| classoid | oid | pg_class.oid | 這個對象出現(xiàn)的系統(tǒng)表的 OID |
| objsubid | int4 | 對于一個表字段的注釋,它是字段號(objoid和classoid 指向表自身)。對于其它對象類型,它是零。 | |
| description | text | 作為對該對象的描述的任意文本 |
SQl
select * from pg_description
where objoid = to_regclass('screen' || '.' || 'title')::REGCLASS::OID;
● columns
視圖columns包含有關(guān)數(shù)據(jù)庫中所有表字段(或者視圖字段)的信息。 不包括系統(tǒng)字段(比如oid等)。只有那些當前用戶有權(quán)訪問的字段才會顯示出來 (要么是所有者,要么是有些權(quán)限)。
| 名字 | 數(shù)據(jù)類型 | 描述 |
| table_catalog | sql_identifier | 包含表的數(shù)據(jù)庫的名字(總是當前數(shù)據(jù)庫) |
| table_schema | sql_identifier | 包含表的模式的名字 |
| table_name | sql_identifier | 表的名字 |
| column_name | sql_identifier | 字段的名字 |
| ordinal_position | cardinal_number | 字段在表中的位置序號(從 1 開始) |
| column_default | character_data | 字段的缺省表達式 |
| is_nullable | yes_or_no | 如果字段可能為空,則為YES,如果知道它不能為空,則為NO。 非空約束是我們得知字段不能為空的一個手段,但是還可能有其它的。 |
| data_type | character_data | 如果它是一個內(nèi)置類型,那么為字段的數(shù)據(jù)類型,如果它是某種數(shù)組, 則為ARRAY(在這種情況下,參閱視圖element_types), 否則就是USER-DEFINED(這時,類型定義在udt_name和相關(guān)的字段上)。 如果字段基于域,這個字段引用底層域類型(而域是在domain_name和相關(guān)字段里定義的)。 |
| character_maximum_length | cardinal_number | 如果data_type標識一個字符或者位串類型,那么就是聲明的最大長度; 如果是其它類型或者沒有定義最大長度,就是空。 |
| character_octet_length | cardinal_number | 如果data_type標識一個字符類型,就是以字節(jié)記的最大可能長度; 所有其它類型都是空。最大字節(jié)長度取決于聲明的字節(jié)最大長度(見上文)和服務(wù)器編碼。 |
| numeric_precision | cardinal_number | 如果data_type標識一個數(shù)值類型,這個字段包含 (聲明的或隱含的)這個字段的數(shù)據(jù)類型的精度。精度表示有效小數(shù)位的長度。 它可以用十進制或者二進制來表示,這一點在numeric_precision_radix 字段里聲明。對于其它數(shù)據(jù)類型,這個字段是空。 |
| numeric_precision_radix | cardinal_number | 如果data_type標識一個數(shù)值類型,這個字段標識字段 numeric_precision和numeric_scale 里的數(shù)據(jù)是多少進制的。值要么是 2 要么是 10。對于所有其它數(shù)據(jù)類型,這個字段是空。 |
| numeric_scale | cardinal_number | 如果data_type標識一個精確的數(shù)值類型, 那么這個字段包含(聲明的或者隱含的)這個字段上這個類型的數(shù)值范圍。 數(shù)值范圍表明小數(shù)點右邊的有效小數(shù)位的數(shù)目。它可以用十進制(10為基) 或者二進制(二為基)來表示,正如字段numeric_precision_radix 聲明的那樣。對于所有其它數(shù)據(jù)類型,這個字段是空。 |
| datetime_precision | cardinal_number | 如果data_type標識一個日期,時間,時間戳,或者間隔類型, 該字段(公開地或隱含地)包含該字段類型的小數(shù)秒精度,就是說, 小數(shù)位數(shù)保持到小數(shù)點后面。對于所有其它的數(shù)據(jù)類型,該字段是null。 |
| interval_type | character_data | 如果data_type標識一個間隔類型,這個字段包含這個字段時間間隔聲明, 例如,YEAR TO MONTH, DAY TO SECOND等等。 如果沒有指定字段限制(也就是,間隔接受所有字段),或?qū)τ谒衅渌麛?shù)據(jù)類型,這個字段是null。 |
| interval_precision | cardinal_number | 用于一個PostgreSQL不可用的特性 (參閱datetime_precision獲取間隔類型字段的小數(shù)秒精度) |
| character_set_catalog | sql_identifier | 用于PostgreSQL里一個不可用的特性 |
| character_set_schema | sql_identifier | 用于PostgreSQL里一個不可用的特性 |
| character_set_name | sql_identifier | 用于PostgreSQL里一個不可用的特性 |
| collation_catalog | sql_identifier | 包含該字段的排序規(guī)則的數(shù)據(jù)庫的名字(總是當前數(shù)據(jù)庫),缺省或者字段的數(shù)據(jù)類型不可排序時為null。 |
| collation_schema | sql_identifier | 包含該字段的排序規(guī)則的模式的名字,缺省或者字段的數(shù)據(jù)類型不可排序時為null。 |
| collation_name | sql_identifier | 字段的排序規(guī)則的名字,缺省或者字段的數(shù)據(jù)類型不可排序時為null。 |
| domain_catalog | sql_identifier | 如果字段是域類型,就是該域定義所在的數(shù)據(jù)庫的名字(總是當前數(shù)據(jù)庫),否則為null。 |
| domain_schema | sql_identifier | 如果字段是域類型,就是域定義所在的模式的名字,否則為null。 |
| domain_name | sql_identifier | 如果字段是域類型,就是該域的名字,否則為null。 |
| udt_catalog | sql_identifier | 這個字段數(shù)據(jù)類型(如果適用,就是底層域類型)定義所在的數(shù)據(jù)庫的名字(總是當前數(shù)據(jù)庫)。 |
| udt_schema | sql_identifier | 這個字段數(shù)據(jù)類型(如果適用,就是底層域類型)定義所在的模式名字。 |
| udt_name | sql_identifier | 這個字段數(shù)據(jù)類型(如果適用,就是底層域類型)的名字。 |
| scope_catalog | sql_identifier | 用于PostgreSQL里一個不可用的特性 |
| scope_schema | sql_identifier | 用于PostgreSQL里一個不可用的特性 |
| scope_name | sql_identifier | 用于PostgreSQL里一個不可用的特性 |
| maximum_cardinality | cardinal_number | 總是空,因為在PostgreSQL里數(shù)組總是有無限的最大維數(shù) |
| dtd_identifier | sql_identifier | 一個該字段的數(shù)據(jù)類型描述符的標識符,在屬于這個表中的所有的數(shù)據(jù)類型描述符中唯一。 這個字段主要用于和其它這樣的標識符實例連接。 (這個標識符的確切格式?jīng)]有定義并且不保證在將來的版本中保持一樣。) |
| is_self_referencing | yes_or_no | 用于PostgreSQL里一個不可用的特性 |
| is_identity | yes_or_no | 用于PostgreSQL里一個不可用的特性 |
| identity_generation | character_data | 用于PostgreSQL里一個不可用的特性 |
| identity_start | character_data | 用于PostgreSQL里一個不可用的特性 |
| identity_increment | character_data | 用于PostgreSQL里一個不可用的特性 |
| identity_maximum | character_data | 用于PostgreSQL里一個不可用的特性 |
| identity_minimum | character_data | 用于PostgreSQL里一個不可用的特性 |
| identity_cycle | yes_or_no | 用于PostgreSQL里一個不可用的特性 |
| is_generated | character_data | 用于PostgreSQL里一個不可用的特性 |
| generation_expression | character_data | 用于PostgreSQL里一個不可用的特性 |
| is_updatable | yes_or_no | 如果字段為可更新則為YES,否則為NO (基表中的字段總是可以更新的,而試圖中的字段則不一定) |
系統(tǒng)目錄信息函數(shù)
| 名稱 | 返回類型 | 描述 |
| format_type(type_oid, typemod) | text | 獲得一個數(shù)據(jù)類型的 SQL 名字 |
| pg_get_constraintdef(constraint_oid) | text | 獲得一個約束的定義 |
| pg_get_constraintdef(constraint_oid, pretty_bool) | text | 獲得一個約束的定義 |
| pg_get_expr(pg_node_tree, relation_oid) | text | 反編譯一個表達式的內(nèi)部形式,假定其中的任何 Var 指向由第二個參數(shù)指示的關(guān)系 |
| pg_get_expr(pg_node_tree, relation_oid, pretty_bool) | text | 反編譯一個表達式的內(nèi)部形式,假定其中的任何 Var 指向由第二個參數(shù)指示的關(guān)系 |
| pg_get_functiondef(func_oid) | text | 獲得一個函數(shù)的定義 |
| pg_get_function_arguments(func_oid) | text | 獲得一個函數(shù)定義的參數(shù)列表(帶有默認值) |
| pg_get_function_identity_arguments(func_oid) | text | 獲得標識一個函數(shù)的參數(shù)列表(不帶默認值) |
| pg_get_function_result(func_oid) | text | 獲得函數(shù)的RETURNS子句 |
| pg_get_indexdef(index_oid) | text | 獲得索引的CREATE INDEX命令 |
| pg_get_indexdef(index_oid, column_no, pretty_bool) | text | 獲得索引的CREATE INDEX命令,或者當column_no為非零時只得到一個索引列的定義 |
| pg_get_keywords() | setof record | 獲得 SQL 關(guān)鍵字的列表及其分類 |
| pg_get_ruledef(rule_oid) | text | 獲得規(guī)則的CREATE RULE命令 |
| pg_get_ruledef(rule_oid, pretty_bool) | text | 獲得規(guī)則的CREATE RULE命令 |
| pg_get_serial_sequence(table_name, column_name) | text | 獲得一個serial、smallserial或bigserial列使用的序列的名稱 |
| pg_get_triggerdef(trigger_oid) | text | 獲得觸發(fā)器的CREATE [ CONSTRAINT ] TRIGGER命令 |
| pg_get_triggerdef(trigger_oid, pretty_bool) | text | 獲得觸發(fā)器的CREATE [ CONSTRAINT ] TRIGGER命令 |
| pg_get_userbyid(role_oid) | name | 獲得給定 OID 指定的角色名 |
| pg_get_viewdef(view_name) | text | 獲得視圖或物化視圖的底層SELECT命令(已廢棄) |
| pg_get_viewdef(view_name, pretty_bool) | text | 獲得視圖或物化視圖的底層SELECT命令(已廢棄) |
| pg_get_viewdef(view_oid) | text | 獲得視圖或物化視圖的底層SELECT命令 |
| pg_get_viewdef(view_oid, pretty_bool) | text | 獲得視圖或物化視圖的底層SELECT命令 |
| pg_get_viewdef(view_oid, wrap_column_int) | text | 獲得視圖或物化視圖的底層SELECT命令;帶域的行被包裝成指定的列數(shù),并隱含了優(yōu)質(zhì)打印 |
| pg_options_to_table(reloptions) | setof record | 獲得存儲選項的名稱/值對的集合 |
| pg_tablespace_databases(tablespace_oid) | setof oid | 獲得在該表空間中有對象的數(shù)據(jù)庫的 OID 的集合 |
| pg_tablespace_location(tablespace_oid) | text | 獲得這個表空間所在的文件系統(tǒng)的路徑 |
| pg_typeof(any) | regtype | 獲得任意值的數(shù)據(jù)類型 |
| collation for (any) | text | 獲得該參數(shù)的排序規(guī)則 |
| to_regclass(rel_name) | regclass | 獲得命名關(guān)系的OID |
| to_regproc(func_name) | regproc | 獲得命名函數(shù)的OID |
| to_regprocedure(func_name) | regprocedure | 獲得命名函數(shù)的OID |
| to_regoper(operator_name) | regoper | 獲得命名操作符的OID |
| to_regoperator(operator_name) | regoperator | 獲得命名操作符的OID |
| to_regtype(type_name) | regtype | 獲得命名類型的OID |
| to_regnamespace(schema_name) | regnamespace | 獲得命名模式的OID |
| to_regrole(role_name) | regrole | 獲得命名角色的OID |
查詢表的注釋
SELECT tb.table_name, d.description
FROM information_schema.tables tb
JOIN pg_class c ON c.relname = tb.table_name
LEFT JOIN pg_description d ON d.objoid = c.oid AND d.objsubid = '0'
WHERE tb.table_schema = 'screen';
查詢列注釋
-- 查詢列注釋
SELECT col.table_catalog,
col.table_schema AS tableSchema,
col.table_name AS tableName,
col.column_name AS fieldName,
col.is_nullable AS "isNull",
col.data_type AS dataType,
col.column_default AS defaultValue,
d.description AS fieldDescribe
FROM information_schema.columns col
JOIN pg_class c ON c.relname = col.table_name
LEFT JOIN pg_description d ON d.objoid = c.oid
AND d.objsubid = col.ordinal_position
WHERE col.table_schema = 'screen'
ORDER BY col.table_name;
總結(jié)
到此這篇關(guān)于postgresql數(shù)據(jù)庫如何查看數(shù)據(jù)中表信息的文章就介紹到這了,更多相關(guān)postgresql查看表信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
postgresql高級應用之行轉(zhuǎn)列&匯總求和的實現(xiàn)思路
這篇文章主要介紹了postgresql高級應用之行轉(zhuǎn)列&匯總求和的實現(xiàn)思路,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05
PostgreSQL定時清理舊數(shù)據(jù)的實現(xiàn)方法
最近覺得數(shù)據(jù)庫中每日數(shù)據(jù)不需要都保持,只需要保留30天的,所以這篇文章給大家介紹了PostgreSQL定時清理舊數(shù)據(jù)的實現(xiàn)方法,文中通過代碼示例和圖文給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2024-03-03
Postgresql數(shù)據(jù)庫之創(chuàng)建和修改序列的操作
這篇文章主要介紹了Postgresql數(shù)據(jù)庫之創(chuàng)建和修改序列的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Postgresql數(shù)據(jù)庫中的json類型字段使用示例詳解
JSON的主要用于在服務(wù)器與web應用之間傳輸數(shù)據(jù),這篇文章主要介紹了Postgresql數(shù)據(jù)庫中的json類型字段使用,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
postgreSQL中的row_number() 與distinct用法說明
這篇文章主要介紹了postgreSQL中的row_number() 與distinct用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
postgresql 中的 like 查詢優(yōu)化方案
這篇文章主要介紹了postgresql 中的 like 查詢優(yōu)化方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01

