Ответ 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'
Просто быстрый и простой вопрос: в PostgreSQL, как вы перечисляете имена всех хранимых функций/хранимых процедур, используя таблицу, используя только инструкцию SELECT, если это возможно? Если простой SELECT недостаточно, я могу обойтись с сохраненной функцией.
Мой вопрос, я думаю, несколько похож на этот другой вопрос, но этот другой вопрос касается SQL Server 2005:
Список хранимой процедуры из таблицы
(необязательно) В этом случае, как вы также указываете триггеры и ограничения, которые используют одну и ту же таблицу таким же образом?
SELECT p.proname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p
ON p.pronamespace = n.oid
WHERE n.nspname = 'public'
SELECT proname, prosrc
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p
ON pronamespace = n.oid
WHERE nspname = 'public';
Если вы используете 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
работает за кулисами.
То же, что @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.
Кроме того, приятно видеть более полную картину при оценке функций.
Вы можете использовать стандартную схему information_schema
для получения метаданных о своей базе данных (это в стандарте SQL, поэтому она должна работать одинаково в разных системах баз данных). В этом случае вы хотите information_schema.routines
.
Исключение системного файла:
select proname from pg_proc where proowner <> 1;
Посмотрите на мой recipe. Он считывает функции и триггеры. Он основан на информации из: Извлечение информации META из PostgreSQL (INFORMATION_SCHEMA)
Для получения значений типов аргументов функций, которые требуются при ссылке на функцию в ALTER, используя oldevectortypes, работала хорошо для меня,
См. Как получить список всех функций, хранящихся в базе данных конкретной схемы в PostgreSQL?