Hello!

On Wednesday 20 January 2010 10:49:26 Denis Feklushkin wrote:
> ой ей! нельзя так делать мне! Время выполнения команды велико и юзер не 
> должен здать окончания её выполнения.

Эта "проблема" в юниксе никогда не существовала: blablabla &

Пример для постгреса:

$ cat test.sql 

CREATE OR REPLACE FUNCTION public.test(integer)
  RETURNS text AS
$BODY$
    exec sleep $1 &
$BODY$
  LANGUAGE 'pltclu' VOLATILE SECURITY DEFINER;

select public.test(100);

$ psql -h localhost -U postgres offline4
Welcome to psql 8.1.15, the PostgreSQL interactive terminal.

offline4=# \i test.sql 
CREATE FUNCTION
 test  
-------
 32627
(1 row)
\q

$ ps aux|grep 32627
postgres 32627  0.0  0.0   3692   496 ?        S    11:36   0:00 sleep 100


> Чтобы такое сделать в постгресе и придумали LISTEN/NOTIFY: закидываешь в 
> таблицу-очередь, делаешь NOTIFY blablabla и демон выполняет внешнюю команду 
> из этой очереди.

NOTIFY behaves like Unix signals in one important respect: if the same 
notification name is signaled multiple times in quick succession, recipients 
may get only one notification event for several executions of NOTIFY. So it is 
a bad idea to depend on the number of notifications received. Instead, use 
NOTIFY to wake up applications that need to pay attention to something, and use 
a database object (such as a sequence) to keep track of what happened or how 
many times it 

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

Best regards, Alexey Pechnikov.
http://pechnikov.tel/

Ответить