Тіло функції просто зберігається як рядок . Немає списку посилаються об’єктів. (Це відрізняється від представлень, наприклад, де зберігаються фактичні посилання на посилання на таблиці.)
Цей запит для Postgres 10 або старіших версій використовує інформацію про системний каталогpg_get_functiondef() для реконструкції CREATE FUNCTIONскрипту для відповідних функцій та здійснює пошук назви таблиці з регулярним виразом, нечутливим до регістру:
SELECT n.nspname AS schema_name
, p.proname AS function_name
, pg_get_function_arguments(p.oid) AS args
, pg_get_functiondef(p.oid) AS func_def
FROM pg_proc p
JOIN pg_namespace n ON n.oid = p.pronamespace
WHERE NOT p.proisagg
AND n.nspname NOT LIKE 'pg_%'
AND n.nspname <> 'information_schema'
AND pg_get_functiondef(p.oid) ~* '\mbig\M';
Він повинен зробити цю роботу, але це, очевидно, не є кулезахисним. Він може не працювати в динамічному SQL, де ім'я таблиці генерується динамічно, і він може повернути будь-яку кількість помилкових позитивів, особливо якщо ім'я таблиці є загальним словом.
Функції сукупності та всі функції із системних схем виключаються.
\mі\M позначте початок і кінець слова в регулярному виразі.
Системний каталог pg_procзмінено у Postgres 11. proisaggбуло замінено на prokindсправжні збережені процедури. Вам потрібно адаптуватися. Пов'язані:
EXECUTEвиразів на зразок'mm_'||name_parameter, і він не справляється правильно з цитованими іменами на кшталт"my""table""або зі складанням регістру, але це зробить більшість того, що хоче більшість людей .