Re: Socket communication for contrib - Mailing list pgsql-hackers

From Hans-Jürgen Schönig
Subject Re: Socket communication for contrib
Date
Msg-id 40725B0D.2010906@cybertec.at
Whole thread Raw
In response to Re: Socket communication for contrib  (Paul Tillotson <pntil@shentel.net>)
List pgsql-hackers
Paul Tillotson wrote:
> Hans et al:
> 
>> People asked me to put a simple extension for PostgreSQL Open Source.
>> The attached package contains a simple functions whichs tells a remote 
>> TCP socket that somebody is about to modify a certain table.
>>  
>>
> I would very much appreciate being able to receive notifications over 
> the network.  Besides helping machines which are not directly connected 
> to the database, this is very useful when one is using a deficient 
> API/wrapper which does not provide a "block until a notify arrives."  
> (Such as the pg_xxxxxx functions in PHP.)
> 
>> Doesn't this encourage violation of the basic notion of a transaction?
>> The message will be sent immediately, whether or not the sending
>> transaction actually commits.
>>
>>  
>>
> [ ... thinks ... ]  Good point, but I think I see another problem with 
> it--changes to a table are not visible until a transaction commits.  
> Depending on the speed of your network, you might often get the 
> notification BEFORE the transaction commits, and so your SELECT new rows 
> SQL statement might miss the very change that it was notified of.  The 
> only way to tell would be to wait for a "reasonable" amount of time and 
> try again.  (And of course, if the change were rolled back then you 
> would never see a changed row.)  It seems that one would be almost 
> reduced to polling again.


Yes, It might happen that you cannot see changes.


> Instead of this, what do the hackers think of a NOTIFY forwarder?  One 
> could make a small C program which connects to the database, executes 
> LISTEN for the proper notifies, goes to sleep using select(), and then 
> forwards each notify received over the network to the proper hosts?  It 
> seems that this would accomplish the same result while not violating the 
> basic notion of a transaction.
> It would permanently tie up one backend, though.   : (
> 
> Could your extension be modified to work this way, Hans?
> 
> Paul Tillotson


Well, sacrifycing one backend would not be a problem.
If you are using one connection to do the LISTEN / NOTIFY work (maybe 
including some configuration schema), you had a good chance to see the 
changes which have been made.
Basically this should not be a problem. However, my time is very limited 
at the moment. I hope that I will finde some spare time within the next 
few months to SELECT FOR UPDATE NOWAIT and you idea.
Regards,
    Hans

-- 
Cybertec Geschwinde u Schoenig
Schoengrabern 134, A-2020 Hollabrunn, Austria
Tel: +43/2952/30706 or +43/664/233 90 75
www.cybertec.at, www.postgresql.at, kernel.cybertec.at



pgsql-hackers by date:

Previous
From: Chris Browne
Date:
Subject: Re: Update on PITR
Next
From: Fabien COELHO
Date:
Subject: pg_hba.conf view from the database?