Каковы преимущества хранимых процедур в PostgreSQL?
Привет всем!
Как думаете, есть ли реальные преимущества от использования хранимок в postgresql?
К примеру, я пишу работу с данными на JDBC, и можно было бы большие транзакции упаковать в хранимки. Под большими транзакциями подразумевается много вставок в разные таблицы и обновления множества записей в одной транзакции.
Будет ли выигрыш в производительности? И вообще, какие грабли могут подстерегать на этом пути?
Выигрыш в производительности определенно будет, хотя бы из-за того, что снимаются накладные расходы на подключение к бд и и передачу информации по сети. Но тут же повысится сложность отладки этих самых хранимых процедур, ну и цена ошибки, особенно на крупных базах. Хранимки имхо очень сложно покрыть автоматическими тестами
@Boniface собственно в этом и есть основной плюс. Проблемы производительности решаемы. Так же хранение части логики в процедурах понижает переносимость кода и усложняет поддержку и деплоймент.
Если реально много бизнес логики то да, а если только CRUD. В одном случае запрос идет из java (тот же sql), а в другом хранится в бд. В юнит тестах все равно будут моки. Или еще в чем то сложности?
А как оно там в постгресе хранится (хранимки)? Они компилируются в нем? Например в SQL server хранимки компилируются, за счет чего повышается производительность.
Я помню в 2005 году было модно хранимки использовать. И холиваров на эту тему было полно. Многие все CRUD делали через хранимки и дергали через ado.net ( дотнетчикам привет)
Главный выиграш от хранимок - меньше трафик. Если в трафик не упираетесь, вероятно, они вам не нужны. Иногда хранимками еще ограничивают доступ к базе. Все запросы тогда идут через хранимки. Сделать что-то непредусмотренное в случае взлома тогда нельзя. Тоже имеет право на жизнь.
Ясно, в в целом как считаете хранимки активно используются в сообществе пользователей postgresql или это легаси, мало кто их использует и вообще они слабо развиваются? Вопрос конечно риторический, но все же .
Мне кажется, что весьма активно, т.к. в постгресе для хранимок помимо pl/pgSQL можно использовать кучу других языков. Так что их можно применять и для той части бизнес-логики, которая отлажена либо же может быть запущена в фоне.