The pg_stat_statements module
provides a means for tracking execution statistics of all SQL
statements executed by a server.

The module must be loaded by adding pg_stat_statements to shared_preload_libraries
in postgresql.conf, because it requires
additional shared memory. This means that a server restart is
needed to add or remove the module.

The statistics gathered by the module are made available via
a system view named pg_stat_statements. This view contains one
row for each distinct query text, database ID, and user ID (up
to the maximum number of distinct statements that the module
can track). The columns of the view are shown in Table
F-20.

This view, and the function pg_stat_statements_reset, are available only
in databases they have been specifically installed into by
running the pg_stat_statements.sql
install script. However, statistics are tracked across all
databases of the server whenever the pg_stat_statements module is loaded into the
server, regardless of presence of the view.

For security reasons, non-superusers are not allowed to see
the text of queries executed by other users. They can see the
statistics, however, if the view has been installed in their
database.

Note that statements are considered the same if they have
the same text, regardless of the values of any out-of-line
parameters used in the statement. Using out-of-line parameters
will help to group statements together and may make the
statistics more useful.

pg_stat_statements.max is the
maximum number of statements tracked by the module (i.e.,
the maximum number of rows in the pg_stat_statements view). If more
distinct statements than that are observed, information
about the least-executed statements is discarded. The
default value is 1000. This parameter can only be set at
server start.

pg_stat_statements.track
(enum)

pg_stat_statements.track
controls which statements are counted by the module.
Specify top to track top-level
statements (those issued directly by clients), all to also track nested statements (such
as statements invoked within functions), or none to disable. The default value is
top. Only superusers can change
this setting.

pg_stat_statements.track_utility (boolean)

pg_stat_statements.track_utility controls
whether utility commands are tracked by the module.
Utility commands are all those other than SELECT, INSERT,
UPDATE and DELETE. The default value is on. Only superusers can change this
setting.

pg_stat_statements.save
(boolean)

pg_stat_statements.save
specifies whether to save statement statistics across
server shutdowns. If it is off
then statistics are not saved at shutdown nor reloaded at
server start. The default value is on. This parameter can only be set in the
postgresql.conf file or on the
server command line.

The module requires additional shared memory amounting to
about pg_stat_statements.max*track_activity_query_size
bytes. Note that this memory is consumed whenever the module is
loaded, even if pg_stat_statements.track is set to none.

In order to set any of these parameters in your postgresql.conf file, you will need to add
pg_stat_statements to custom_variable_classes.
Typical usage might be: