powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Запуск внешней программы
19 сообщений из 19, страница 1 из 1
Запуск внешней программы
    #32978744
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача: требуется при работе ХП запустить на выполнение некоторую программу.
Ну по типу sp_shellcmd 'командная строка' в МС СКЛ-е.
Как это можно сделать в Постгресе?
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32978756
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пишеш сишную ХП и делаешть внутри хоть "rm -rf /"
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32979114
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wbearпишеш сишную ХП и делаешть внутри хоть "rm -rf /"
Злой ты, rm сразу делать :-)))
Если из plpgsql никак, то похоже тогда plJava прийдётся использовать.
Кстати, народ, кто-нить что-нить с этим зверем делал?
Как ощущения?
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32979802
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне так думается что лучше всетаки перл для этого (если конечно вы не используете во всех остальных местах своего проекта яву)
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32979809
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перл ресурсов много меньше явы жрет, и запускается быстрее - это факт. Для простого запуска внешней программы - pl/java слишком роскошно будет.
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32980648
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проект явовский. Поэтому, когда явисты узнали о возможности использовать яву в ХП, то загорелись идеей.

А проблема вобщем-то в следующем - нужна обратная связь из базы. Типа событий в интербейз\файрбёрд. То есть, на вставку записи в таблицу, реализуется сложный механизм перечислений и распределений денег, затрагивающий множество таблиц - вобщем лучше его не трогать.
При возникновении некоторых нехороших ситуаций необходимо делать некоторые действия, например, отсылать письма по определённым ящикам и пр.
Как отослать письмо из Постгреса я не знаю. Поэтому возникло радикальное решение сделать внешнюю прогу, которая будет это реализовывать.
Если есть какаие-то другие способы разрулить ситуацию - слушаю очень внимательно.
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32980756
Fabrichenko Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем что использовать перл или яву ...

- Планируется ли еще выполнять какие нить действия используя внешние программы и тп
- Умеют ли ваши программеры писать на перле?? наши например умеют поэтому я бы заюзал перл (просто сыроват на мой взгляд еще pljava)
- Ну еще из перла проще почту отправить (ИМНО)
ну и тп

Если хотите чтоб было все однообразно (веский аргумент) и после вас эту систему еще кто нить будет поддерживать тогда лучше ява ...

если надо только почту отправлять то можно и на Сях написать :))

и последнее перл в PG уже достаточно давно а pljava если не ошибаюсь месяц назад только релиз сделали ... так что выбор за вами
-----------------------------
жизнь как пестня
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32981094
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fabrichenko ViktorВообщем что использовать перл или яву ...

- Планируется ли еще выполнять какие нить действия используя внешние программы и тп
- Умеют ли ваши программеры писать на перле?? наши например умеют поэтому я бы заюзал перл (просто сыроват на мой взгляд еще pljava)
- Ну еще из перла проще почту отправить (ИМНО)
ну и тп

Если хотите чтоб было все однообразно (веский аргумент) и после вас эту систему еще кто нить будет поддерживать тогда лучше ява ...

если надо только почту отправлять то можно и на Сях написать :))

и последнее перл в PG уже достаточно давно а pljava если не ошибаюсь месяц назад только релиз сделали ... так что выбор за вами
-----------------------------
жизнь как пестня
На перле есть кому писать, только в этом проекте одни явисты пока что учавствуют и дёргать человека из ПХП-отдела не хоцца, да и сопровождать проще. Отсюда и скачем...
Будет ли ещё что-нить пока не ясно. Клиент, в принципе, может запеть ещё что-нить.
Посему, буду пробовать plJava.
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32983566
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А зачем запускать именно из ХП? Вообще, это не безопасно, да и "застрять" эта ХП может с очень неприятными последствиями.
Может, подойдет такой вариант:
вешается демон, который имеет одно соединение к постгре
для него есть табличка, которую он с определенной периодичностью просматривает на предмет изменения какого-либо флага или набора флагов/полей/тп.
при изменении флага, демон выполняет необходимое действие (к примеру, дергает sendmail)
если периодически дергать селектом табличку накладно, можно лочить эксклюзивно и снимать лок в момент события, а потом снова лочить. на счет того, сколько времени можно держать залоченой таблицу без неприятных последствий, не знаю. но вариант, вроде как, рабочий. правда проверял его только для интереса без какого-либо серьезного применения.
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32983637
Fabrichenko Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно делать и так как написал URIX ...
-- Табличку я думаю не очень накладно дергать (ее можно чистить да и не должно быть так много ошибок :-)) )
-- Вариант абсолютно рабочий тк сами эту схему юзаем причем табличка довольно большая (таким образом реализованна очередь запросов в другую базу) и она постоянно растет (иногда чистится)

но что там такого может страшного произойти с программой?? тайм аут делаешь и делов. (хотя проблема может быть в самом pljava)

2mwolf
если настраивал pljava то поделись впечатлениями :-))
----------------------------------
жизнь как пестня
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32984241
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо дерганья таблички(это достаточно накладно если она большая) можно в тригере(EACH STATEMENT,AFTER UPDATE/DELETE/INSER) на табличку cделать NOTIFY ,а в демоне LISTEN NOTIFY и select'om(libc'ишныи имеется ввиду) ждать пока оно (NOTIFY) придет.
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32984421
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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>
--дествие по событию--

но(!) в ХП такой номер не пройдет, т.к. по окончанию ее выполнения, транзакция закрывается и лок, соответственно, снимается. собственно, суть вопроса: есть ли какие-нибудь решения, позволяющие блокировать.разблокировать соединение в ХП?

з.ы. прошу прощения за косноязычие %) русский речь меня покинул
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32984516
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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% есть и возврящают именно то что надо..
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32984686
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ок, спасибо, теперь все понял. работает ;)

_____________________________________________________
#!/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();
}
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32984704
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NOTIFY-LISTEN очень интересный вариант. Если б ещё и параметр какой-нить можно было б передавать, то вообще сказака была бы.
Но и на этом спасибо - буду думать и в эту сторону тоже.
...
Рейтинг: 0 / 0
Запуск внешней программы
    #32984739
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mwolfNOTIFY-LISTEN очень интересный вариант. Если б ещё и параметр какой-нить можно было б передавать, то вообще сказака была бы.
Но и на этом спасибо - буду думать и в эту сторону тоже.имхо, с параметром никаких проблем-то и нет. по событию в табличку пишется, к примеру, "insert into async_calls_param(sid,val) values('user_notify_<session id>',<параметры>)" и генрится "NOTIFY user_notify_<session id>", а демон слушает этот "user_notify_<session id>" и при его приеме дергает val из таблички.
...
Рейтинг: 0 / 0
Запуск внешней программы
    #33144495
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
обновлю тему ;))
таким макаром (notify-listen) реализовал печать накладных
на соединении висит демон, когда в табличку инсертятся данные о печати документа, триггер генерит notify print и демон тут же генерит документы
оказалось очень удобно ;))
...
Рейтинг: 0 / 0
Запуск внешней программы
    #33144851
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
URIXобновлю тему ;))
таким макаром (notify-listen) реализовал печать накладных
на соединении висит демон, когда в табличку инсертятся данные о печати документа, триггер генерит notify print и демон тут же генерит документы
оказалось очень удобно ;))

Мы джаву таки прикрутили
Нае..ались правда по самое нехочу, но вроде забегало
...
Рейтинг: 0 / 0
Запуск внешней программы
    #33144862
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а в чем была основная проблема?

я просто собираюсь делать в базе jobы вот и решения кроме явы не вижу потому что весь проект на яве :-)

разобрались как она внутри устроена plJava ? я просто не ковырял еще предстоит :-)
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Запуск внешней программы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]