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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 9.25\. 系統信息函數 [Table 9-51](#calibre_link-2241)顯示了幾個抽取會話及系統信息的函數。 另外在本節所列出的函數,有一些函數有關統計系統,也提供系統信息。 參閱[Section 27.2.2](#calibre_link-1695)獲取更多信息。 **Table 9-51\. 會話信息函數** | Name | Return Type | Description | | --- | --- | --- | | ``current_catalog`` | `name` | 當前數據庫名(在SQL標準里叫"catalog") | | ``current_database()`` | `name` | 當前數據庫名 | | ``current_query()`` | `text` | 當前執行的查詢文本,由客戶端提交(可能包含多于1句) | | ``current_schema`[()]` | `name` | 當前模式名 | | ``current_schemas(```boolean`) | `name[]` | 搜索路徑中的模式名字,包括可選的隱式模式 | | ``current_user`` | `name` | 當前執行環境下的用戶名 | | ``inet_client_addr()`` | `inet` | 連接的遠端地址 | | ``inet_client_port()`` | `int` | 連接的遠端端口 | | ``inet_server_addr()`` | `inet` | 連接的本地地址 | | ``inet_server_port()`` | `int` | 連接的本地端口 | | ``pg_backend_pid()`` | `int` | 連接到當前會話的服務器進程 ID | | ``pg_conf_load_time()`` | `timestamp with time zone` | 配置加載時間 | | ``pg_is_other_temp_schema(```oid`) | `boolean` | 是否為另一個會話的臨時模式? | | ``pg_listening_channels()`` | `setof text` | 正在偵聽的當前會話的信道名稱 | | ``pg_my_temp_schema()`` | `oid` | 會話的臨時模式的OID,不存在則為 0 | | ``pg_postmaster_start_time()`` | `timestamp with time zone` | 服務器啟動時間 | | ``pg_trigger_depth()`` | `int` | PostgreSQL 觸發器的當前嵌套級別 (如果沒有直接或間接的從一個觸發器內部調用,那么是0) | | ``session_user`` | `name` | 會話用戶名 | | ``user`` | `name` | 等價于 `current_user` | | ``version()`` | `text` | PostgreSQL 版本信息 | > **Note:** `current_catalog`, `current_schema`, `current_user`, `session_user`, 和`user`在SQL里有特殊的語法: 調用他們時結尾不能跟圓括號。(在 PostgreSQL,`current_schema` 可選的可以有括號,但是其它的不能。) `session_user`通常是連接當前數據庫的初始用戶, 不過超級用戶可以用[SET SESSION AUTHORIZATION](#calibre_link-508)修改這個設置。 `current_user`是用于權限檢查的用戶標識。通常,它總是等于會話用戶, 但是可以通過[SET ROLE](#calibre_link-21)改變它。 在函數執行的過程中隨著屬性`SECURITY DEFINER`的改變,其值也會改變。 用 Unix 術語來說,會話用戶是"真實用戶",而當前用戶是"有效用戶"。 `current_schema`返回在搜索路徑前端的模式名字(如果搜索路徑為空則返回 NULL)。 如果創建表或者其它命名對象時沒有聲明目標模式,那么它將是用于這些對象的模式。 `current_schemas(boolean)`返回一個搜索路徑中所有模式名字的數組。 布爾選項決定像`pg_catalog`這樣隱含包含的系統模式是否包含在返回的搜索路徑中。 > **Note:** 搜索路徑可以通過運行時設置更改。命令是: > > ``` > SET search_path TO _schema_ [, `_schema_`, ...] > ``` `pg_listening_channels`返回當前會話正在監聽的一組信道名稱。 見[LISTEN](#calibre_link-983)獲取更多信息。 `inet_client_addr`返回當前客戶端的IP地址, 而`inet_client_port`則返回當前客戶端的端口號。 `inet_server_addr`返回服務器接收當前連接用的 IP 地址, 而`inet_server_port`返回接收當前連接的端口號。 如果是通過 Unix-domain socket 連接的,那么所有這些函數都返回 NULL 。 `pg_my_temp_schema`返回當前會話的臨時模式 OID , 如果不存在的話則返回 0(因為沒有創建任何臨時表)。`pg_is_other_temp_schema` 返回給定的 OID 是否為其它會話的臨時模式 OID ,這個函數是有實用價值的, 比如,在顯示一個目錄的時候排除掉其它會話的臨時表。 `pg_postmaster_start_time`返回服務器啟動時的`timestamp with time zone`。 `pg_conf_load_time`返回最后加載服務器配置文件的時間戳。 (如果當前會話在那時還活動,將是當前會話本身重新讀取配置文件的時間, 所以讀取的時間會在不同的會話中稍微有所不同。否則, 它是postmaster進程重新讀取配置文件的時間。) `version`返回一個描述PostgreSQL服務器版本信息的字符串。 [Table 9-52](#calibre_link-1074)列出那些允許用戶在程序里查詢對象訪問權限的函數。 參閱[Section 5.6](#calibre_link-1319)獲取更多有關權限的信息。 **Table 9-52\. 訪問權限查詢函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``has_any_column_privilege`(``user`, `table`, `privilege`) | `boolean` | 指定用戶是否有訪問表任何列的權限 | | ``has_any_column_privilege`(``table`, `privilege`) | `boolean` | 當前用戶是否有訪問表任何列的權限 | | ``has_column_privilege`(``user`, `table`, `column`, `privilege`) | `boolean` | 指定用戶是否有訪問列的權限 | | ``has_column_privilege`(``table`, `column`, `privilege`) | `boolean` | 當前用戶是否有訪問列的權限 | | ``has_database_privilege`(``user`, `database`, `privilege`) | `boolean` | 指定用戶是否有訪問數據庫的權限 | | ``has_database_privilege`(``database`, `privilege`) | `boolean` | 當前用戶是否有訪問數據庫的權限 | | ``has_foreign_data_wrapper_privilege`(``user`, `fdw`, `privilege`) | `boolean` | 指定用戶是否有訪問外部數據封裝器的權限 | | ``has_foreign_data_wrapper_privilege`(``fdw`, `privilege`) | `boolean` | 當前用戶是否有訪問外部數據封裝器的權限 | | ``has_function_privilege`(``user`, `function`, `privilege`) | `boolean` | 指定用戶是否有訪問函數的權限 | | ``has_function_privilege`(``function`, `privilege`) | `boolean` | 當前用戶是否有訪問函數的權限 | | ``has_language_privilege`(``user`, `language`, `privilege`) | `boolean` | 指定用戶是否有訪問語言的權限 | | ``has_language_privilege`(``language`, `privilege`) | `boolean` | 當前用戶是否有訪問語言的權限 | | ``has_schema_privilege`(``user`, `schema`, `privilege`) | `boolean` | 指定用戶是否有訪問模式的權限 | | ``has_schema_privilege`(``schema`, `privilege`) | `boolean` | 當前用戶是否有訪問模式的權限 | | ``has_sequence_privilege`(``user`, `sequence`, `privilege`) | `boolean` | 指定用戶是否有訪問序列的權限 | | ``has_sequence_privilege`(``sequence`, `privilege`) | `boolean` | 當前用戶是否有訪問序列的權限 | | ``has_server_privilege`(``user`, `server`, `privilege`) | `boolean` | 指定用戶是否有訪問外部服務的權限 | | ``has_server_privilege`(``server`, `privilege`) | `boolean` | 當前用戶是否有訪問外部服務的權限 | | ``has_table_privilege`(``user`, `table`, `privilege`) | `boolean` | 指定用戶是否有訪問表的權限 | | ``has_table_privilege`(``table`, `privilege`) | `boolean` | 當前用戶是否有訪問表的權限 | | ``has_tablespace_privilege`(``user`, `tablespace`, `privilege`) | `boolean` | 指定用戶是否有訪問表空間的權限 | | ``has_tablespace_privilege`(``tablespace`, `privilege`) | `boolean` | 當前用戶是否有訪問表空間的權限 | | ``pg_has_role`(``user`, `role`, `privilege`) | `boolean` | 指定用戶是否有角色的權限 | | ``pg_has_role`(``role`, `privilege`) | `boolean` | 當前用戶是否有角色的權限 | `has_table_privilege`檢查用戶是否可以用特定的方式訪問表。 用戶可以通過名字或OID(pg_authid.oid)來指定,`public`表明PUBLIC偽角色, 或如果缺省該參數,則使用`current_user`。該表可以通過名字或者 OID 聲明。 因此,實際上有六種`has_table_privilege`變體, 我們可以通過它們的參數數目和類型來區分它們。如果用名字聲明,那么在必要時可以用模式進行修飾。 所希望的權限類型是用一個文本字符串來聲明的,必須是`SELECT`, `INSERT`, `UPDATE`, `DELETE`, `TRUNCATE`, `REFERENCES` 或`TRIGGER`之一。可選,可以添加`WITH GRANT OPTION`到權限類型, 以測試權限是否擁有授權選項。也可以用逗號分隔多個列出的權限類型,如果擁有任何所列出的權限, 則結果便為`true`。(權限字符串不區分大小寫, 權限名之間允許有額外空白但不屬于權限名的部分。)一些例子: ``` SELECT has_table_privilege('myschema.mytable', 'select'); SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION'); ``` `has_sequence_privilege`檢查用戶是否可以用特定的方式訪問序列。 參數可能與`has_table_privilege`類似。 想要的訪問權限必須為`USAGE`,`SELECT`或`UPDATE`之一。 `has_any_column_privilege`檢查用戶是否可以用特定的方式訪問表的任何列。 其參數可能與`has_table_privilege`類似,除了想要的權限類型必須是`SELECT`, `INSERT`,`UPDATE`,或`REFERENCES`的一些組合。 請注意,在表級別擁有任何這些權限隱含授予它為每個表列,因此如果與 `has_table_privilege` 參數相同,`has_any_column_privilege`總是返回`true`。 但是如果有至少一列的列級權限授予也成功。 `has_column_privilege`檢查用戶是否可以用特定的方式訪問一列。 其可能的參數類似于`has_table_privilege`, 可以通過列名或屬性數添加列。想要的訪問權限類型必須是`SELECT`, `INSERT`,`UPDATE`,或`REFERENCES`的一些組合。 請注意,在表級別擁有任何這些權限隱含授予它為每個表列。 `has_database_privilege`檢查一個用戶是否能以特定方式訪問一個數據庫。 它可能的參數類似`has_table_privilege`。權限類型必須是`CREATE`, `CONNECT`,`TEMPORARY`,`TEMP` (等價于`TEMPORARY`)的一些組合。 `has_function_privilege`檢查一個用戶是否能以特定方式訪問一個函數。 它可能的參數類似`has_table_privilege`。 我們聲明一個函數用的是文本字符串而不是 OID ,允許的輸入和`regprocedure` 數據類型一樣(參閱[Section 8.18](#calibre_link-1152))。權限類型必須是`EXECUTE`。 一個例子如下: ``` SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); ``` `has_foreign_data_wrapper_privilege` 檢查一個用戶是否能以特定的方式訪問外部數據封裝器。 它的可能的參數類似`has_table_privilege`。權限類型必須是`USAGE`。 `has_language_privilege`檢查一個用戶是否能以特定方式訪問一個過程語言。 它可能的參數類似`has_table_privilege`。權限類型必須是`USAGE`。 `has_schema_privilege`檢查一個用戶是否能以特定方式訪問一個模式。 它可能的參數類似`has_table_privilege`。權限類型必須是`CREATE` 或`USAGE`的一些組合。 `has_server_privilege`檢查一個用戶是否能以特定方式訪問一個外部服務器。 它可能的參數類似`has_table_privilege`。權限類型必須是`USAGE`。 `has_tablespace_privilege`檢查一個用戶是否能以特定方式訪問一個表空間。 它可能的參數類似`has_table_privilege`。權限類型必須是`CREATE`。 `pg_has_role`檢查一個用戶是否能以特定方式訪問一個角色。 它可能的參數類似`has_table_privilege`,除了`public` 不能用做用戶名。權限類型必須是`MEMBER`或`USAGE`的一些組合。 `MEMBER`表示的是角色中的直接或間接成員關系(也就是`SET ROLE` 的權限),而`USAGE`表示角色的權限是否無需`SET ROLE`即可立即生效。 [Table 9-53](#calibre_link-2242) 顯示了那些判斷一個對象是否在當前模式搜索路徑中_可見_的函數。 比如,如果一個表所在的模式在搜索路徑中,并且沒有同名的表出現在搜索路徑的更靠前的地方, 那么就說這個表是可見的。它等效于表可以不帶明確模式修飾進行引用。比如,要列出所有可見表的名字: ``` SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); ``` **Table 9-53\. 模式可見性查詢函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``pg_collation_is_visible(```collation_oid`) | `boolean` | 該排序是否在搜索路徑中可見 | | ``pg_conversion_is_visible(```conversion_oid`) | `boolean` | 該轉換是否在搜索路徑中可見 | | ``pg_function_is_visible(```function_oid`) | `boolean` | 該函數是否在搜索路徑中可見 | | ``pg_opclass_is_visible(```opclass_oid`) | `boolean` | 該操作符類是否在搜索路徑中可見 | | ``pg_operator_is_visible(```operator_oid`) | `boolean` | 該操作符是否在搜索路徑中可見 | | ``pg_opfamily_is_visible(```opclass_oid`) | `boolean` | 該操作符族是否在搜索路徑中可見 | | ``pg_table_is_visible(```table_oid`) | `boolean` | 該表是否在搜索路徑中可見 | | ``pg_ts_config_is_visible(```config_oid`) | `boolean` | 該文本檢索配置是否在搜索路徑中可見 | | ``pg_ts_dict_is_visible(```dict_oid`) | `boolean` | 該文本檢索詞典是否在搜索路徑中可見 | | ``pg_ts_parser_is_visible(```parser_oid`) | `boolean` | 該文本搜索解析是否在搜索路徑中可見 | | ``pg_ts_template_is_visible(```template_oid`) | `boolean` | 該文本檢索模板是否在搜索路徑中可見 | | ``pg_type_is_visible(```type_oid`) | `boolean` | 該類型(或域)是否在搜索路徑中可見 | 每個函數執行一種數據庫對象類型的可見性檢查。請注意`pg_table_is_visible` 還可用于視圖、索引、序列。`pg_type_is_visible`還可用于域。 對于函數和操作符,如果在搜索路徑中沒有名字相同并且_參數的數據類型_ 也相同的對象出現在路徑中更靠前的位置,那么該對象就是可見的。對于操作符類, 則要同時考慮名字和相關的索引訪問方法。 所有這些函數都需要使用 OID 來標識要被檢查的對象。如果你想通過名字測試對象, 那么使用 OID 別名類型(`regclass`, `regtype`, `regprocedure`, `regoperator`, `regconfig`或`regdictionary`)將會很方便。例如: ``` SELECT pg_type_is_visible('myschema.widget'::regtype); ``` 請注意用這種方法測試一個未經修飾的名字沒什么意義,因為如果一個名字可以被識別, 那它首先必須是可見的。 [Table 9-54](#calibre_link-2243)列出了從系統表中抽取信息的函數。 **Table 9-54\. 系統表信息函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``format_type(```type_oid`, `typemod`) | `text` | 獲取一個數據類型的 SQL 名稱 | | ``pg_describe_object(```catalog_id`, `object_id`, `object_sub_id`) | `text` | 獲取一個數據庫對象的描述 | | ``pg_identify_object(```catalog_id` `oid`, `object_id` `oid`, `object_sub_id` `integer`) | `type` `text`, `schema` `text`, `name` `text`, `identity` `text` | 獲取一個數據庫對象的身份 | | ``pg_get_constraintdef(```constraint_oid`) | `text` | 獲取一個約束的定義 | | ``pg_get_constraintdef(```constraint_oid`, `pretty_bool`) | `text` | 獲取一個約束的定義 | | ``pg_get_expr(```pg_node_tree`, `relation_oid`) | `text` | 反編譯一個表達式的內部形式,假設其中的任何 Var 都引用第二個參數指出的關系 | | ``pg_get_expr(```pg_node_tree`, `relation_oid`, `pretty_bool`) | `text` | 反編譯一個表達式的內部形式,假設其中的任何 Var 都引用第二個參數指出的關系 | | ``pg_get_functiondef(```func_oid`) | `text` | 獲取一個函數的定義 | | ``pg_get_function_arguments(```func_oid`) | `text` | 獲取函數定義的參數列表(帶默認值) | | ``pg_get_function_identity_arguments(```func_oid`) | `text` | 獲取參數列表來確定一個函數 (不帶默認值) | | ``pg_get_function_result(```func_oid`) | `text` | 獲取函數的`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關鍵字和類別列表 | | ``pg_get_ruledef(```rule_oid`) | `text` | 為規則獲取`CREATE RULE`命令 | | ``pg_get_ruledef(```rule_oid`, `pretty_bool`) | `text` | 為規則獲取`CREATE RULE`命令 | | ``pg_get_serial_sequence(```table_name`, `column_name`) | `text` | 獲取一個`serial`,`smallserial`或`bigserial`字段使用的序列名 | | `pg_get_triggerdef`(`trigger_oid`) | `text` | 為觸發器獲取`CREATE [ CONSTRAINT ] TRIGGER`命令 | | `pg_get_triggerdef`(`trigger_oid`, `pretty_bool`) | `text` | 為觸發器獲取`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`命令;行字段被換到指定的列數,打印是隱含的 | | ``pg_options_to_table(```reloptions`) | `setof record` | 獲取存儲選項名稱/值對的集合 | | ``pg_tablespace_databases(```tablespace_oid`) | `setof oid` | 獲取在指定的表空間有元素的數據庫 OID 集合 | | ``pg_tablespace_location(```tablespace_oid`) | `text` | 獲取表空間所在的文件系統的路徑 | | ``pg_typeof(```any`) | `regtype` | 獲取任何值的數據類型 | | ``collation for (```any`) | `text` | 獲取參數的排序 | `format_type`通過某個數據類型的類型 OID 以及可能的類型修飾詞返回其 SQL 名稱。 如果不知道具體的修飾詞,那么在類型修飾詞的位置傳入 NULL 。 `pg_get_keywords`返回一組記錄描述服務器識別的 SQL 關鍵字。 `word`列包含關鍵字。`catcode`列包含一個分類代碼: `U`通用的,`C`列名,`T`類型或函數名,或`R`保留。 `catdesc`列包含了一個可能本地化描述分類的字符串。 `pg_get_constraintdef`,`pg_get_indexdef`, `pg_get_ruledef`,和`pg_get_triggerdef` 分別從一個約束、索引、規則或觸發器上重新構造創建它們的命令(反編譯的重新構造, 而不是該命令的原文)。`pg_get_expr`反編譯一個獨立表達式的內部形式, 比如一個字段的缺省值。在檢查系統表的內容的時候很有用。如果表達式可能包含Var, 那么指定他們參考的關聯的OID為第二個參數;如果沒有Var,0就足夠了。 `pg_get_viewdef`重新構造出定義視圖的`SELECT`查詢。 這些函數大多數都有兩個變種,其中一個是"適合打印"的結果。這種格式更容易讀, 但是缺省的格式更有可能被將來的PostgreSQL版本用同樣的方法解釋; 如果是用于轉儲,那么盡可能避免使用適合打印的格式。給 pretty-print參數傳遞`false` 生成的結果和沒有這個參數的變種生成的結果是完全一樣。 `pg_get_functiondef`為函數返回一個完整的`CREATE OR REPLACE FUNCTION`語句。 `pg_get_function_arguments`返回一個函數的參數列表, 這種格式需要在`CREATE FUNCTION`中使用。`pg_get_function_result` 為函數簡單的返回適當的`RETURNS`子句。`pg_get_function_identity_arguments` 返回需要的參數列表以標識函數,這種格式需要在`ALTER FUNCTION`中使用。這種形式省略了默認值。 `pg_get_serial_sequence`返回與一個字段相關的序列名字; 如果沒有任何序列與給定的字段相關則返回 NULL 。第一個輸入參數是可選模式的表名, 第二個參數是列名。因為第一個參數可能是一個模式和表,它不是視為一個雙引號的標識符, 意味著默認情況下小寫,而第二個參數只是列名稱,被視為雙引號括起來的,并保留其大小寫。 這個名字經過了合適的格式化,可以傳遞給序列函數(參閱[Section 9.16](#calibre_link-700))。 這種相關性可以通過`ALTER SEQUENCE OWNED BY`修改或刪除。 (其實將這個函數命名為`pg_get_owned_sequence`或許更為妥當, 因為它的當前名字反映了它通常用于`serial`或`bigserial`字段的事實。) `pg_get_userbyid`通過角色的 OID 抽取對應的用戶名。 `pg_options_to_table`當通過`pg_class`.`reloptions` 或`pg_attribute`.`attoptions`時返回存儲選項名字/值對 (`option_name`/`option_value`)的集合。 `pg_tablespace_databases`允許檢查一個表空間的狀況, 它返回在該表空間中保存了對象的數據庫 OID 集合。如果這個函數返回數據行, 那么該表空間就是非空的,因此不能刪除。要顯示該表空間中的特定對象, 你需要把`pg_tablespace_databases` 返回的數據庫標識與 `pg_class`表連接進行查詢。 `pg_describe_object`返回由目錄OID,對象OID和一個(或許0個) 子對象ID指定的數據庫對象的描述。這個描述趨向于人類易讀,并且可能是經過翻譯的,取決于服務器的配置。 這有助于確定一個對象的標識存儲在`pg_depend`目錄中。 `pg_identify_object`返回一個包含足夠信息來唯一的標識由系統OID, 對象OID和一個(或許0個)子對象ID指定的數據庫對象的行。這個信息趨向于機器易讀,并且從不翻譯。 `type`標識數據庫對象的類型;`schema`是對象屬于的模式名,或 `NULL` 表明對象類型不屬于模式;`name` 是對象的名字,如果需要就加上雙引號, 只有在它可以用作對象的唯一標識符時使用(如果相關,跟隨模式名),否則為`NULL`; `identity`是完整的對象身份,根據對象類型有精確的格式,并且格式內的每個部分都是模式限定的, 必要時加雙引號。 `pg_typeof`返回傳遞給它的值的數據類型OID。 這可能有利于故障排除或動態構造SQL查詢。函數聲明返回OID別名類型的`regtype` (參閱[Section 8.18](#calibre_link-1152));這意味著它和比較目的的OID相同但顯示類型名稱。例如: ``` SELECT pg_typeof(33); pg_typeof ----------- integer (1 row) SELECT typlen FROM pg_type WHERE oid = pg_typeof(33); typlen -------- 4 (1 row) ``` 表達式`collation for`返回傳遞給它的值的排序。例如 ``` SELECT collation for (description) FROM pg_description LIMIT 1; pg_collation_for ------------------ "default" (1 row) SELECT collation for ('foo' COLLATE "de_DE"); pg_collation_for ------------------ "de_DE" (1 row) ``` 值可能是引號括起來的并且模式限制的。如果沒有為參數表達式排序,那么返回一個null值。 如果參數不是排序的類型,那么拋出一個錯誤。 [Table 9-55](#calibre_link-1613)顯示的函數將原來用[COMMENT](#calibre_link-690) 命令存儲的評注抽取出來。如果沒有找到,則返回 NULL 。 **Table 9-55\. 注釋信息函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``col_description(```table_oid`, `column_number`) | `text` | 獲取一個表字段的評注 | | ``obj_description(```object_oid`, `catalog_name`) | `text` | 獲取一個數據庫對象的評注 | | ``obj_description(```object_oid`) | `text` | 獲取一個數據庫對象的評注(_已廢棄_) | | ``shobj_description(```object_oid`, `catalog_name`) | `text` | 獲取一個共享數據庫對象的評注 | `col_description`返回一個表中字段的評注,它是通過表 OID 和字段號來聲明的。 `obj_description`不能用于表字段,因為字段沒有自己的 OID 。 帶有兩個參數的`obj_description`返回一個數據庫對象的評注, 該對象是通過其 OID 和其所屬的系統表名字聲明的。比如,`obj_description(123456,'pg_class')` 將返回 OID 為 12345 的表的評注。只帶一個參數的`obj_description` 只要求對象 OID ,現在已經廢棄了,因為我們不再保證 OID 在不同的系統表之間是唯一的, 因此可能會返回錯誤的評注。 `shobj_description`和`obj_description`差不多, 不同之處僅在于前者用于共享對象。一些系統表是通用于集群中所有數據庫的全局表, 因此這些表的評注也是全局存儲的。 [Table 9-56](#calibre_link-2244)顯示的函數在一個輸出形式中提供服務器事務信息。 這些函數的主要用途是為了確定在兩個快照之間有哪個事務提交。 **Table 9-56\. 事務ID和快照** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``txid_current()`` | `bigint` | 獲取當前事務 ID | | ``txid_current_snapshot()`` | `txid_snapshot` | 獲取當前快照 | | ``txid_snapshot_xip(```txid_snapshot`) | `setof bigint` | 獲取在快照中進行中的事務ID | | ``txid_snapshot_xmax(```txid_snapshot`) | `bigint` | 獲取快照的 `xmax` | | ``txid_snapshot_xmin(```txid_snapshot`) | `bigint` | 獲取快照的`xmin` | | ``txid_visible_in_snapshot(```bigint`, `txid_snapshot`) | `boolean` | 在快照中事務ID是否可見?(不使用子事務ID) | 內部事務 ID 類型(`xid`)是32位,每40億事務循環。然而這些函數導出一個64位格式, 是使用一個"epoch"計數器擴展,所以在安裝過程中不會循環。 這些函數使用的數據類型`txid_snapshot`,存儲在某時刻事物ID可見性的信息。 其組件描述在[Table 9-57](#calibre_link-2245)。 **Table 9-57\. 快照組件** | 名字 | 描述 | | --- | --- | | `xmin` | 最早的事務ID(txid)仍然活動。所有較早事務將是可見提交了,或者要么死掉回滾了。 | | `xmax` | 首先作為尚未分配的txid。所有大于或等于此的txids作為這時的快照都是尚未開始的,因此不可見。 | | `xip_list` | 在當前快照活動的txids。這個列表只包含在`xmin`和`xmax` 之間的活動txids;有可能活動的txids高于`xmax`。 一個`xmin &lt;= txid &lt; xmax`,并且不在這個列表中的txid, 是在快照的這個時間已經完成的,因此要么可見或死掉對應它的提交狀態。 這個列表不包含子事務的txids。 | `txid_snapshot`的文本表示為:`_xmin_`:`_xmax_`:`_xip_list_`。 例如`10:20:10,14,15`意思為:`xmin=10, xmax=20, xip_list=10, 14, 15`。
                  <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>

                              哎呀哎呀视频在线观看