PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Setzen des Zeitstempels innerhalb der Transaktion

Dies Art von Frage kommt von Zeit zu Zeit vor - soweit ich das beurteilen kann, besteht die einzige absolut zuverlässige Möglichkeit darin, das zu tun, was Sie beschrieben haben, aktualisierte IDs im ersten Prozess in einer Tabelle zu speichern und sie im zweiten Prozess als verarbeitet zu markieren. Im Grunde erfindet dies eine Nachrichtenwarteschlange in der Datenbank neu. Sie haben ziemlich gut beschrieben, wie eine naive Lösung Updates verpassen wird.

Das Markieren aktualisierter Zeilen durch den Importprozess kann ganz einfach erfolgen oder sogar mithilfe von Triggern in Ihrer Datentabelle implementiert werden. Wenn Sie nur einen Verbraucherprozess haben, dann ist alles, was er tun muss, delete from updated_item returning item_id um eine Liste der Updates zu erhalten. Es klingt, als wäre es viel komplizierter, aber meiner Meinung nach ist es das nicht wirklich. Funktionen wie die Möglichkeit, zu überwachen, wie groß der Rückstand ist, werden ebenfalls kostenlos angeboten.