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

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