parse_ident() 是一个系统函数,用于将限定对象名称分割成数组。
parse_ident() 在 PostgreSQL 9.6 中被添加。
用法
parse_ident ( qualified_identifier text [, strict_mode boolean DEFAULT true ] ) → text[]
parse_ident() 接收一个限定的对象标识符(例如,由模式名限定的表名,如 foo.bar),并返回一个包含每个单独标识符的数组,同时移除任何引用。
请注意,除了检查对象名称中无效的字符之外,parse_ident() 不会验证标识符。可以通过将 strict_mode 设置为 FALSE 来覆盖此行为,这将允许 parse_ident() 解析例如函数定义。
变更历史
- PostgreSQL 9.6
- 添加于(提交 3187d6de)
示例
基本用法
postgres=# SELECT parse_ident('foo.bar');
parse_ident
-------------
{foo,bar}
(1 row)
带部分引用的标识符的用法
postgres=# SELECT parse_ident('"Foo".bar');
parse_ident
-------------
{Foo,bar}
(1 row)
带无效标识符的用法
postgres=# SELECT parse_ident('foo.bar!');
ERROR: string is not a valid identifier: "foo.bar!"
带函数名的用法
postgres=# SELECT parse_ident('foo.bar()', FALSE);
parse_ident
-------------
{foo,bar}
(1 row)
请注意,将 strict_mode 设置为 FALSE(如上一个函数名所示)只是从遇到无效字符的那一点开始忽略它们。
postgres=# SELECT parse_ident('foo.bar!!!', FALSE);
parse_ident
-------------
{foo,bar}
(1 row)
postgres=# SELECT parse_ident('foo!.bar!', FALSE);
parse_ident
-------------
{foo}
(1 row)
提供比限定标识符允许的更多的元素不会引发错误。
postgres=# SELECT parse_ident('foo.bar."Baz".boo.zoo');
parse_ident
-----------------------
{foo,bar,Baz,boo,zoo}
(1 row)
接受比 NAMEDATALEN 更长的标识符。
postgres=# SELECT parse_ident('foo.a2345678901234567890123456789012345678901234567890123456789012345');
parse_ident
-------------------------------------------------------------------------
{foo,a2345678901234567890123456789012345678901234567890123456789012345}
(1 row)
可以通过将结果数组强制转换为 NAME[] 来截断这些标识符。
postgres=# SELECT parse_ident('foo.a2345678901234567890123456789012345678901234567890123456789012345')::NAME[];
parse_ident
-----------------------------------------------------------------------
{foo,a23456789012345678901234567890123456789012345678901234567890123}
(1 row)
参考资料
- PostgreSQL 文档: 其他字符串函数
