Список сохраненных функций, которые ссылаются на таблицу в PostgreSQL - PullRequest
69 голосов
/ 13 октября 2009

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

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

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

Ответы [ 8 ]

94 голосов
/ 13 октября 2009
SELECT  p.proname
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      p.pronamespace = n.oid
WHERE   n.nspname = 'public';
16 голосов
/ 15 апреля 2010
SELECT  proname, prosrc
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'public';
13 голосов
/ 22 октября 2014

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

со страницы руководства:

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

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

9 голосов
/ 29 января 2013

То же, что и @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>);

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

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

5 голосов
/ 13 октября 2009

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

4 голосов
/ 13 октября 2009

Взгляните на мой рецепт . Он читает функции и триггеры. Он основан на информации из: Извлечение информации META из PostgreSQL (INFORMATION_SCHEMA)

4 голосов
/ 13 октября 2009

Без учета системных компонентов:

select proname from pg_proc where proowner <> 1;
0 голосов
/ 28 июня 2016

Для получения типов аргументов функций, которые требуются при обращении к функции в ALTER - использование oldevectortypes хорошо сработало.

См. Как получить список всех функций, хранящихся в базе данных конкретной схемы в PostgreSQL?

...