parse_ident()

用于将限定对象名称分割成数组的函数

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() 解析例如函数定义。

变更历史

示例

基本用法

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)

分类

模式(命名空间), 字符串操作, 系统函数

另请参阅

quote_ident()

反馈

对于“parse_ident()”,提交任何评论、建议或更正请点击 这里