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
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