Pet*_*ier 6 postgresql datatypes documentation type-conversion
今天我想定义一个 uuid 的 value 00000000-0000-0000-0000-000000000000
。作为一名 SQL Server 人员,我通常会...
select cast(0x0 as uniqueidentifier);
Run Code Online (Sandbox Code Playgroud)
...但我现在在 postgres 世界中,所以我提出了一个明智的...
select cast('\x00'::bytea as uuid);
Run Code Online (Sandbox Code Playgroud)
ERROR: cannot cast type bytea to uuid
LINE 1: select cast('\x00'::bytea as uuid);
^
Run Code Online (Sandbox Code Playgroud)
该死!所以我头部到对类型转换的Postgres文档希望看到像DOC这一个来审查,数据类型,我可以通过与默认情况下,无需施展创造一个显式类型转换。
如果文档中确实存在这样的图表,那么它就会被很好地隐藏起来。谷歌在这方面也不是很有帮助。
是否有关于 postgresql 中默认允许的类型转换的良好文档参考?
需要明确的是,我实际上并不关心 uuid
Lau*_*lbe 11
您可以使用psql
客户端获取列表
\dCS
Run Code Online (Sandbox Code Playgroud)
这将显示系统数据类型之间定义的所有强制转换。
此外,所有类型都可以text
使用类型输入和输出函数进行转换。
Pet*_*ier 10
作为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;
Run Code Online (Sandbox Code Playgroud)
...这为我们提供了一些更有趣的文档页面。
pg_cast
- 列出允许的强制转换的基本系统表pg_type
- 数据类型的基本系统表参考format_type()
- 的美化功能pg_type
。有助于将专有名称映射到别名,如数据类型引用表中所见