Thread: Is there any special way to a trigger send a signal to outer application?
Hi! Windows Server, PGSQL. When a new records arrived to the database, I want process them in the background. I have a processor service. This is periodically (5-10 minutes) checking the "message" table, and if there is some message, it is process them. This periodic processing is good, but I want to decrease the process time, when records arrived (to increase the performance, and dec. the user's waiting). So I search for a way to do any IPC communication from PGSQL to the processor service. Which way is supports by PGSQL trigger? a.) Starting a new process with any params (this app. can send a WM_* message to my service)? b.) Sending a WM_* message (PostMessage) to my service? c.) Sending a TCP message to my service? Or other? If you have an example about this problem, please send me with the answer! Thanks for your help: dd
Re: Is there any special way to a trigger send a signal to outer application?
From
Craig Ringer
Date:
durumdara wrote: > Which way is supports by PGSQL trigger? One way you did NOT mention, but you need to look into: use LISTEN and NOTIFY. Whether or not this is suitable depends on how your application is accessing PostgreSQL, as IIRC some database access APIs (eg: ODBC) do not support LISTEN/NOTIFY. In answer to your questions: > a.) Starting a new process with any params (this app. can send a WM_* > message to my service)? You could use PL/Python or PL/Perl to invoke the process. Your function must be written extremely carefully to avoid producing a gaping security hole, though, if you have multiple levels of trust accessing your database. > b.) Sending a WM_* message (PostMessage) to my service? Maybe you could do it via PL/Python or PL/Perl using a DCOM or some other win32-specific extension module for those languages, too. You could also do that by writing a custom C extension function to PostgreSQL, compiling it, and loading it into the server. A bit of work, though. > c.) Sending a TCP message to my service? Same answer as (a) and (b), really - use PL/Python or PL/Perl. -- Craig Ringer