Thread: [SQL NOTIFY Help] sending NOTIFY to the external program

[SQL NOTIFY Help] sending NOTIFY to the external program

From
Date:
Hi,
In one of our project we are supposed to send the notifications
regarding any row modifications in a perticular table to the external
application which will be implementing the listen event for the same.
We are using the postgress version 8.0.3.
we have observed that pgNotify structure in "libpq-fe.h" file is
having the following structure;
typedef struct pgNotify
{       char       *relname;            /* notification condition name
*/       int                     be_pid;                 /* process ID of
notifying server process */       char       *extra;                      /* notification
parameter */       /* Fields below here are private to libpq; apps should not use
'em */       struct pgNotify *next;          /* list link */
} PGnotify;
But, by default only relname and be_pid are used.  The technical
document also mentions that extra attribute is not used and by default
it will be null.
Can anybody clarify whether we can pass the primary key value of
the record modified in the extra attribute of this structure?
If not any help regarding the same will be appreciated.

Thanks in Advance,
Ramachandra B.S.


The information contained in this electronic message and any attachments to this message are intended for the exclusive
useof the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended
recipient,you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy
allcopies of this message and any attachments.  

WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for
thepresence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. 
www.wipro.com


Re: [SQL NOTIFY Help] sending NOTIFY to the external program

From
Richard Huxton
Date:
ramachandra.bhaskaram@wipro.com wrote:
> Hi,
> 
>     In one of our project we are supposed to send the notifications
> regarding any row modifications in a perticular table to the external
> application which will be implementing the listen event for the same.
> We are using the postgress version 8.0.3.

>     Can anybody clarify whether we can pass the primary key value of
> the record modified in the extra attribute of this structure?

Afraid not. You'll need to record the pkey in a "process_these" table 
and have the application check there.

--   Richard Huxton  Archonet Ltd


Re: [SQL NOTIFY Help] sending NOTIFY to the external program

From
Date:
Hi Richard Huxton,
Thank you for your kind response.
Is there not any other way other than record the pkey in a
"process_these" table and have the application check there.    We want
to minimise the database transactions to improve the DB performance.
Can we send the exact data which has been changed using
db-notify to the application?   So that, the application can continue
processing the data using the Notify message from the DB.

Thanks in Advance,
Ramachandra B.S.

-----Original Message-----
From: Richard Huxton [mailto:dev@archonet.com]
Sent: Wednesday, January 03, 2007 3:53 PM
To: Ramachandra Bhaskaram (WT01 - IP-Multimedia Carrier & Ent Networks)
Cc: pgsql-sql@postgresql.org
Subject: Re: [SQL] [SQL NOTIFY Help] sending NOTIFY to the external
program

ramachandra.bhaskaram@wipro.com wrote:
> Hi,
>
>     In one of our project we are supposed to send the notifications
> regarding any row modifications in a perticular table to the external
> application which will be implementing the listen event for the same.
> We are using the postgress version 8.0.3.

>     Can anybody clarify whether we can pass the primary key value of
the
> record modified in the extra attribute of this structure?

Afraid not. You'll need to record the pkey in a "process_these" table
and have the application check there.

--   Richard Huxton  Archonet Ltd


The information contained in this electronic message and any attachments to this message are intended for the exclusive
useof the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended
recipient,you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy
allcopies of this message and any attachments.  

WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for
thepresence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. 
www.wipro.com


Re: [SQL NOTIFY Help] sending NOTIFY to the external program

From
Richard Huxton
Date:
ramachandra.bhaskaram@wipro.com wrote:
> Hi Richard Huxton,
> 
>     Thank you for your kind response.    
> 
>     Is there not any other way other than record the pkey in a
> "process_these" table and have the application check there.    We want
> to minimise the database transactions to improve the DB performance.
> 
>     Can we send the exact data which has been changed using
> db-notify to the application?   So that, the application can continue
> processing the data using the Notify message from the DB.

Not via your database connection.

With one of the untrusted languages (C, pl/perlu pl/pythonu etc) you 
could do anything you could make a separate connection / write to a file  etc.

Does your application need to know *immediately* that a change in the 
database has occurred?

--   Richard Huxton  Archonet Ltd


Re: [SQL NOTIFY Help] sending NOTIFY to the external program

From
Date:
Yes, our application is supposed to know *immediately* that a change in
the database has occurred since, based on this modified data it is doing
lot of other operations and also, the db transactions are heavy(expected
to be arround 300 tps(transactions per sec)).

I agree that this can be done using some untrusted languages, written to
a file and then the application can look into the file for the modified
date.  But, as far as performance is concerned it will take time for the
application to get the response. The user on the application side might
not be kept in waiting state until this transaction happens.

Thanks in Advance,
Ramachandra B.S.

-----Original Message-----
From: Richard Huxton [mailto:dev@archonet.com]
Sent: Wednesday, January 03, 2007 7:39 PM
To: Ramachandra Bhaskaram (WT01 - IP-Multimedia Carrier & Ent Networks)
Cc: pgsql-sql@postgresql.org
Subject: Re: [SQL] [SQL NOTIFY Help] sending NOTIFY to the external
program

ramachandra.bhaskaram@wipro.com wrote:
> Hi Richard Huxton,
>
>     Thank you for your kind response.
>
>     Is there not any other way other than record the pkey in a
> "process_these" table and have the application check there.    We want
> to minimise the database transactions to improve the DB performance.
>
>     Can we send the exact data which has been changed using
> db-notify to the application?   So that, the application can continue
> processing the data using the Notify message from the DB.

Not via your database connection.

With one of the untrusted languages (C, pl/perlu pl/pythonu etc) you
could do anything you could make a separate connection / write to a file etc.

Does your application need to know *immediately* that a change in the
database has occurred?

--   Richard Huxton  Archonet Ltd


The information contained in this electronic message and any attachments to this message are intended for the exclusive
useof the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended
recipient,you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy
allcopies of this message and any attachments.  

WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for
thepresence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. 
www.wipro.com


Re: [SQL NOTIFY Help] sending NOTIFY to the external program

From
Richard Huxton
Date:
ramachandra.bhaskaram@wipro.com wrote:
> Yes, our application is supposed to know *immediately* that a change in
> the database has occurred since, based on this modified data it is doing
> lot of other operations and also, the db transactions are heavy(expected
> to be arround 300 tps(transactions per sec)).
> 
> I agree that this can be done using some untrusted languages, written to
> a file and then the application can look into the file for the modified
> date.  But, as far as performance is concerned it will take time for the
> application to get the response. The user on the application side might
> not be kept in waiting state until this transaction happens.

Needn't take time, if the O.S. you're on can notify you of file writes, 
but in any case I'd look at communicating over a socket (unix or tcp/ip) 
if you want immediate notification. It's simple enough in perl or python 
(or ruby, or any of those).

Oh, and you'll need to cope with the case: 1. Transaction containing the update is rolled back 2. Notification has
alreadyleft the database
 

--   Richard Huxton  Archonet Ltd


Re: [SQL NOTIFY Help] sending NOTIFY to the external program

From
Andrew Sullivan
Date:
On Wed, Jan 03, 2007 at 07:47:34PM +0530, ramachandra.bhaskaram@wipro.com wrote:
> 
> Yes, our application is supposed to know *immediately* that a change in
> the database has occurred since, 

NOTIFY doesn't get you that anyway.  It's _close_ to immediately, but
it's still asynchronous.  

A

-- 
Andrew Sullivan  | ajs@crankycanuck.ca
A certain description of men are for getting out of debt, yet are
against all taxes for raising money to pay it off.    --Alexander Hamilton


Re: [SQL NOTIFY Help] sending NOTIFY to the external program

From
Dave Steinberg
Date:
> On Wed, Jan 03, 2007 at 07:47:34PM +0530, ramachandra.bhaskaram@wipro.com wrote:
>> Yes, our application is supposed to know *immediately* that a change in
>> the database has occurred since, 

I'd recommend some sort of "whiteboard" layer or messaging fabric as an 
option for this sort of thing.  This offloads the notification element 
from the database, and lets you pass along any data you want to the 
listeners - even the complete record.

Also this sort of thing scales well to multiple listeners.  Anyway, just 
a thought...

Regards,
-- 
Dave Steinberg
http://www.geekisp.com/
http://www.steinbergcomputing.com/