0

所以我知道我可以查询 PostgreSQL pg_proc 表来查看注册函数的输入类型。像这样的东西:

SELECT proname, pg_get_function_arguments(oid)
FROM pg_proc

好吧,一个函数可以有一种“伪类型”,例如 any 或 void。如何检查该类型是否是这些类型之一?

4

1 回答 1

0

您可以在函数返回的文本中尝试正则表达式:

postgres=# select proname, pg_get_function_arguments(oid) 
           from pg_proc 
           where pg_get_function_arguments(oid) similar to '%void%|%"any"%';

           proname            |       pg_get_function_arguments        
------------------------------+----------------------------------------
 num_nulls                    | VARIADIC "any"
 num_nonnulls                 | VARIADIC "any"
 int8inc_any                  | bigint, "any"
 int8dec_any                  | bigint, "any"
 pg_typeof                    | "any"
 pg_collation_for             | "any"
 concat                       | VARIADIC "any"
 concat_ws                    | text, VARIADIC "any"
 format                       | text, VARIADIC "any"
 count                        | "any"
 pg_column_size               | "any"
 any_out                      | "any"
 void_out                     | void
 void_send                    | void
 json_object_agg_transfn      | internal, "any", "any"
 json_object_agg              | "any", "any"
 json_build_array             | VARIADIC "any"
 json_build_object            | VARIADIC "any"
 jsonb_object_agg_transfn     | internal, "any", "any"
 jsonb_object_agg             | "any", "any"
 jsonb_build_array            | VARIADIC "any"
 jsonb_build_object           | VARIADIC "any"
 ordered_set_transition       | internal, "any"
 ordered_set_transition_multi | internal, VARIADIC "any"
 rank                         | VARIADIC "any" ORDER BY VARIADIC "any"
 rank_final                   | internal, VARIADIC "any"
 percent_rank                 | VARIADIC "any" ORDER BY VARIADIC "any"
 percent_rank_final           | internal, VARIADIC "any"
 cume_dist                    | VARIADIC "any" ORDER BY VARIADIC "any"
 cume_dist_final              | internal, VARIADIC "any"
 dense_rank                   | VARIADIC "any" ORDER BY VARIADIC "any"
 dense_rank_final             | internal, VARIADIC "any"
 satisfies_hash_partition     | oid, integer, integer, VARIADIC "any"
(33 rows)

postgres=# 
于 2020-03-20T19:06:37.897 回答