支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不再支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

51.39. pg_proc #

目錄 pg_proc 儲存關於函數、程序、聚合函數和視窗函數(統稱為常式)的資訊。 有關詳細資訊,請參閱 CREATE FUNCTIONCREATE PROCEDURE第 36.3 節

如果 prokind 指出該條目是聚合函數的,則應在 pg_aggregate 中存在匹配的列。

表格 51.39. pg_proc 欄位

欄位名稱

描述

oid oid

列識別碼

proname name

函數名稱

pronamespace oid (參考 pg_namespace.oid)

包含此函數的命名空間的 OID

proowner oid (參考 pg_authid.oid)

函數的所有者

prolang oid (參考 pg_language.oid)

此函數的實作語言或呼叫介面

procost float4

估計的執行成本(以 cpu_operator_cost 為單位);如果 proretset,這是每傳回一列的成本

prorows float4

估計的結果列數(如果不是 proretset,則為零)

provariadic oid (參考 pg_type.oid)

可變參數陣列參數的元素資料類型,如果函數沒有可變參數,則為零

prosupport regproc (參考 pg_proc.oid)

此函數的規劃器支援函數(請參閱 第 36.11 節),如果沒有,則為零

prokind char

對於普通函數為 f,對於程序為 p,對於聚合函數為 a,對於視窗函數為 w

prosecdef bool

函數是安全性定義者(即 setuid 函數)

proleakproof bool

函數沒有副作用。除了透過傳回值外,不會傳達關於引數的任何資訊。任何可能根據其引數的值拋出錯誤的函數都不是防洩漏的。

proisstrict bool

如果任何呼叫引數為 null,則函數傳回 null。在這種情況下,實際上根本不會呼叫該函數。非 strict 的函數必須準備好處理 null 輸入。

proretset bool

函數傳回一個集合(即,指定資料類型的多個值)

provolatile char

provolatile 用於指示函數的結果是否僅取決於其輸入參數,還是會受到外部因素的影響。對於 immutable(不可變) 函數,此值為 i,這類函數對於相同的輸入總是產生相同的結果。對於 stable(穩定) 函數,此值為 s,這類函數的結果(對於固定的輸入)在掃描過程中不會改變。對於 volatile(易變) 函數,此值為 v,這類函數的結果可能隨時改變。(對於具有副作用的函數,也請使用 v,這樣對它們的呼叫才不會被最佳化掉。)

proparallel char

proparallel 用於指示函數是否可以在平行模式下安全執行。對於可以在平行模式下安全執行的函數,此值為 s,沒有限制。對於可以在平行模式下執行,但其執行僅限於平行群組領導者的函數,此值為 r;平行工作進程無法呼叫這些函數。對於在平行模式下不安全的函數,此值為 u;此類函數的存在會強制執行序列執行計畫。

pronargs int2

輸入參數的數量

pronargdefaults int2

具有預設值的參數數量

prorettype oid (參考 pg_type.oid)

傳回值的資料類型

proargtypes oidvector (參考 pg_type.oid)

函數參數的資料類型陣列。這僅包含輸入參數(包括 INOUTVARIADIC 參數),因此表示函數的呼叫簽章。

proallargtypes oid[] (參考 pg_type.oid)

函數參數的資料類型陣列。這包含所有參數(包括 OUTINOUT 參數);但是,如果所有參數都是 IN 參數,則此欄位將為 null。請注意,下標從 1 開始,而由於歷史原因,proargtypes 的下標從 0 開始。

proargmodes char[]

函數參數模式的陣列,編碼為 i 表示 IN 參數,o 表示 OUT 參數,b 表示 INOUT 參數,v 表示 VARIADIC 參數,t 表示 TABLE 參數。如果所有參數都是 IN 參數,則此欄位將為 null。請注意,下標對應於 proallargtypes 的位置,而不是 proargtypes

proargnames text[]

函數參數名稱的陣列。沒有名稱的參數在陣列中設定為空字串。如果沒有任何參數具有名稱,則此欄位將為 null。請注意,下標對應於 proallargtypes 的位置,而不是 proargtypes

proargdefaults pg_node_tree

預設值的表達式樹(以 nodeToString() 表示)。這是一個包含 pronargdefaults 個元素的清單,對應於最後 N輸入參數(即,最後 Nproargtypes 位置)。如果沒有任何參數具有預設值,則此欄位將為 null。

protrftypes oid[] (參考 pg_type.oid)

要套用轉換的引數/結果資料類型陣列(來自函數的 TRANSFORM 子句)。如果沒有則為 Null。

prosrc text

這告訴函數處理常式如何呼叫函數。它可能是直譯語言函數的實際原始碼、連結符號、檔案名稱,或幾乎任何其他東西,具體取決於實作語言/呼叫慣例。

probin text

關於如何呼叫函數的額外資訊。同樣,解釋取決於語言。

prosqlbody pg_node_tree

預先解析的 SQL 函數主體。當函數主體以 SQL 標準表示法(而不是字串文字)給出時,這用於 SQL 語言函數。在其他情況下,它為 null。

proconfig text[]

函數的執行時期配置變數的本地設定

proacl aclitem[]

存取權限;有關詳細資訊,請參閱 Section 5.8


對於編譯後的函數,包括內建函數和動態載入函數,prosrc 包含函數的 C 語言名稱(連結符號)。對於 SQL 語言函數,如果指定為字串文字,則 prosrc 包含函數的原始碼文本;但是,如果函數主體以 SQL 標準樣式指定,則 prosrc 未使用(通常為空字串),並且 prosqlbody 包含預先解析的定義。對於所有其他目前已知的語言類型,prosrc 包含函數的原始碼文本。probin 除了動態載入的 C 函數之外,都為 null,對於動態載入的 C 函數,它給出了包含函數的共享庫檔案的名稱。

提交更正

如果您在文件中發現任何不正確、與特定功能的使用體驗不符或需要進一步澄清的地方,請使用此表單來回報文件問題。