此条目涉及 PostgreSQL 的一项功能,该功能是 PostgreSQL 17 的一部分,预计将于 2024 年底发布。
to_regtypemod()
是一个用于从数据类型中提取修饰符的系统函数,例如 char
或 varchar
类型的长度。
to_regtypemod()
在 PostgreSQL 17 中添加。
用法
to_regtypemod (text
) →integer
返回值是修饰符的内部表示形式,可以与 format_type()
一起传递,以及来自 to_regtype()
的输出,以生成数据类型的人类可读名称。
如果不存在修饰符,则返回 -1
。
如果提供的数据类型定义不存在但语法有效,则返回 NULL
。
如果提供的数据类型语法无效,则引发 ERROR
。
变更历史
- PostgreSQL 17
- 添加 (提交 1218ca99)
示例
to_regtypemod()
的基本用法示例
postgres=# SELECT to_regtypemod('varchar(32)'); to_regtypemod --------------- 36 (1 row)
使用 format_type()
的人为示例
postgres=# WITH datatype AS ( SELECT 'numeric( 3, 2 )' AS type ) SELECT format_type( to_regtype(d.type), to_regtypemod(d.type) ) FROM datatype d; format_type -------------- numeric(3,2) (1 row)
如果不存在修饰符,则返回 -1
postgres=# SELECT to_regtypemod('smallint'); to_regtypemod --------------- -1 (1 row)
如果提供的值在语法上有效但未表示数据类型,则返回 NULL
postgres=# SELECT to_regtypemod('varchar2(255)') IS NULL; ?column? ---------- t (1 row)
语法错误将导致引发 ERROR
postgres=# SELECT to_regtypemod('!') IS NULL; ERROR: syntax error at or near "!" LINE 1: SELECT to_regtypemod('!') IS NULL; ^ CONTEXT: invalid type name "!"
参考
- PostgreSQL 17 文档: 系统目录信息函数