Я хочу иметь возможность подключиться к базе данных PostgreSQL и найти все функции для конкретной схемы.
Я думал, что мог бы сделать какой-нибудь запрос к pg_catalog или information_schema и получить список всех функций, но я не могу понять, где хранятся имена и параметры. Я ищу запрос, который даст мне имя функции и типы параметров, которые она принимает (и в каком порядке она принимает их).
Есть ли способ сделать это?
postgresql
function
Радд Зволински
источник
источник
После некоторых поисков я смог найти
information_schema.routines
стол иinformation_schema.parameters
столы. Используя их, можно построить запрос для этой цели. LEFT JOIN вместо JOIN необходим для получения функций без параметров.источник
oidvectortypes
действительно полезным. Смотрите новый ответ: stackoverflow.com/a/24034604/398670Если кому-то интересно, вот какой запрос выполняется
psql
на postgres 9.1:Вы можете получить то, что
psql
работает для команды обратной косой черты, запустивpsql
с-E
флагом.источник
ERROR: column p.proisagg does not exist
Есть удобная функция,
oidvectortypes
которая делает это намного проще.Благодарим Лео Хсу и Реджину Обе из Postgres Online за указание
oidvectortypes
. Ранее я писал подобные функции, но использовал сложные вложенные выражения, для которых эта функция избавлена от необходимости.Смотрите связанный ответ .
(редактировать в 2016 году)
Обобщая типичные варианты отчета:
ВНИМАНИЕ : использование
p.proname||'_'||p.oid AS specific_name
для получения уникальных имен, или JOIN сinformation_schema
таблицами - смroutines
иparameters
на @ ответ RuddZwolinski в.OID функции (см.
pg_catalog.pg_proc
) И специфическое_имя функции (см.information_schema.routines
) Являются основными ссылочными опциями для функций. Ниже приведены некоторые полезные функции в отчетах и других контекстах.источник
proname
имя, но как получить OID, например. использовать вpg_catalog.pg_get_function_result(oid))
?oid
Колонкаpg_proc
. Это скрытый столбец.Запустите ниже SQL-запрос, чтобы создать представление, которое покажет все функции:
источник
Является ли хорошей идеей именовать функции с общим псевдонимом в первых словах для фильтра имя с
LIKE
Примером с публичной схемой в Postgresql 9.4, обязательно замените его схемойисточник
Пример:
источник
psql
клиентского интерфейса Postgres. Это будет работать толькоpsql
и технически не является запросом SQL.Получить список function_schema и function_name ...
источник
Эта функция возвращает все пользовательские подпрограммы в текущей базе данных.
источник