Что такое название канала в postgreSQL? И где я могу найти его для отслеживания изменений в таблице? - PullRequest
0 голосов
/ 01 апреля 2020

Мне нужно было бы получать автоматические c уведомления об изменениях в указанной таблице c в postgreSQL с использованием python. Я не знаю, что такое название канала, и где я могу найти его на pgAdmin.

Предполагая, что мне нужно прослушать таблицу с именем table_1 и получать уведомления об изменениях. Что я должен сделать?

Вот код, который я нашел в Интернете ..

import select
import psycopg2
import psycopg2.extensions

DB_NAME = "postgres"
DB_USER = "postgres"
DB_PASS = "pw"
DB_HOST = "localhost"
DB_PORT = "5432"

conn = psycopg2.connect(database=DB_NAME, user=DB_USER, password=DB_PASS, host=DB_HOST, port=DB_PORT)
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)

curs = conn.cursor()
curs.execute("LISTEN test;")

print "Waiting for notifications on channel 'test'"
while True:
    if select.select([conn],[],[],5) == ([],[],[]):
        print "Timeout"
    else:
        conn.poll()
        while conn.notifies:
            notify = conn.notifies.pop(0)
            print "Got NOTIFY:", notify.pid, notify.channel, notify.payload

1 Ответ

1 голос
/ 01 апреля 2020

Канал является частью работы LISTEN / NOTIFY, см. документацию для этой функции.

Вам потребуется создать триггеры для table_1, которые выдают уведомления при каждом его изменении. Если хотите, вы можете назвать канал, на который эти уведомления отправляются «table_1». Или вы можете использовать один общий канал для всех таблиц, которые вы слушаете. Это зависит от вас.

Вместо этого вы можете использовать логическую репликацию. Если это другой способ сделать подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...