PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да получавам автоматични известия за промени в таблиците?

donmage е съвсем прав - LISTEN и NOTIFY са това, което искате. Все още ще имате нужда от цикъл на анкета, но той е много лек и няма да причини откриваемо натоварване на сървъра.

Ако искате psycopg2 за задействане на обратни повиквания по по всяко време във вашата програма можете да направите това, като създадете нишка и накарате тази нишка да изпълни цикъла на избиране. Проверете дали psycopg2 налага достъп за безопасна връзка; ако не стане, ще трябва да направите свое собствено заключване, така че вашият цикъл на анкета да работи само когато връзката е неактивна и никакви други заявки да не прекъсват цикъл на анкета. Или можете просто да използвате втора връзка за проучване на вашето събитие.

Така или иначе, когато фоновата нишка, която търси събития за уведомяване, получи такова, тя може да извика функция за обратно извикване на Python, предоставена от основната ви програма, която може да промени структурите на данни / променливите, споделени от останалата част от програмата. Внимавайте, ако направите това, че може бързо да се превърне в кошмар за поддръжка.

Ако възприемете този подход, горещо препоръчвам да използвате multithreading / multiprocessing модули. Те ще направят живота ви значително по-лесен, предоставяйки прости начини за обмен на данни между нишките и ограничавайки модификациите, направени от слушащата нишка, до прости и добре контролирани местоположения.

Ако използвате нишки вместо процеси, важно е да разберете, че в cPython (т.е. „нормален Python“) не можете да имате истинско прекъсване на обратно извикване, защото само една нишка може да се изпълнява в cPython наведнъж. Прочетете за "глобалното заключване на интерпретатора" (GIL), за да разберете повече за това. Поради това ограничение (и по-лесното, по-безопасно естество на паралелността споделено нищо по подразбиране) често предпочитам многопроцесорност пред многонишковост.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изравним резултат на PostgreSQL

  2. Актуализирайте последователността на ред INSERT

  3. Заявка с LEFT JOIN не връща редове за брой 0

  4. postgresql - заявка за изграждане на json

  5. Конкатениране на низ и число в PostgreSQL