.. _pg_autoctl_show_uri:

pg_autoctl show uri
===================

pg_autoctl show uri - Show the postgres uri to use to connect to
pg_auto_failover nodes

Synopsis
--------

This command outputs the monitor or the coordinator Postgres URI to use from
an application to connect to Postgres::

  usage: pg_autoctl show uri  [ --pgdata --monitor --formation --json ]

    --pgdata      path to data directory
    --monitor     monitor uri
    --formation   show the coordinator uri of given formation
    --json        output data in the JSON format

Options
-------

--pgdata

  Location of the Postgres node being managed locally. Defaults to the
  environment variable ``PGDATA``. Use ``--monitor`` to connect to a monitor
  from anywhere, rather than the monitor URI used by a local Postgres node
  managed with ``pg_autoctl``.

--monitor

  Postgres URI used to connect to the monitor. Must use the ``autoctl_node``
  username and target the ``pg_auto_failover`` database name. It is possible
  to show the Postgres URI from the monitor node using the command
  :ref:`pg_autoctl_show_uri`.

  Defaults to the value of the environment variable ``PG_AUTOCTL_MONITOR``.

--formation

  When ``--formation`` is used, lists the Postgres URIs of all known
  formations on the monitor.

--json

  Output a JSON formatted data instead of a table formatted list.

Environment
-----------

PGDATA

  Postgres directory location. Can be used instead of the ``--pgdata``
  option.

PG_AUTOCTL_MONITOR

  Postgres URI to connect to the monitor node, can be used instead of the
  ``--monitor`` option.

XDG_CONFIG_HOME

  The pg_autoctl command stores its configuration files in the standard
  place XDG_CONFIG_HOME. See the `XDG Base Directory Specification`__.

  __ https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
  
XDG_DATA_HOME

  The pg_autoctl command stores its internal states files in the standard
  place XDG_DATA_HOME, which defaults to ``~/.local/share``. See the `XDG
  Base Directory Specification`__.

  __ https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html

  
Examples
--------

::

   $ pg_autoctl show uri
           Type |    Name | Connection String
   -------------+---------+-------------------------------
        monitor | monitor | postgres://autoctl_node@localhost:5500/pg_auto_failover
      formation | default | postgres://localhost:5502,localhost:5503,localhost:5501/demo?target_session_attrs=read-write&sslmode=prefer

   $ pg_autoctl show uri --formation monitor
   postgres://autoctl_node@localhost:5500/pg_auto_failover

   $ pg_autoctl show uri --formation default
   postgres://localhost:5503,localhost:5502,localhost:5501/demo?target_session_attrs=read-write&sslmode=prefer

   $ pg_autoctl show uri --json
   [
    {
        "uri": "postgres://autoctl_node@localhost:5500/pg_auto_failover",
        "name": "monitor",
        "type": "monitor"
    },
    {
        "uri": "postgres://localhost:5503,localhost:5502,localhost:5501/demo?target_session_attrs=read-write&sslmode=prefer",
        "name": "default",
        "type": "formation"
    }
   ]


Multi-hosts Postgres connection strings
---------------------------------------

PostgreSQL since version 10 includes support for multiple hosts in its
connection driver ``libpq``, with the special ``target_session_attrs``
connection property.

This multi-hosts connection string facility allows applications to keep
using the same stable connection string over server-side failovers. That's
why ``pg_autoctl show uri`` uses that format.
