Mam funkcje debugowania w funkcjach. Te przesłania są podnoszone jak
RAISE NOTICE 'Value of id : %', id;
Ustawiam mój plik dziennika za pomocą \o messages.txt
Następnie robię to, co muszę zrobić \i process.sql
A gdy wykonanie jest rozwiązana \o
.
Problem polega na tym, że nie mam wiadomości podniesionych przez powiadomienia do messages.txt. Wiadomości są wyświetlane na ekranie, ale chcę, aby zostały napisane w messages.txt
Jak mogłem to zrobić?
Próbowałem użyć, RAISE LOG...
a wiadomości są zapisywane w pliku dziennika ... Nie tego chcę.
Mam z tym problem
plsql -f /path/to/process.sql > messages.txt 2>&1
ale chciałbym wiedzieć, jak mogę użyć \ i i \ o na kliencie plsql, który ma komunikaty w pliku określonym w \ o
Mój klient na cygwin to psql (PostgreSQL) 8.2.11, a wersja serwera to 9.0.7
postgresql
Luc M.
źródło
źródło
psql
?libpq
Mogę zrozumieć, jeśli masz nieprzenośne oprogramowanie, które musi działać w Cygwin, ale kiedypsql
jest dostępne natywnie dla systemu Windows, jaki jest urok uruchamiania starożytnej wersji na Cygwin?Odpowiedzi:
Obawiam się, że nie spodoba ci się ta odpowiedź, ale obecnie wydaje się to niemożliwe. Z dokumentacji psql :
Jak zauważyłeś, nie ma możliwości przekierowania komunikatów o błędach podczas korzystania
psql
interaktywnego.(Bawiłem się z wszelkiego rodzaju przekierowaniami od \ o do bezskuteczności. Wygląda na to, że kanał wyjściowy zapytania różni się od tego, w którym pojawiają się komunikaty o błędach - a nawet błędy z serwera i zgłaszane w twoich procedurach działają na różne sposoby .
out.sql zawiera
w obu przypadkach. Dlatego nie mam pojęcia, jakiego deskryptora kanału / pliku używa się do wyprowadzania komunikatów wywołanych przez procedurę.))
(Istnieje wątek na temat hakerów PostgreSQL, który może rzucić nieco światła na ten problem: http://postgresql.1045698.n5.nabble.com/psql-output-locations-td5068313.html )
Co można zrobić, to być może wychodząc
psql
jaka to przekieruje wszystkie dane wyjściowe do określonego pliku. Jedyny problem z tym, że nie masz nawet monitu i tracisz możliwości edycji wiersza poleceń.
źródło
\o | cat > out.sql 2>&1
przekierowuje standardowy błąd,cat
ale nie tenpsql
, więc nie ma sensu dla powiadomień.NOTICE
informacje?psql
, więc prawdopodobnie bez żadnych problemów.client_min_message
dodebug
wewnątrz mojej sesji i uruchomić jakieś zapytania SQL dynamiczne z (DO
- bez tworzenia funkcji), to podnosi zawiadomienie w pgAdmin przez nie z psql. Wydrukowałemclient_min_message
wartość przed wykonaniemDO
instrukcji. Pokazujedebug
, ale komunikat nie jest drukowany w konsoli.Możemy wykonać polecenie powłoki bezpośrednio z psql za pomocą
\!
polecenia meta.otwórz za
debug.txt
pomocą\e
.wiadomość o podniesieniu pojawi się w domyślnym edytorze. nieco podstępne, wciąż całkiem przydatne dla miłośnika CommandLine.
źródło
Nie jest to rozwiązanie pierwotnego pytania, ale dodatek do obejścia OP (które nie działało dla mnie)
Z następującymi nazwami: raiseTest.sql
Nie jestem pewien, dlaczego zapisywanie wyniku do pliku takiego jak zaznaczono w OP nie działa, ale pipowanie go do tee faktycznie się udało:
Tee zapisuje standardowe wejście w jeden lub więcej plików i powrót do standardowego wejścia. Będziesz więc mieć wszystkie instrukcje RAISE w konsoli i podanych plikach. (patrz strona podręcznika tee )
Konfiguracja:
źródło
NOTICE
podczas interaktywnej sesji i korzystania\o