Chcę wywołać funkcję plpgsql przez psycopg2 i zobaczyć komunikaty ostrzegawcze. tzn, mam tę funkcję:Otrzymuj wiadomości ostrzegawcze za pośrednictwem psycopg2
create or replace function test_warning() returns void as $$
begin
raise warning 'this is only a test';
end;
$$
language plpgsql;
i nazywają to tak w python:
import psycopg2
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
cursor.callproc("test_warning")
# or so:
cursor.execute('SELECT test_warning()')
Niestety komunikat ostrzegawczy określony w plpgsql nigdzie nie pojawia się na wyjściu Pythona. Czy istnieje sposób, aby komunikat ostrzegawczy został wydrukowany na wyjściu Pythona?
Dziękuję bardzo, to działa. Ale co jeśli używam tego samego połączenia dla wielu kursorów? Próbowałem resetowania powiadomień, tak: 'conn.notices = {}', ale mam wyjątek TypeError: readonly atrybut. Czy mogę uzyskać ostrzeżenie, gdy funkcja jest wykonywana? Powiedzmy, funkcja wywołuje ostrzeżenie, a następnie wyjątek: chciałbym zobaczyć ostrzeżenie przed zgłoszeniem wyjątku. –
@Najczęściej aktualizowany ... –
@To możesz usunąć powiadomienia za pomocą 'del conn.notices [:]'. Nie możesz mieć powiadomień podczas wykonywania w trybie synchronizacji. Może w trybie asynchronicznym tak, ale nigdy tego nie próbowałem. – piro