Как проверить, имеет ли функция ввода в pg_pro c псевдотип? - PullRequest
0 голосов
/ 20 марта 2020

Итак, я понимаю, что могу запросить таблицу PostgreSQL pg_pro c, чтобы увидеть тип ввода зарегистрированной функции. Примерно так:

SELECT proname, pg_get_function_arguments(oid)
FROM pg_proc

Ну, функция может иметь тип «псевдотипа», например any или void. Как я могу проверить, является ли тип одним из этих типов?

1 Ответ

0 голосов
/ 20 марта 2020

Вы можете попробовать регулярные выражения в тексте, возвращаемом функцией:

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=# 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...