python & postgresql: надежная проверка наличия обновлений в определенной таблице
Ситуация: у меня есть живой торговый скрипт, который вычисляет все виды вещей каждые x минут в моем основном thread (Python ). отправка заказа осуществляется через такой thread. однако прием и исполнение таких приказов-это совсем другое дело, поскольку я не могу допустить, чтобы прошло x минут, но они мне нужны, как только они поступят. Я инициализировал другой thread, чтобы проверить наличие таких данных (выполнение), которые находятся в таблице базы данных (POSTGRES SQL).
Проблема(ы): я не могу непрерывно выполняйте запрос каждые xx МС, получайте данные из БД, сравнивайте длину таблицы, а затем получайте разницу по разным причинам (не только из-за необходимости использовать такую БД, проблем с перфорацией и т. д.). поэтому я поискал некоторые решения и пришел к этой теме (https://dba.stackexchange.com/questions/58214/getting-last-modification-date-of-a-postgresql-database-table) где в основном суть была в том, что
" нет достоверной, авторской записи последнего измененного времени a стол".
Вопрос: что я могу сделать с этим, то есть: приблизиться к мгновенным ответам из таблицы postgres sql, не перегружая все это с помощью Python?
1 ответ:
Вы можете использовать уведомления в postgresql:
import psycopg2 from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT 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();")
Comments