to_regtypemod() 是一个系统函数,用于从数据类型中提取修饰符,例如 char 或 varchar 类型的长度。
to_regtypemod() 在 PostgreSQL 17 中添加。
用法
to_regtypemod (text) →integer
返回的值是修饰符的内部表示,可以与 to_regtype() 的输出一起传递给 format_type(),以生成数据类型的可读名称。
如果不存在修饰符,则返回 -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 文档: 系统目录信息函数
