Начало работы
Подключение
Тесты производительности
Развёртывание
Использование данных
Загрузка данных
Миграция данных
Запрос данных
Управление кластерами
Обновление
Глобальное обслуживание
Масштабирование
Мониторинг
Безопасность
Лучшие практики
Технические принципы
Типы данных
Хранилище
Исполняющий движок
Потоковая обработка (Domino)
MARS3 Индексы
Расширения
Расширенные функции
Расширенный запрос
Федеративные запросы
Grafana
Резервное копирование и восстановление
Аварийное восстановление
Руководство
Настройка производительности
Устранение неполадок
Инструменты
Параметры конфигурации
SQL-команда
Часто задаваемые вопросы
Определяет новую процедуру.
CREATE [OR REPLACE] PROCEDURE <name>
( [ [<argmode>] [<argname>] <argtype> [ { DEFAULT | = } <default_expr> ] [, ...] ] )
{ LANGUAGE <lang_name>
| TRANSFORM { FOR TYPE <type_name> } [, ... ]
| { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER }
| SET <configuration_parameter> { TO <value> | = <value> | FROM CURRENT }
| AS '<definition>'
| AS '<obj_file>', '<link_symbol>'
} ...
Команда CREATE PROCEDURE определяет новую процедуру. Команда CREATE OR REPLACE PROCEDURE либо создаёт новую процедуру, либо заменяет существующее определение. Чтобы определить процедуру, пользователь должен обладать привилегией USAGE на язык.
Если указано имя схемы, то процедура создается в указанной схеме. В противном случае она создается в текущей схеме. Имя новой процедуры не должно совпадать с именем уже существующей процедуры, имеющей те же типы входных аргументов в той же схеме. Однако процедуры и функции с разными типами аргументов могут иметь одинаковые имена (перегрузка).
Чтобы обновить текущее определение существующей процедуры, используйте команду CREATE OR REPLACE PROCEDURE. Изменить таким способом имя или типы аргументов процедуры невозможно (это фактически создаст новую, отдельную процедуру).
При использовании CREATE OR REPLACE PROCEDURE для замены существующей процедуры владелец и права доступа к процедуре остаются без изменений. Все остальные свойства процедуры устанавливаются в соответствии со значениями, указанными или подразумеваемыми в команде. Вы должны быть владельцем процедуры, чтобы её заменить (включая членство в роли-владельце).
Пользователь, создавший процедуру, становится её владельцем.
Для возможности создания процедуры необходимо иметь привилегию USAGE на типы аргументов.
Дополнительную информацию о создании процедур см. в разделе «Определяемые пользователем процедуры» документации PostgreSQL.
name
argmode
argname
argtype
Тип(ы) данных аргументов процедуры (при необходимости с указанием схемы), если таковые имеются. Типы аргументов могут быть базовыми, составными или доменными, либо ссылаться на тип столбца таблицы.
В зависимости от языка реализации может быть разрешено указывать псевдотипы, такие как cstring. Псевдотипы означают, что фактический тип аргумента либо недостаточно определён, либо находится за пределами набора обычных SQL-типов данных.
Тип столбца указывается как table_name.column_name%TYPE. Использование этой возможности иногда помогает сделать процедуру независимой от изменений в определении таблицы.
default_expr
lang_name
TRANSFORM { FOR TYPE type_name } [, ... ] }
[EXTERNAL] SECURITY INVOKER
[EXTERNAL] SECURITY DEFINER
configuration_parameter
value
definition
Строковая константа, определяющая процедуру; значение зависит от языка. Это может быть внутреннее имя процедуры, путь к объектному файлу, SQL-команда или текст на процедурном языке.
Часто удобно использовать долларное кавычкование (см. «Строковые константы с долларным кавычкованием» в документации PostgreSQL) для записи строки определения процедуры вместо обычного синтаксиса с одинарными кавычками. Без долларного кавычкования все одинарные кавычки и обратные слэши в определении процедуры должны быть экранированы путём их удвоения.
obj_file, link_symbol
Дополнительные сведения о создании функций, применимые также к процедурам, см. в разделе CREATE FUNCTION.
Для выполнения процедуры используйте команду CALL.
CREATE PROCEDURE insert_data(a integer, b integer)
LANGUAGE SQL
AS $$
INSERT INTO tbl VALUES (a);
INSERT INTO tbl VALUES (b);
$$;
CALL insert_data(1, 2);
Команда CREATE PROCEDURE определена в стандарте SQL. Версия Database похожа, но не полностью совместима. Подробности см. также в разделе CREATE FUNCTION.