Список хранимых функций, которые ссылаются на таблицу в PostgreSQL

Просто быстрый и простой вопрос: в PostgreSQL, как вы перечисляете имена всех хранимых функций/хранимых процедур, используя таблицу, используя только инструкцию SELECT, если это возможно? Если простой SELECT недостаточно, я могу обойтись с сохраненной функцией.

Мой вопрос, я думаю, несколько похож на этот другой вопрос, но этот другой вопрос касается SQL Server 2005:
Список хранимой процедуры из таблицы

(необязательно) В этом случае, как вы также указываете триггеры и ограничения, которые используют одну и ту же таблицу таким же образом?

Ответ 1

SELECT  p.proname
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      p.pronamespace = n.oid
WHERE   n.nspname = 'public'

Ответ 2

SELECT  proname, prosrc
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'public';

Ответ 3

Если вы используете psql, попробуйте \df

На странице man:

Tip
To look up functions taking arguments or returning values of a specific type, use your pager search capability to scroll through the \df output.

Запуск \set ECHO_HIDDEN покажет, что \df работает за кулисами.

Ответ 4

То же, что @quassnoi и @davidwhthomas, за исключением того, что я добавил там имена аргументов:

SELECT  proname, proargnames, prosrc 
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'public';

Если целью перечисления функций является очистка их или повторение новой функции с изменением списка параметров, вам часто придется отказаться от функций:

DROP FUNCTION <name>(<args>);

Добавляя проаргаменты, я могу построить применимое имя функции для drop.

Кроме того, приятно видеть более полную картину при оценке функций.

Ответ 5

Вы можете использовать стандартную схему information_schema для получения метаданных о своей базе данных (это в стандарте SQL, поэтому она должна работать одинаково в разных системах баз данных). В этом случае вы хотите information_schema.routines.

Ответ 6

Исключение системного файла:

select proname from pg_proc where proowner <> 1;