Używam narzędzia bazy danych (Elixir's Ecto), które używa prepared statements dla większości zapytań PostgreSQL. Chcę dokładnie zobaczyć, jak i kiedy to zrobi.Jak mogę logować instrukcje `PREPARE` w PostgreSQL?
Znalazłem poprawny plik konfiguracyjny Postgres, postgresql.conf
, uruchamiając SHOW config_file;
w psql
. I edytowane go włączyć
log_statement = 'all'
jak Dogbert zasugerował here.
Zgodnie z the PostgreSQL 9.6 docs to ustawienie powinno spowodować zarejestrowanie PREPARE
instrukcji.
Po ponownym PostgreSQL, mogę tail -f
swój plik dziennika (jeden określony przez flagą -r
podczas uruchamiania postgres
wykonywalny) i widzę wpisy tak:
LOG: execute ecto_728: SELECT i0."id", i0."store_id", i0."title", i0."description"
FROM "items" AS i0 WHERE (i0."description" LIKE $1)
DETAIL: parameters: $1 = '%foo%'
ta odpowiada zapytaniu (aczkolwiek wykonane przez protokół binarny, myślę) jak
EXECUTE ecto_728('%foo%');
Jednakże nie widzę oryginalny PREPARE
że stworzony ecto_728
.
Próbowałem upuszczając i odtwarzając bazę danych. Następnie ta sama kwerenda jest wykonywana jako ecto_578
, więc wydaje się, że oryginalna przygotowana instrukcja została usunięta z bazy danych i utworzona została nowa.
Ale kiedy przeszukuję dziennik PostgreSQL dla ecto_578
, widzę tylko, że jest on wykonywany, a nie tworzony.
Jak mogę zobaczyć instrukcje PREPARE
w dzienniku PostgreSQL?
Dlaczego, z zainteresowania? Widzisz tekst zapytania w czasie wykonywania mimo to. –
@CraigRinger Brak praktycznego powodu. :) Chcę tylko zrozumieć narzędzia, których używam. Np. Jestem ciekaw, czy Ecto robi 'PREPARE' kiedy mój kod jest skompilowany lub kiedy uruchamiam moją aplikację. Przypuszczam, że mogę spróbować kompilacji, gdy PostgreSQL nie jest uruchomiony i zobacz, co się stanie. –
Okazuje się, że robi to 'PREPARE' tuż przed pierwszym wykonaniem zapytania w danej sesji, ponieważ [" nazwany gotowy obiekt instrukcji trwa do końca bieżącej sesji "] (https: // www. postgresql.org/docs/9.6/static/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY), więc nie ma na to innego sposobu. –