Python 和 PostgreSQL:可靠地检查特定表中的更新



情况:我有一个实时交易脚本,它在我的主thread(Python)中每x分钟计算一次各种东西。通过这种CCD_ 2执行订单发送。然而,这些命令的接收和执行是另一回事,因为我不能让x分钟过去,但我需要它们一进来。我初始化了另一个thread,以检查数据库表(POSTGRES SQL)中的此类数据(执行)。

问题:由于各种原因(不仅是使用此类数据库的人,性能问题等),我无法继续每xx毫秒执行一次查询,从数据库中获取数据,比较表长度,然后得出差异。所以我查找了一些解决方案,得出了这个线索(https://dba.stackexchange.com/questions/58214/getting-last-modification-date-of-a-postgresql-database-table)基本上它的要点是"没有可靠的、权威的表格最后修改时间记录">

问题:我该怎么办,也就是说:在不使用Python重载整个内容的情况下,从postgres sql表中获得接近即时的响应?

您可以在postgresql:中使用通知

import psycopg2
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
import select

def dblisten(dsn):
connection = psycopg2.connect(dsn)
connection.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cur = connection.cursor()
cur.execute("LISTEN new_id;")
while True:
select.select([connection],[],[])
connection.poll()
events = []
while connection.notifies:
notify = connection.notifies.pop().payload
do_something(notify)

并为每次更新安装一个触发器:

CREATE OR REPLACE FUNCTION notify_id_trigger() RETURNS trigger AS $$
BEGIN
PERFORM pg_notify('new_id', NEW.ID);
RETURN new;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER data_modified AFTER insert or update on data_table for each row execute procedure notify_id_trigger();")

最新更新