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

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

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

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

13.10.2009 08:54:54
klin 13.07.2015 07:45:14
8 ОТВЕТОВ

Исключая системные вещи:

select proname from pg_proc where proowner <> 1;
4
13.10.2009 08:59:43
Почему <> 1? На моей установке Postgresql системные процедуры имеют владельца 10, а не 1.
bortzmeyer 13.10.2009 19:43:09
Я этого не знал. Решение, конечно, состоит в том, чтобы изменить «1» соответственно.
windyjonas 14.10.2009 06:59:32
SELECT  p.proname
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      p.pronamespace = n.oid
WHERE   n.nspname = 'public';
98
28.09.2018 08:09:41
Как отметил в своем ответе Лукаш Лалинский, PostgreSQL поддерживает стандартные information_schema.routines- полезные для всего, что любит стандартные вещи.
Piotr Findeisen 17.10.2014 15:18:16
пропущена точка с запятой;)
knutole 14.07.2015 10:55:09

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

5
13.10.2009 09:09:09
Полезно, но на самом деле не отвечает на вопрос.
Jonathan Allen 21.07.2016 06:30:02

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

4
13.07.2015 04:57:05
Спасибо, это сработало. В сочетании с SELECT pg_catalog.pg_get_functiondef ('functionName' :: regproc) вы также можете получить операторы create.
Wulfhart 19.12.2012 19:15:17
Ссылка «Извлечение МЕТА ...» была тем, что сработало для меня, я до сих пор не видел ссылку «рецепт».
Wulfhart 19.12.2012 19:19:07
Вторая ссылка мертва. :-( Пожалуйста, включите содержание первой ссылки в этот ответ, чтобы мы не остались в неведении, когда тот умрет. Спасибо.
Toby Speight 1.07.2015 16:15:21
SELECT  proname, prosrc
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'public';
17
14.04.2010 23:30:21
Может быть, в следующий раз просто отредактируйте пост выше своего, а не меняйте мелочь
Daniel L. VanDenBosch 5.10.2017 17:22:44
Даниэль Л. ВанДенБош: Он получил почти всю свою карму с ответами из этого ответа, поэтому я не вижу, чтобы он делал это в ближайшее время.
Lucio Mollinedo 29.03.2019 01:08:34

То же, что @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, я могу создать подходящее имя функции для отбрасывания.

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

9
28.01.2013 21:52:03

Если вы используете 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скрывается за кулисами.

13
5.12.2014 04:05:38

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

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

0
23.05.2017 12:17:19