Postgresql
預設允許的數據類型轉換矩陣
今天我想定義一個 uuid 的 value
00000000-0000-0000-0000-000000000000
。作為一名 SQL Server 人員,我通常會…select cast(0x0 as uniqueidentifier);
…但我現在在 postgres 世界裡,所以我拿出了一個明智的…
select cast('\x00'::bytea as uuid);
ERROR: cannot cast type bytea to uuid LINE 1: select cast('\x00'::bytea as uuid); ^
該死!因此,我前往有關類型轉換的 postgres 文件,希望看到像這樣的文件來查看預設情況下我可以在哪些數據類型之間進行轉換,而無需創建顯式轉換。
如果文件中確實存在這樣的圖表,則它被很好地隱藏了。Google在這方面同樣不是很有幫助。
對於 postgresql 中的預設允許類型轉換,是否有很好的文件參考?
需要明確的是,我實際上並不關心 uuid
您可以使用
psql
客戶端獲取列表\dCS
這將顯示系統數據類型之間定義的所有轉換。
此外,所有類型都可以
text
使用類型輸入和輸出函式進行轉換。
作為對Laurenz 文章的補充…
從文件:
\dC[+] [ pattern ]
列出類型轉換。如果指定了模式,則僅列出源或目標類型與模式匹配的強制轉換。如果 + 附加到命令名稱,則列出每個對象及其相關描述。
\set ECHO_HIDDEN on
顯示\dCS+
正在執行…SELECT pg_catalog.format_type(castsource, NULL) AS "Source type", pg_catalog.format_type(casttarget, NULL) AS "Target type", CASE WHEN c.castmethod = 'b' THEN '(binary coercible)' WHEN c.castmethod = 'i' THEN '(with inout)' ELSE p.proname END AS "Function", CASE WHEN c.castcontext = 'e' THEN 'no' WHEN c.castcontext = 'a' THEN 'in assignment' ELSE 'yes' END AS "Implicit?", d.description AS "Description" FROM pg_catalog.pg_cast c LEFT JOIN pg_catalog.pg_proc p ON c.castfunc = p.oid LEFT JOIN pg_catalog.pg_type ts ON c.castsource = ts.oid LEFT JOIN pg_catalog.pg_namespace ns ON ns.oid = ts.typnamespace LEFT JOIN pg_catalog.pg_type tt ON c.casttarget = tt.oid LEFT JOIN pg_catalog.pg_namespace nt ON nt.oid = tt.typnamespace LEFT JOIN pg_catalog.pg_description d ON d.classoid = c.tableoid AND d.objoid = c.oid AND d.objsubid = 0 WHERE ( (true AND pg_catalog.pg_type_is_visible(ts.oid) ) OR (true AND pg_catalog.pg_type_is_visible(tt.oid) ) ) ORDER BY 1, 2;
…這為我們指出了一些更有趣的文件頁面。
pg_cast
- 列出允許強制轉換的基本系統表pg_type
- 數據類型的基本系統表參考format_type()
- 美化功能pg_type
。有助於將專有名稱映射到在數據類型參考表中看到的別名