PostgreSQL集合返回函数完整列表查询及升级问题咨询
如何找到PostgreSQL的集合返回函数列表
从系统表查询权威列表
information_schema.routines确实没有直接标识集合返回函数的字段,你需要查询PostgreSQL的底层系统表pg_proc,其中proretset字段专门标记函数是否返回集合(true表示是集合返回函数)。
如果要查询所有内置集合返回函数(即pg_catalog命名空间下的函数),可以用以下SQL:
SELECT proname AS function_name, pg_get_function_arguments(oid) AS arguments, pg_get_function_result(oid) AS return_type FROM pg_proc WHERE proretset = true AND pronamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'pg_catalog') ORDER BY proname;
如果要查询所有自定义+内置的集合返回函数,去掉AND pronamespace = ...这一行即可。
官方文档中的列表
PostgreSQL官方文档里有专门的集合返回函数章节,位置在「函数和操作符」大章节下的「集合返回函数(Set-Returning Functions)」小节。这个小节会按类别(比如数组、JSON、序列生成等)列出所有内置的集合返回函数,包含你提到的jsonb_object_keys、json_array_elements_text,还有常用的unnest、generate_series等。
关于CASE表达式的问题补充
你遇到的PG10+限制集合返回函数在CASE中使用的问题,是因为旧版本的行为存在语义歧义,官方在升级时做了破坏性修正。现在需要用LATERAL子查询来替代这种写法,比如将原本在CASE中的集合返回逻辑移到FROM子句的LATERAL关联里。
内容的提问来源于stack exchange,提问作者James Webster
相关产品推荐
相关产品推荐

