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 文档: 其他字符串函数