Что такое функции PostgreSQL и когда я должен их использовать?

#postgresql #function

#postgresql #функция

Вопрос:

Я хочу знать, что такое функции PostgreSQL.
Когда я должен их написать?
Как я могу их написать?
И как я могу их вызвать?

Ответ №1:

Определение из википедии:

Хранимая процедура — это подпрограмма, доступная приложениям, которые обращаются к системе реляционных баз данных.

Преимущества хранимых процедур в целом, из википедии:

Накладные расходы: поскольку инструкции хранимых процедур хранятся непосредственно в базе данных, они могут полностью или частично устранить накладные расходы на компиляцию, которые обычно требуются в ситуациях, когда программные приложения отправляют встроенные (динамические) SQL-запросы к базе данных. (…)

Предотвращение сетевого трафика: основным преимуществом хранимых процедур является то, что они могут выполняться непосредственно в ядре базы данных. В производственной системе это обычно означает, что процедуры выполняются полностью на специализированном сервере базы данных, который имеет прямой доступ к обрабатываемым данным. Преимущество здесь в том, что можно полностью избежать затрат на сетевую связь. Это становится особенно важным для сложных последовательностей операторов SQL.

Инкапсуляция бизнес-логики: хранимые процедуры позволяют программистам встраивать бизнес-логику в виде API в базу данных, что может упростить управление данными и уменьшить необходимость кодирования логики в других клиентских программах. (…)

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

Некоторая защита от атак с использованием SQL-инъекций: хранимые процедуры могут использоваться для защиты от атак с использованием инъекций. Параметры хранимой процедуры будут обрабатываться как данные, даже если злоумышленник вставляет команды SQL. (…)

В PostgresSQL хранимые процедуры называются пользовательскими функциями. Пример определения:

 CREATE FUNCTION somefunc(quantity integer) RETURNS integer AS $
DECLARE
    myvariable integer := 2;
BEGIN   
    RETURN quantity * myvariable;
END;
$ LANGUAGE plpgsql;
 

(Вы можете использовать другие языки для определения хранимых функций в PostgreSQL)

Пример вызова:

 SELECT somefunc(100);
 

Дополнительная информация: http://www.postgresql.org/docs/9.1/static/server-programming.html

Комментарии:

1. В PostgreSQL хранимые процедуры называются «пользовательскими функциями».

Ответ №2:

PostgreSQL запускает хранимые процедуры более чем на дюжине языков программирования, включая Java, Perl, Python, Ruby, Tcl, C / C и собственный PL / pgSQL, который похож на Oracle PL / SQL.

Использование хранимых процедур зависит от ваших потребностей и зависит от логики вашей программы, на мой взгляд, хранимые процедуры полезны только в некоторых случаях, а не всегда…

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

Чтобы узнать, как создать хранимую процедуру в PostgreSQL, обратитесь к этой странице документации.

Ответ №3:

основное преимущество заключается в снижении издержек сетевого трафика. Хранимая процедура почти такая же (не совсем), как бизнес-логика или логическая шина. Его главное преимущество заключается в создании динамического корпоративного приложения.Вы можете найти 100 хороших продуктов, которые вышли из строя только из-за отсутствия динамической структуры базы данных. Хранимые процедуры, функции, триггеры, последовательности, индексы и реляционная природа базы данных являются реальными ключами для создания отличных приложений.Моя компания всегда старается уменьшить уровни логики на стороне клиента с помощью хранимых процедур. Большая часть критической логики хранится в хранимых процедурах, что делает программистов и тестировщиков счастливыми и соответствует их срокам.