Eu segui as instruções dadas abaixo:
http://www.postgresql.org/docs/9.3/static/pgstatstatements.html
... para o efeito de adicionar as seguintes linhas:
# postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
No arquivo postgresql.conf
e reiniciando o servidor, mas a tabela pg_stat_statements
ainda não está visível:
$ cat /usr/share/postgresql/9.3/postgresql.conf | grep -A3 ^shared_preload_libraries
shared_preload_libraries = 'pg_stat_statements' # (change requires restart)
pg_stat_statements.max = 10000
pg_stat_statements.track = all
$ sudo /etc/init.d/postgresql restart
* Restarting PostgreSQL 9.3 database server [ OK ]
$ psql -U postgres
psql (9.3.10)
Type "help" for help.
postgres=# select count(*) from pg_stat_activity;
count
-------
1
(1 row)
postgres=# select count(*) from pg_stat_statements;
ERROR: relation "pg_stat_statements" does not exist
atualizar
Depois de executar:
sudo apt-get install postgresql-contrib-9.3
E então fazendo:
$ psql -U postgres
psql (9.4.5, server 9.3.10)
Type "help" for help.
postgres=# create extension pg_stat_statements;
CREATE EXTENSION
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
--------------------+---------+------------+-----------------------------------------------------------
pg_stat_statements | 1.1 | public | track execution statistics of all SQL statements executed
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)
postgres=# \quit
$ sudo /etc/init.d/postgresql restart
* Restarting PostgreSQL 9.3 database server [OK]
... Agora eu entendo:
postgres=# select * from pg_stat_statements ;
ERROR: pg_stat_statements must be loaded via shared_preload_libraries
detalhes do sistema
Eu estou correndo Ubuntu 14.04.03 LTS
. PostgreSQL foi instalado com apt-get install
.
rastreamento de log do PostgreSQL durante uma reinicialização
Ao fazer um sudo /etc/init.d/postgresql restart
, recebo o seguinte rastreamento de log:
$ tail -f /var/log/postgresql/postgresql-9.3-main.log
2015-12-21 11:11:31 EET [23790-2] LOG: received fast shutdown request
2015-12-21 11:11:31 EET [23790-3] LOG: aborting any active transactions
2015-12-21 11:11:31 EET [7231-1] esavo-user@RegTAP FATAL: terminating connection due to administrator command
2015-12-21 11:11:31 EET [23903-5] postgres@postgres FATAL: terminating connection due to administrator command
2015-12-21 11:11:31 EET [23822-7] esavo-user@RegTAP FATAL: terminating connection due to administrator command
2015-12-21 11:11:31 EET [23795-2] LOG: autovacuum launcher shutting down
2015-12-21 11:11:31 EET [23815-1] esavo-user@RegTAP FATAL: terminating connection due to administrator command
2015-12-21 11:11:31 EET [23792-1] LOG: shutting down
2015-12-21 11:11:31 EET [23792-2] LOG: database system is shut down
2015-12-21 11:11:32 EET [16886-1] LOG: database system was shut down at 2015-12-21 11:11:31 EET
2015-12-21 11:11:32 EET [16886-2] LOG: MultiXact member wraparound protections are now enabled
2015-12-21 11:11:32 EET [16885-1] LOG: database system is ready to accept connections
2015-12-21 11:11:32 EET [16890-1] LOG: autovacuum launcher started
2015-12-21 11:11:33 EET [16892-1] [unknown]@[unknown] LOG: incomplete startup packet
Versões recentes do Postgres instalam arquivos conf em locais diferentes dos que costumavam estar. Às vezes, existe um arquivo .conf de modelo (mas não é realmente usado) e também um arquivo .conf ativo (em um local completamente diferente) . Eu descobri isso vasculhando os arquivos /etc/init.d. É possível que o arquivo .conf que você editou não seja realmente o que está sendo utilizado pelo banco de dados.
Você pode encontrar a localização do arquivo conf usado pelo seu banco de dados conectando-se ao banco de dados e consultando
SHOW config_file
Aqui está um link para sua pergunta de acompanhamento (caso alguém no futuro ache útil)