2017-11-09 13 views
0

私はPostgres 9.5でPyGreSQL 4.1.1を使用しており、いくつかのストアド関数を書いています。私はpsqlでうまく動作するデバッグのために、関数内でさまざまなレベルのRAISEを使用していますが、Pythonでこれらのメッセージにアクセスする方法が見つかりませんでした。PyGreSQLで通知を受け取る方法は?

例:

CREATE OR REPLACE FUNCTION my_function() RETURNS BOOLEAN AS $_$ 
    BEGIN 
     RAISE NOTICE 'A notice from my function.'; 
     RETURN TRUE; 
    END 
$_$ LANGUAGE plpgsql; 

私のPythonコードは次のようになります。

conn = pgdb.connect(database = 'mydb', user = 'myself') 
cursor = conn.cursor() 
cursor.execute("SELECT my_function()"): 

私はmy_function()を実行した後の通知(A notice from my function.)にアクセスするにはどうすればよいですか?

+1

[Connection.set_notice_receiver(FUNC)](http://www.pygresql.org/contents/pg/connection.html#pg.Connection.set_notice_receiver) – klin

+0

@klin:ありがとうございますが、 'set_notice_receiver()'は明らかに 'pg'モジュールの外にあります。 'pgdb'の変種もありますか? – clemens

+1

残念ながら、通知はPostgresに特有の機能であるため、DB-API 2.0には含まれていません。 – klin

答えて

0

@ klinのコメントのため、私はやや汚れた解決策を見つけました。 pgdb.Connectionオブジェクトは、という名前のプライベートプロパティに基になるpg.Connectionオブジェクトを格納します。したがって、あなたがこのような通知の受信機を設定することができます。

def my_notice_receiver(notice): 
    logging.info("Notice: %s", notice) 

conn._cnx.set_notice_receiver(my_notice_receiver) 
関連する問題