Обсуждение: Non-reentrant plperlu function & concurrent access

Поиск
Список
Период
Сортировка

Non-reentrant plperlu function & concurrent access

От
Philippe Lang
Дата:
Hi,

I have a non-reentrant plperlu function, which does no database modification. It basically stores input data into a
file,calls a unix shell command, and reads the result back from another file. 

I don't really care about database isolation here, phantom reads and such. It is not likely to be a problem. What could
bea problem, is if another call to this function is fired while another one is running. 

In this specific case, I could solve the problem by generating random input and ouput filenames, but I would prefer a
moregeneral solution, like using some sort of mutex for the function. What is the best way to do that under Postgresql?
Althoughnot designed for this (if I understand correctly), would a "serializable" isolation level help here? 

Best regards!

-------------------------------------------------------------
Attik System              web  : http://www.attiksystem.ch
Philippe Lang             phone: +41 26 422 13 75
rte de la Fonderie 2      gsm  : +41 79 351 49 94
1700 Fribourg             pgp  : http://keyserver.pgp.com



Вложения

Re: Non-reentrant plperlu function & concurrent access

От
Philippe Lang
Дата:
> Hi,
>
> I have a non-reentrant plperlu function, which does no database
> modification. It basically stores input data into a file, calls a unix
> shell command, and reads the result back from another file.
>
> I don't really care about database isolation here, phantom reads and
> such. It is not likely to be a problem. What could be a problem, is if
> another call to this function is fired while another one is running.
>
> In this specific case, I could solve the problem by generating random
> input and ouput filenames, but I would prefer a more general solution,
> like using some sort of mutex for the function. What is the best way to
> do that under Postgresql? Although not designed for this (if I
> understand correctly), would a "serializable" isolation level help
> here?

I answer to my own post, sorry...

Maybe Postgresql functions "pg_try_advisory_lock_shared" and "pg_advisory_unlock_shared" are the solution?

-------------------------------------------------------------
Attik System              web  : http://www.attiksystem.ch
Philippe Lang             phone: +41 26 422 13 75
rte de la Fonderie 2      gsm  : +41 79 351 49 94
1700 Fribourg             pgp  : http://keyserver.pgp.com




Вложения

Re: Non-reentrant plperlu function & concurrent access

От
zhong ming wu
Дата:
On Tue, Aug 17, 2010 at 4:15 AM, Philippe Lang
<philippe.lang@attiksystem.ch> wrote:
>> Hi,
>>
>> I have a non-reentrant plperlu function, which does no database
>> modification. It basically stores input data into a file, calls a unix
>> shell command, and reads the result back from another file.
>>
>> I don't really care about database isolation here, phantom reads and
>> such. It is not likely to be a problem. What could be a problem, is if
>> another call to this function is fired while another one is running.
>>
>> In this specific case, I could solve the problem by generating random
>> input and ouput filenames, but I would prefer a more general solution,
>> like using some sort of mutex for the function. What is the best way to
>> do that under Postgresql? Although not designed for this (if I
>> understand correctly), would a "serializable" isolation level help
>> here?
>
> I answer to my own post, sorry...
>
> Maybe Postgresql functions "pg_try_advisory_lock_shared" and "pg_advisory_unlock_shared" are the solution?
>

There is perl self locking mechanism using flock on __DATA__ .  Have
you tried that?   google is your friend.