3

i was trying to follow this example from stackoverflow using pg_notify with python. I am not getting this to work. Nothing happens and python does not receive the notification.

Python 3.85 Using Psycopg2. PostgreSQL 13

python & postgresql: reliably check for updates in a specific table

First. I created a python function that listened to the postgreSQL. Then i went to pgadmin and executed

select pg_notify('process', 'update'); 

My python function is below

def dblisten(connection):
    cur = connection.cursor()
    print("inside")
    cur.execute("LISTEN process")
    while True:
        print("listening")
        select.select([connection],[],[])
        connection.poll()
        events = []
        while connection.notifies:
            notify = connection.notifies.pop().payload
            print ("Got NOTIFY:", datetime.datetime.now(), notify.pid, notify.channel, notify.payload)
if __name__ == '__main__':  # If it's executed like a script (not imported)
connection = psycopg2.connect(host='host', user='user',
                            password='password')
connection.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
        dblisten(connection)
user2238704
  • 121
  • 8
  • Please show how you are intialising the connection. – snakecharmerb May 19 '21 at 13:41
  • connection = psycopg2.connect(host='host', user='user', password='password') connection.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) – user2238704 May 19 '21 at 14:02
  • I works for me. Or at least, something happens when I send the notice. But what happens is some NameErrors. Maybe I mis-guessed about what your imports are supposed to be. – jjanes May 19 '21 at 18:06
  • This looks pretty much the same as [the docs](https://www.psycopg.org/docs/advanced.html#asynchronous-notifications). – snakecharmerb May 19 '21 at 18:20
  • 1
    One thing that's bitten me with this before - both sides must be connected to the same database: if the python connection is connected to `db1` then `pg_notify` must be called from within `db1` too. – snakecharmerb May 19 '21 at 18:22

0 Answers0