postgresql_info – Gather information about PostgreSQL servers — Ansible Documentation

- AnsibleFest
- Products
- Community
- Webinars & Training
- Blog

Documentation

# postgresql_info – Gather information about PostgreSQL servers

New in version 2.8.

- Synopsis
- Requirements
- Parameters
- Notes
- Examples
- Return Values
- Status

## Synopsis

- Gathers information about PostgreSQL servers.

## Requirements

The below requirements are needed on the host that executes this module.

- psycopg2

## Parameters

Parameter | Choices/Defaults | Comments
--- | --- | ---
ca_cert string |  | Specifies the name of a file containing SSL certificate authority (CA) certificate(s). If the file exists, the server's certificate will be verified to be signed by one of these authorities. aliases: ssl_rootcert
db string |  | Name of database to connect. aliases: login_db
filter list |  | Limit the collected information by comma separated string or YAML list. Allowable values are `version`, `databases`, `settings`, `tablespaces`, `roles`, `replications`, `repl_slots`. By default, collects all subsets. You can use shell-style (fnmatch) wildcard to pass groups of values (see Examples). You can use '!' before value (for example, `!settings`) to exclude it from the information. If you pass including and excluding values to the filter, for example, filter=!settings,ver, the excluding values will be ignored.
login_host string |  | Host running the database.
login_password string |  | The password used to authenticate with.
login_unix_socket string |  | Path to a Unix domain socket for local connections.
login_user string | Default: "postgres" | The username used to authenticate with.
port integer | Default: 5432 | Database port to connect to. aliases: login_port
session_role string |  | Switch to session_role after connecting. The specified session_role must be a role that the current login_user is a member of. Permissions checking for SQL commands is carried out as though the session_role were the one that had logged in originally.
ssl_mode string | Choices: allow disable prefer ← require verify-ca verify-full | Determines whether or with what priority a secure SSL TCP/IP connection will be negotiated with the server. See https://www.postgresql.org/docs/current/static/libpq-ssl.html for more information on the modes. Default of `prefer` matches libpq default.

## Notes

Note

- The default authentication assumes that you are either logging in as or sudo’ing to the postgres account on the host.
- login_user or session_role must be able to read from pg_authid.
- To avoid “Peer authentication failed for user postgres” error, use postgres user as a become_user.
- This module uses psycopg2, a Python PostgreSQL database adapter. You must ensure that psycopg2 is installed on the host before using this module. If the remote host is the PostgreSQL server (which is the default case), then PostgreSQL must also be installed on the remote host. For Ubuntu-based systems, install the postgresql, libpq-dev, and python-psycopg2 packages on the remote host before using this module.
- The default authentication assumes that you are either logging in as or sudo’ing to the `postgres` account on the host.
- This module uses psycopg2, a Python PostgreSQL database adapter. You must ensure that psycopg2 is installed on the host before using this module. If the remote host is the PostgreSQL server (which is the default case), then PostgreSQL must also be installed on the remote host. For Ubuntu-based systems, install the `postgresql`, `libpq-dev`, and `python-psycopg2` packages on the remote host before using this module.
- The ca_cert parameter requires at least Postgres version 8.4 and psycopg2 version 2.4.3.

## Examples

    # Display info from postgres hosts.
    # ansible postgres -m postgresql_info

    # Display only databases and roles info from all hosts using shell-style wildcards:
    # ansible all -m postgresql_info -a 'filter=dat*,rol*'

    # Display only replications and repl_slots info from standby hosts using shell-style wildcards:
    # ansible standby -m postgresql_info -a 'filter=repl*'

    # Display all info from databases hosts except settings:
    # ansible databases -m postgresql_info -a 'filter=!settings'

    - name: Collect PostgreSQL version and extensions
      become: yes
      become_user: postgres
      postgresql_info:
        filter: ver*,ext*

    - name: Collect all info except settings and roles
      become: yes
      become_user: postgres
      postgresql_info:
        filter: "!settings,!roles"

    # On FreeBSD with PostgreSQL 9.5 version and lower use pgsql user to become
    # and pass "postgres" as a database to connect to
    - name: Collect tablespaces and repl_slots info
      become: yes
      become_user: pgsql
      postgresql_info:
        db: postgres
        filter:
        - tablesp*
        - repl_sl*

    - name: Collect all info except databases
      become: yes
      become_user: postgres
      postgresql_info:
        filter:
        - "!databases"

## Return Values

Common return values are documented here, the following are the fields unique to this module:

Key | Returned | Description
--- | --- | ---
databases dictionary | always | Information about databases. Sample: [{'postgres': {'collate': 'en_US.UTF-8', 'encoding': 'UTF8', 'owner': 'postgres', 'access_priv': '', 'ctype': 'en_US.UTF-8', 'size': '7997 kB'}}]
| database_name dictionary | always | Database name. Sample: template1
|  | access_priv string | always | Database access privileges. Sample: =c/postgres_npostgres=CTc/postgres
|  | collate string | always | Database collation https://www.postgresql.org/docs/current/collation.html. Sample: en_US.UTF-8
|  | ctype string | always | Database LC_CTYPE https://www.postgresql.org/docs/current/multibyte.html. Sample: en_US.UTF-8
|  | encoding string | always | Database encoding https://www.postgresql.org/docs/current/multibyte.html. Sample: UTF8
|  | extensions dictionary | always | Extensions https://www.postgresql.org/docs/current/sql-createextension.html. Sample: [{'plpgsql': {'description': 'PL/pgSQL procedural language', 'extversion': {'major': 1, 'minor': 0}}}]
|  |  | extdescription string | if existent | Extension description. Sample: PL/pgSQL procedural language
|  |  | extversion dictionary | always | Extension description.
|  |  | nspname string | always | Namespace where the extension is. Sample: pg_catalog
|  | languages dictionary | always | Procedural languages https://www.postgresql.org/docs/current/xplang.html. Sample: {'sql': {'lanowner': 'postgres', 'lanacl': ''}}
|  |  | lanacl string | always | Language access privileges https://www.postgresql.org/docs/current/catalog-pg-language.html. Sample: {postgres=UC/postgres,=U/postgres}
|  |  | lanowner string | always | Language owner https://www.postgresql.org/docs/current/catalog-pg-language.html. Sample: postgres
|  | namespaces dictionary | always | Namespaces (schema) https://www.postgresql.org/docs/current/sql-createschema.html. Sample: {'pg_catalog': {'nspowner': 'postgres', 'nspacl': '{postgres=UC/postgres,=U/postgres}'}}
|  |  | nspacl string | always | Access privileges https://www.postgresql.org/docs/current/catalog-pg-namespace.html. Sample: {postgres=UC/postgres,=U/postgres}
|  |  | nspowner string | always | Schema owner https://www.postgresql.org/docs/current/catalog-pg-namespace.html. Sample: postgres
|  | owner string | always | Database owner https://www.postgresql.org/docs/current/sql-createdatabase.html. Sample: postgres
|  | size string | always | Database size in bytes. Sample: 8189415
pending_restart_settings list | always | List of settings that are pending restart to be set. Sample: ['shared_buffers']
repl_slots dictionary | if existent | Replication slots (available in 9.4 and later) https://www.postgresql.org/docs/current/catalog-pg-replication-slots.html. Sample: {'slot0': {'active': False, 'slot_type': 'physical', 'database': None, 'plugin': None}}
| active boolean | always | True means that a receiver has connected to it, and it is currently reserving archives. Sample: True
| database string | always | Database name this slot is associated with, or null. Sample: acme
| plugin string | always | Base name of the shared object containing the output plugin this logical slot is using, or null for physical slots. Sample: pgoutput
| slot_type string | always | The slot type - physical or logical. Sample: logical
replications dictionary | if pg_stat_replication view existent | Information about the current replications by process PIDs https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-STATS-VIEWS-TABLE. Sample: [{76580: {'state': 'streaming', 'app_name': 'standby1', 'backend_start': '2019-02-03 00:14:33.908593+03', 'client_addr': '10.10.10.2', 'client_hostname': '', 'usename': 'postgres'}}]
| app_name string | if existent | Name of the application that is connected to this WAL sender. Sample: acme_srv
| backend_start string | always | Time when this process was started, i.e., when the client connected to this WAL sender. Sample: 2019-02-03 00:14:33.908593+03
| client_addr string | always | IP address of the client connected to this WAL sender. If this field is null, it indicates that the client is connected via a Unix socket on the server machine. Sample: 10.0.0.101
| client_hostname string | always | Host name of the connected client, as reported by a reverse DNS lookup of client_addr. This field will only be non-null for IP connections, and only when log_hostname is enabled. Sample: dbsrv1
| state string | always | Current WAL sender state. Sample: streaming
| usename string | always | Name of the user logged into this WAL sender process ('usename' is a column name in pg_stat_replication view). Sample: replication_user
roles dictionary | always | Information about roles https://www.postgresql.org/docs/current/user-manag.html. Sample: [{'test_role': {'valid_until': '9999-12-31T23:59:59.999999+00:00', 'superuser': False, 'canlogin': True, 'member_of': ['user_ro']}}]
| canlogin boolean | always | Login privilege https://www.postgresql.org/docs/current/role-attributes.html. Sample: True
| member_of list | always | Role membership https://www.postgresql.org/docs/current/role-membership.html. Sample: ['read_only_users']
| superuser boolean | always | User is a superuser or not.
| valid_until string | always | Password expiration date https://www.postgresql.org/docs/current/sql-alterrole.html. Sample: 9999-12-31T23:59:59.999999+00:00
settings dictionary | always | Information about run-time server parameters https://www.postgresql.org/docs/current/view-pg-settings.html. Sample: [{'work_mem': {'sourcefile': '/var/lib/pgsql/10/data/postgresql.auto.conf', 'min_val': '64', 'max_val': '2147483647', 'setting': '8192', 'vartype': 'integer', 'val_in_bytes': 4194304, 'context': 'user', 'boot_val': '4096', 'unit': 'kB'}}]
| boot_val string | always | Parameter value assumed at server startup if the parameter is not otherwise set. Sample: 4096
| context string | always | Context required to set the parameter's value. For more information see https://www.postgresql.org/docs/current/view-pg-settings.html. Sample: user
| max_val string | always | Maximum allowed value of the parameter (null for non-numeric values). Sample: 2147483647
| min_val string | always | Minimum allowed value of the parameter (null for non-numeric values). Sample: 64
| pending_restart boolean | always | True if the value has been changed in the configuration file but needs a restart; or false otherwise. Returns only if `settings` is passed.
| pretty_val string | always | Value presented in the pretty form. Sample: 2MB
| setting string | always | Current value of the parameter. Sample: 49152
| sourcefile string | always | Configuration file the current value was set in. Null for values set from sources other than configuration files, or when examined by a user who is neither a superuser or a member of pg_read_all_settings. Helpful when using include directives in configuration files. Sample: /var/lib/pgsql/10/data/postgresql.auto.conf
| unit string | always | Implicit unit of the parameter. Sample: kB
| val_in_bytes integer | if supported | Current value of the parameter in bytes. Sample: 2147483647
| vartype string | always | Parameter type (bool, enum, integer, real, or string). Sample: integer
tablespaces dictionary | always | Information about tablespaces https://www.postgresql.org/docs/current/catalog-pg-tablespace.html. Sample: [{'test': {'spcoptions': ['seq_page_cost=1'], 'spcacl': '{postgres=C/postgres,andreyk=C/postgres}', 'spcowner': 'postgres'}}]
| spcacl string | always | Tablespace access privileges. Sample: {postgres=C/postgres,andreyk=C/postgres}
| spcoptions list | always | Tablespace-level options. Sample: ['seq_page_cost=1']
| spcowner string | always | Owner of the tablespace. Sample: test_user
version dictionary | always | Database server version https://www.postgresql.org/support/versioning/. Sample: {'version': {'major': 10, 'minor': 6}}
| major integer | always | Major server version. Sample: 11
| minor integer | always | Minor server version. Sample: 1

## Status

- This module is not guaranteed to have a backwards compatible interface. [preview]
- This module is maintained by the Ansible Community. [community]

### Authors

- Andrew Klychkov (@Andersson007)

Hint

If you notice any issues in this documentation you can edit this document to improve it.