2017-01-14 10 views
2

状況をご確認ください:は、私は私のメインthreadパイソン)でのもののすべての種類ごとにx分を計算し、ライブ取引スクリプトを持っています。注文の送信は、threadを介して行われる。このような注文の受け取りと実行は別の問題ですが、x分を渡すことはできませんが、到着するとすぐに必要になります。threadをもう一度初期化して、データベーステーブルにあるそのようなデータ(実行) POSTGRES SQL)。パイソン&PostgreSQLの:確実に特定のテーブルに更新のために

問題点(複数可):私はに常時、クエリごとにXXミリを行うDBからデータを取得し、テーブルの長さを比較して、さまざまな理由で違いを得ることができません(そのようなDBを使用する男、perforamnceの問題だけではありません、など)。だから、私はいくつかの解決策を探して、このスレッド(https://dba.stackexchange.com/questions/58214/getting-last-modification-date-of-a-postgresql-database-table)を思いついたところで、基本的にそれの要点は "テーブルの最終更新時刻の信頼できる、権限のあるレコードはありませんでした"。

質問:私は、それについて何を行うことができますものです:Pythonを使用して全体のことを過負荷にすることなく、postgres sqlテーブルからinstantenuous回答近くなって?

答えて

3

あなたは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();") 
+0

これは非常に私のリーグのうち、そうです!私はすぐにそれを試してみる – Asher11

関連する問題