Что такое функции PostgreSQL и когда я должен их использовать? - PullRequest
3 голосов
/ 01 ноября 2011

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

Ответы [ 3 ]

6 голосов
/ 01 ноября 2011

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

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

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

Затраты: Поскольку операторы хранимых процедур хранятся непосредственно в базе данных, они могут удалить все или часть издержек компиляции что обычно требуется в ситуациях, когда программные приложения отправлять встроенные (динамические) запросы 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

2 голосов
/ 01 ноября 2011

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

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

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

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

0 голосов
/ 25 января 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...