web-dev-qa-db-fra.com

pg_stat_statements introuvable même avec "shared_preload_libraries = 'pg_stat_statements'

J'ai suivi les instructions ci-dessous:

http://www.postgresql.org/docs/9.3/static/pgstatstatements.html

... à l'effet d'ajouter les lignes suivantes:

# postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all

Dans le fichier postgresql.conf puis redémarrer le serveur mais la table pg_stat_statements n'est toujours pas visible:

$ 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

mise à jour

Après l'exécution:

Sudo apt-get install postgresql-contrib-9.3

Et puis faire:

$ 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]

... je reçois maintenant:

postgres=# select * from pg_stat_statements ;
ERROR:  pg_stat_statements must be loaded via shared_preload_libraries

détails du système

Je cours sur Ubuntu 14.04.03 LTS. PostgreSQL a été installé avec apt-get install.

journal trace de PostgreSQL lors d'un redémarrage

Tout en faisant un Sudo /etc/init.d/postgresql restart J'obtiens la trace de journal suivante:

$ 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
8

Les versions récentes de Postgres installent les fichiers conf à différents emplacements qu'auparavant. Il existe parfois un fichier .conf modèle qui existe (mais qui n'est pas réellement utilisé), puis également un fichier .conf actif (à un emplacement complètement différent) . J'ai découvert cela en parcourant les fichiers /etc/init.d. Il est possible que le fichier .conf que vous avez modifié ne soit pas réellement celui qui est utilisé par la base de données.

Vous pouvez trouver l'emplacement du fichier conf utilisé par votre base de données en vous connectant à la base de données et en interrogeant SHOW config_file

Voici un lien vers votre question de suivi (au cas où quelqu'un à l'avenir le trouverait utile)

1
Joishi Bodio