Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
Задача: требуется при работе ХП запустить на выполнение некоторую программу. Ну по типу sp_shellcmd 'командная строка' в МС СКЛ-е. Как это можно сделать в Постгресе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2005, 14:41 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
пишеш сишную ХП и делаешть внутри хоть "rm -rf /" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2005, 14:45 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
wbearпишеш сишную ХП и делаешть внутри хоть "rm -rf /" Злой ты, rm сразу делать :-))) Если из plpgsql никак, то похоже тогда plJava прийдётся использовать. Кстати, народ, кто-нить что-нить с этим зверем делал? Как ощущения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2005, 16:29 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
мне так думается что лучше всетаки перл для этого (если конечно вы не используете во всех остальных местах своего проекта яву) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2005, 02:27 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
Перл ресурсов много меньше явы жрет, и запускается быстрее - это факт. Для простого запуска внешней программы - pl/java слишком роскошно будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2005, 03:24 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
Проект явовский. Поэтому, когда явисты узнали о возможности использовать яву в ХП, то загорелись идеей. А проблема вобщем-то в следующем - нужна обратная связь из базы. Типа событий в интербейз\файрбёрд. То есть, на вставку записи в таблицу, реализуется сложный механизм перечислений и распределений денег, затрагивающий множество таблиц - вобщем лучше его не трогать. При возникновении некоторых нехороших ситуаций необходимо делать некоторые действия, например, отсылать письма по определённым ящикам и пр. Как отослать письмо из Постгреса я не знаю. Поэтому возникло радикальное решение сделать внешнюю прогу, которая будет это реализовывать. Если есть какаие-то другие способы разрулить ситуацию - слушаю очень внимательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2005, 13:02 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
Вообщем что использовать перл или яву ... - Планируется ли еще выполнять какие нить действия используя внешние программы и тп - Умеют ли ваши программеры писать на перле?? наши например умеют поэтому я бы заюзал перл (просто сыроват на мой взгляд еще pljava) - Ну еще из перла проще почту отправить (ИМНО) ну и тп Если хотите чтоб было все однообразно (веский аргумент) и после вас эту систему еще кто нить будет поддерживать тогда лучше ява ... если надо только почту отправлять то можно и на Сях написать :)) и последнее перл в PG уже достаточно давно а pljava если не ошибаюсь месяц назад только релиз сделали ... так что выбор за вами ----------------------------- жизнь как пестня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2005, 13:40 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
Fabrichenko ViktorВообщем что использовать перл или яву ... - Планируется ли еще выполнять какие нить действия используя внешние программы и тп - Умеют ли ваши программеры писать на перле?? наши например умеют поэтому я бы заюзал перл (просто сыроват на мой взгляд еще pljava) - Ну еще из перла проще почту отправить (ИМНО) ну и тп Если хотите чтоб было все однообразно (веский аргумент) и после вас эту систему еще кто нить будет поддерживать тогда лучше ява ... если надо только почту отправлять то можно и на Сях написать :)) и последнее перл в PG уже достаточно давно а pljava если не ошибаюсь месяц назад только релиз сделали ... так что выбор за вами ----------------------------- жизнь как пестня На перле есть кому писать, только в этом проекте одни явисты пока что учавствуют и дёргать человека из ПХП-отдела не хоцца, да и сопровождать проще. Отсюда и скачем... Будет ли ещё что-нить пока не ясно. Клиент, в принципе, может запеть ещё что-нить. Посему, буду пробовать plJava. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2005, 15:05 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
А зачем запускать именно из ХП? Вообще, это не безопасно, да и "застрять" эта ХП может с очень неприятными последствиями. Может, подойдет такой вариант: вешается демон, который имеет одно соединение к постгре для него есть табличка, которую он с определенной периодичностью просматривает на предмет изменения какого-либо флага или набора флагов/полей/тп. при изменении флага, демон выполняет необходимое действие (к примеру, дергает sendmail) если периодически дергать селектом табличку накладно, можно лочить эксклюзивно и снимать лок в момент события, а потом снова лочить. на счет того, сколько времени можно держать залоченой таблицу без неприятных последствий, не знаю. но вариант, вроде как, рабочий. правда проверял его только для интереса без какого-либо серьезного применения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 12:17 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
Можно делать и так как написал URIX ... -- Табличку я думаю не очень накладно дергать (ее можно чистить да и не должно быть так много ошибок :-)) ) -- Вариант абсолютно рабочий тк сами эту схему юзаем причем табличка довольно большая (таким образом реализованна очередь запросов в другую базу) и она постоянно растет (иногда чистится) но что там такого может страшного произойти с программой?? тайм аут делаешь и делов. (хотя проблема может быть в самом pljava) 2mwolf если настраивал pljava то поделись впечатлениями :-)) ---------------------------------- жизнь как пестня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 12:49 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
вместо дерганья таблички(это достаточно накладно если она большая) можно в тригере(EACH STATEMENT,AFTER UPDATE/DELETE/INSER) на табличку cделать NOTIFY ,а в демоне LISTEN NOTIFY и select'om(libc'ишныи имеется ввиду) ждать пока оно (NOTIFY) придет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 15:47 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
wbearвместо дерганья таблички(это достаточно накладно если она большая) можно в тригере(EACH STATEMENT,AFTER UPDATE/DELETE/INSER) на табличку cделать NOTIFY ,а в демоне LISTEN NOTIFY и select'om(libc'ишныи имеется ввиду) ждать пока оно (NOTIFY) придет.а вот тут можно немного подробнее? если я правильно понял, то демон должен просто крутить "LISTEN <имя сообщения>" и при его появлении выполнять необходимое действие. но при таком подходе максимальное время реакции будет равно интервалу опроса. можно ли как-нибудь заблокировать соединение до прихода оповещения? я делал (только в качестве эксперимента) так: первый скрипт: begin; LOCK <table> in ACCESS EXCLUSIVE mode; --ожидание-- end; второй: select * from <table> --дествие по событию-- но(!) в ХП такой номер не пройдет, т.к. по окончанию ее выполнения, транзакция закрывается и лок, соответственно, снимается. собственно, суть вопроса: есть ли какие-нибудь решения, позволяющие блокировать.разблокировать соединение в ХП? з.ы. прошу прощения за косноязычие %) русский речь меня покинул ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 16:30 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
LOCK EXCLUSIVE :) - c ядерной бомбой против навозных мух. да и неправильно это.. для LOCK EXCLUSIVE нужно что бы всевремя висел процес который держал бы его.. а как тока это процес умрет так твой демон начнет бесконечный и бессмысленный цикл проверки таблицы.. fd = PgGetConnect(); PgDoStatement("LISTEN my_notify"); FD_SET(fd,read_set); while( select(read_set...) ) { notify = Pg_get_notify(); if ( notyfy == my_notify ) { PgDoStatement("SELECT ... ); } } что то типа того. select(read_set...) заблокирует процесс(твой процес-демон) до тех пор пока по PG-шному конекту не придет нотифай.. fd - дискриптор сокета по которому идет конект к PG подробности в доках по libpq p.s точное название libpq'шных функция я не помню, но они 100% есть и возврящают именно то что надо.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 16:57 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
ок, спасибо, теперь все понял. работает ;) _____________________________________________________ #!/usr/bin/perl -W use strict; use DBI; use IO::Select; use vars '$dbh'; my $select=IO::Select->new(); $dbh=DBI->connect("DBI:Pg:dbname=....","....",'....'); $dbh->do("listen mntf"); $select->add($dbh->func('getfd')); while($select->can_read()){ my($name,$pid)=@{$dbh->func('pg_notifies')}; print "(\$name,\$pid)=($name,$pid)\n"; } sub END{ $dbh->disconnect(); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 17:43 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
NOTIFY-LISTEN очень интересный вариант. Если б ещё и параметр какой-нить можно было б передавать, то вообще сказака была бы. Но и на этом спасибо - буду думать и в эту сторону тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 17:51 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
mwolfNOTIFY-LISTEN очень интересный вариант. Если б ещё и параметр какой-нить можно было б передавать, то вообще сказака была бы. Но и на этом спасибо - буду думать и в эту сторону тоже.имхо, с параметром никаких проблем-то и нет. по событию в табличку пишется, к примеру, "insert into async_calls_param(sid,val) values('user_notify_<session id>',<параметры>)" и генрится "NOTIFY user_notify_<session id>", а демон слушает этот "user_notify_<session id>" и при его приеме дергает val из таблички. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 18:14 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
обновлю тему ;)) таким макаром (notify-listen) реализовал печать накладных на соединении висит демон, когда в табличку инсертятся данные о печати документа, триггер генерит notify print и демон тут же генерит документы оказалось очень удобно ;)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 11:09 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
URIXобновлю тему ;)) таким макаром (notify-listen) реализовал печать накладных на соединении висит демон, когда в табличку инсертятся данные о печати документа, триггер генерит notify print и демон тут же генерит документы оказалось очень удобно ;)) Мы джаву таки прикрутили Нае..ались правда по самое нехочу, но вроде забегало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 12:53 |
|
||
|
Запуск внешней программы
|
|||
|---|---|---|---|
|
#18+
а в чем была основная проблема? я просто собираюсь делать в базе jobы вот и решения кроме явы не вижу потому что весь проект на яве :-) разобрались как она внутри устроена plJava ? я просто не ковырял еще предстоит :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 12:57 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=32980756&tid=2007152]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 264ms |
| total: | 529ms |

| 0 / 0 |
