如何瀏覽 PostgreSQL 文件以查找適用於特定類型的所有函式的列表?
假設我想找到一個可以使用的功能列表,
jsonb
不使用Google從終端執行此操作的最有效方法是什麼?假設只能訪問
- 手冊頁
- psql
- PostgreSQL 表
有幾種方法,但讓我們嘗試解決所有這三種方法。
手冊頁
沒有任何
man
頁面可以解決這些問題。有很多 PostgreSQL 文件,但目前沒有類似的文件,也沒有perldoc
針對 PostgreSQL 的文件。涵蓋此內容的文檔僅作為 HTML 分發——您仍然可以使用終端瀏覽器(如 elinks、lynx、w3m 等)查看這些文件。大多數發行版都單獨打包,在 Ubuntu 中你會這樣做。sudo apt-get install postgresql-doc elinks /usr/share/doc/postgres*/html/index.html
psql
要為此使用 PSQL,您需要使用
\dfS
. 您可以看到所有 psql 命令的列表\?
。完成後,\dfS
只需搜尋類型。如果\dfS
使用在終端寬度上換行的查看器,您可以通過使用 `\setenv 設置來告訴它不要換行,大多數尋呼機通過其環境變數接受參數,因此要使用 LESS 而無需換行,您可以使用\setenv PAGER less \setenv LESS -S
這一切都埋在了
man page
for 中psql
。在該手冊頁中也可以更好地解釋 in-shell psql 幫助的大部分輸出\?
,例如,這就是\?
顯示的內容\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions
而且,這
man psql
表明,列出函式及其參數、返回類型和函式類型,它們被分類為“agg”(聚合)、“normal”、“trigger”或“window”。要僅顯示特定類型的函式,請將相應的字母 a、n、t 或 w 添加到命令中。如果指定了模式,則僅顯示名稱與模式匹配的函式。預設情況下,僅顯示使用者創建的對象;提供模式或 S 修飾符以包含系統對象。如果使用 \df+ 形式,則會顯示有關每個函式的附加資訊,包括安全分類、易失性、所有者、語言、原始碼和描述。
提示 要查找接受參數或返回特定類型值的函式,請使用尋呼機的搜尋功能滾動瀏覽 \df 輸出。
PostgreSQL 目錄
首先,您需要了解要查詢的內容。這就是複雜的聚會。在上面,我們知道我們正在使用
\dfS
,所以我們可以這樣得到一個起點psql
:psql -E -c"\dfS" -d myDB | less -S
這將從查詢開始,
********* QUERY ********** SELECT n.nspname as "Schema", p.proname as "Name", pg_catalog.pg_get_function_result(p.oid) as "Result data type", pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types", CASE WHEN p.proisagg THEN 'agg' WHEN p.proiswindow THEN 'window' WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger' ELSE 'normal' END as "Type" FROM pg_catalog.pg_proc p LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE pg_catalog.pg_function_is_visible(p.oid) ORDER BY 1, 2, 4; **************************
現在,我們現在
p.proname as "Name"
,pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types"
我們可以把它們放在一起,得到一個簡化的版本\dfS
,顯示你想要的,SELECT p.proname AS "Name", pg_get_function_arguments(p.oid) AS "Argument data types" FROM pg_proc AS p WHERE pg_get_function_arguments(p.oid) like '%jsonb%';
對pg_proc進行更多研究,我們可以看到
proargtypes - oidvector - pg_type.oid - 具有函式參數數據類型的數組。這僅包括輸入參數(包括 INOUT 和 VARIADIC 參數),因此表示函式的呼叫簽名。
這將允許我們做一個非常具體的
pg_type
查詢oid
SELECT proname AS "Name" FROM pg_proc INNER JOIN pg_type ON ( pg_type.oid = ANY(proargtypes) ) WHERE typname = 'jsonb';
而且,這正是我們想要的。
資訊模式
雖然這裡可能不適用,但一般來說,您可以在
information_schema
. 這個通用介面不支持一切,速度很慢,而且 psql 內部不使用它。我根本沒有看到這些資訊information_schema.routines
。這個答案中的一些無恥地受到了這個問題的啟發,但旨在成為一個更友好的資源。