Registering a Postgres server
=============================

Before you can manage or monitor a database server with PEM, you must
register the database server with PEM and bind the database server to a
previously registered PEM agent. You can bind a database server to a
remote agent (an agent that resides on a different host). However, if
the agent resides on a different host, it doesn’t have access to all of
the statistical information about the instance.

What does registering a Postgres server do?
-------------------------------------------

Registering a server does two things:

- It adds the server to the server tree in the PEM web application,
  allowing users to open connections from the web application to the
  server. - It binds the server to a particular agent, meaning that
  agent will open connections to the server to execute probes and
  scheduled jobs.

..  Note Connections from the agent to the monitored server::
   During agent registration, you're required to provide connection details for the agent to connect to the monitored server. As you normally do for Postgres, you must specify the database to connect to.  However, the PEM agent will monitor **every database accessible to the specified user**, not just the database specified.

After registration, the agent opens a connection to the specified
database. It uses this connection to determine the other databases it
can connect to with the same user and then spawns one connection to
each.

.. ::
   ## How to register a Postgres server

There are three ways to register a server.

- :ref:`Using the pemworker utility to register a server <Using the pemworker utility to register a server>`  from the command line on the host where the agent you
  want to bind is located. - :ref:`Registering a server with automatic server discovery <Registering a server with automatic server discovery>`  in the PEM web application to
  automatically register Postgres servers located on the same host as an
  agent. - :ref:`Manually registering a database server <Manually registering a database server>`  by adding all the details in the PEM web
  application.

Using the pemworker utility to register a server
------------------------------------------------

You can use the pemworker utility to register a Postgres server. During
registration, the pemworker utility binds the new server to the agent
that resides on the system from which you invoked the registration
command.

To register a server on a Linux host, use the command:

``pemworker --register-server``

To register a server on a Windows host, use the command:

``pemworker.exe REGISTER-SERVER``

Append command line options to the command string when invoking the
pemworker utility. Follow each option with a corresponding value.

.. csv-table::
  :header: Option,Description
  :widths: 10,30
  :align: left
  :class: longtable

  `--pem-user`,Specifies the name of the PEM administrative user (must have the pem_admin role) on the PEM server to use to write the server details to the PEM database. Required.
  **Server parameters** ,These parameters are used to populate the connection properties in the PEM web application. They're used when a user connects from the PEM web application to the monitored server. They're also used for connections from the agent to the monitored server unless overridden by Agent Server Binding parameters (see the   **Agent-server binding parameters**   in this table).
  `--server-addr`,"Specifies the IP address or fully qualified domain name of the monitored server. On Linux systems, you can leave the address field blank to use the default PostgreSQL Unix Domain Socket on the local machine. Or you can set it to an alternative path containing a PostgreSQL socket. If you enter a path, the path must begin with a forward slash (/). Required."
  `--server-port`,Specifies the port number of the monitored server. Required.
  `--server-database`,Specifies the name of the database on the monitored server to which to connect. Required.
  `--server-user`,Specifies the name of the user used to connect to the monitored server. Required.
  `--server-service-name`,"Specifies the name of the operating system service that manages the monitored Postgres server, for example, a systemd service unit on Linux. Optional."
  **Agent-server binding parameters** ,Use these parameters to override the server parameters. Use these if you want the agent to connect to the monitored server using different credentials from those used by the PEM web application.
  `--asb-host-name`,"Specifies the IP address or fully qualified domain name of the monitored server. Optional, defaults to `--server-addr` if not supplied."
  `--asb-host-port`,"Specifies the port number of the monitored server. Optional, defaults to `--server-port` if not supplied."
  `--asb-host-db`,"Specifies the name of the database on the monitored server to which the agent connects. Optional, defaults to `--server-database` if not supplied."
  `--asb-host-user`,"Specifies the name of the user used by the agent to connect to the monitored server. Optional, defaults to `--server-user` if not supplied."
  `--asb-ssl-mode`,"Specifies the type of SSL authentication to use for connections. Supported values include: `prefer`, `require`, `disable`, `verify-CA`, and `verify-full`. Optional, defaults to `prefer`."
  **Server metadata** ,These parameters determine how the server is shown in the PEM web application.
  `--group`,Specifies the name of the group in which the server is displayed. Optional.
  `--team`,"Specifies a Postgres role on the PEM server to be assigned as the team to which the monitored server belongs. Only users with this role can access the server. Optional, defaults to none, meaning all users can access."
  `--owner`,"Specifies a Postgres user on the PEM server to assign as the owner of the monitored server. Optional, defaults to `--pem-user`."
  `--display-name <name>`,"Specifies the display name of the monitored database server. Optional, defaults to the system hostname."
  **Other parameters** ,""
  `--remote-monitoring`,"Set to `yes` if the server isn't located on the same host as the agent. When remote monitoring is enabled (`yes`), agent-level statistics for the monitored server aren't available for custom charts and dashboards, and the remote server isn't accessible by some PEM utilities (such as Audit Manager, Capacity Manager, Log Manager). Optional, defaults to `no`."
  `--efm-cluster-name`,Specifies the name of the EDB Failover Manager cluster that monitors the server (if applicable). Optional.
  `--efm-install-path`,Specifies the complete path to the installation directory of EDB Failover Manager (if applicable). Optional.
  `--config-dir`,"Specifies the directory path of the agent configuration file. Optional, defaults to `<pemworker path>/../etc`."

Set the environment variable ``PEM_SERVER_PASSWORD`` to provide the
password for the PEM server to allow the pemworker to connect as a PEM
admin user.

Set the environment variable ``PEM_MONITORED_SERVER_PASSWORD`` to
provide the password of the database server being registered and
monitored by the PEM agent.

If you don’t provide the password, a password authentication error
occurs. The PEM server acknowledges that the server was registered
properly.

Examples
^^^^^^^^

This example registers a server using only the required parameters. The
user ``admin01`` will be used to connect to the PEM server. The
credentials supplied for the ``--server-*`` parameters will be used to
create a connection from the agent to the monitored server. The same
details will also be used to populate the server connection details in
the PEM web application.

.. code:: shell

   pemworker --register-server \
             --pem-user admin01 \
             --server-addr pg123.prod.infra.business \
             --server-port 5432 \
             --server-database postgres \
             --server-user prod_admin 

The following example specifies different parameters to used for the
connection from the agent to the monitored server. They override the
fully qualified domain name provided in ``--server-addr`` with
``localhost`` instead. They also override the user to use a
``local_monitor`` user. This might be a user who’s permitted to connect
only from the same host, for example.

This example also specifies a service name, ``postgresql`` , which means
the PEM agent can restart this server to apply configuration changes.

.. code:: shell

   pemworker --register-server \
             --pem-user admin01 \
             --server-addr pg123.prod.infra.business \
             --server-port 5432 \
             --server-database postgres \
             --server-user prod_admin \
             --server-service-name postgresql \
             --asb-host-name localhost \
             --asb-host-user local_monitor 

Using the pemworker utility to unregister a server
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

You can use the pemworker utility to unregister a database server. To
unregister a server, invoke the pemworker utility.

On a Linux host, use the command:

``pemworker --unregister-server``

On a Windows host, use the command:

``pemworker.exe UNREGISTER-SERVER``

Append command line options to the command string when invoking the
pemworker utility. Follow each option with by a corresponding value:

.. csv-table::
  :header: Option,Description
  :widths: 10,30
  :align: left
  :class: longtable

  `--pem-user`,Specifies the name of the PEM administrative user. Required.
  `--server-addr`,"Specifies the IP address of the server host or the fully qualified domain name. On Unix-based systems, you can leave the address field blank to use the default PostgreSQL Unix Domain Socket on the local machine. Or, you can set it to an alternatibe path containing a PostgreSQL socket. If you enter a path, the path must begin with a forward slash (/). Required."
  `--server-port`,Specifies the port number of the host. Required.
  `--config-dir`,"Specifies the directory path of the agent configuration file. Optional, defaults to `<pemworker path>/../etc`."

Use the ``PEM_SERVER_PASSWORD`` environment variable to provide the
password for the PEM server to allow the pemworker utility to connect to
the PEM server as ``--pem-user`` .

If you don’t provide the password, a password authentication error
occurs. The PEM server acknowledges that the server is unregistered.

Registering a server with automatic server discovery
----------------------------------------------------

If the server you want to monitor resides on the same host as the
monitoring agent, you can use the Auto Discovery dialog box to simplify
the registration and binding process.

..  Note Limitations of automatic discovery::
   Automatic server discovery doesn't perform an exhaustive search for Postgres binaries or services. It detects only the Postgres instances created directly by the package installer.

To enable auto discovery for a specific agent, you must enable the
Server Auto Discovery probe. To do so, select the PEM agent in the PEM
client tree, and select **Management > Manage Probes**. When the
**Manage Probes** tab opens, confirm that the slider in the **Enabled?**
column is set to **Yes**.

To open the Auto Discovery dialog box, select a PEM agent in the PEM
client tree and select **Management > Auto Discovery**.

When the Auto Discovery dialog box opens, the **Discovered Database
Servers** box displays a list of servers that currently aren’t being
monitored by a PEM agent. Select the box next to a server name to
display information about the server in the **Server Connection
Details** box and connection properties for the agent in the **Agent
Connection Details** box.

Use **Check All** to select the box next to all of the displayed servers
or **Uncheck All** to clear all of the boxes to the left of the server
names.

The fields in the **Server Connection Details** box provide information
about the server that PEM monitors:

- Accept or modify the name of the monitored server in the **Name**
  field. The specified name is displayed in the tree of the PEM client.

- Use the **Server group** list to select the server group under which
  the server is displayed in the PEM client tree.

- Use the **Host name/address** field to specify the IP address of the
  monitored server.

- The **Port** field displays the port that’s monitored by the server.
  You can’t modify this field.

- Provide the name of the service in the **Service ID** field. You must
  provide the service name to enable some PEM functionality.

- The **Maintenance database** field specifies the database to use for
  the initial connection and any global maintenance operations.
  Customize the content of the **Maintenance database** field for your
  installation.

The fields in the **Agent Connection Details** box specify the
properties for the PEM agent to use when connecting to the server:

- The **Host** field displays the IP address used for the PEM agent
  binding.

- The **User name** field displays the name used by the PEM agent when
  connecting to the selected server.

- The **Password** field displays the password associated with the
  specified user name.

- Use the **SSL mode** field to specify your SSL connection preferences.

After you finish specifying the connection properties for the servers
that you’re binding for monitoring, select **OK** to register the
servers.

After selecting **OK**, the newly registered server is displayed in the
PEM tree and is monitored by the PEM server.

Manually registering a database server
--------------------------------------

To manage or monitor a database server with PEM, you must:

- Register your EDB Postgres Advanced Server or PostgreSQL server with
  the PEM server.

- Bind the database server to a PEM agent.

You can use the Create Server dialog box to provide registration
information for a server, bind a PEM agent, and display the server in
the PEM client tree. To open the Create Server dialog box, select
**Object > Create > Server**.

..  Note::
   -   You must ensure the `pg_hba.conf`  file of the Postgres server that you're registering allows connections from the host of the PEM client before attempting to connect. -   Only database superusers or users with the `pem_admin`  role can bind a database server to a PEM agent.

Use the **General** tab to describe the general properties of the
server:

- Use the **Name** field to specify a name for the server. The name
  identifies the server in the PEM browser tree.

- You can use groups to organize your servers and agents in the tree.
  Using groups can help you manage large numbers of servers more easily.
  For example, you can have a production group, a test group, or
  LAN-specific groups. Use the **Group** list to select the server group
  in which to display the new server.

- Use the **Team** field to specify a PostgreSQL role name. Only PEM
  users who are members of this role, who created the server initially,
  or have superuser privileges on the PEM server see this server when
  they log in to PEM. If this field is left blank, by default all PEM
  users see the server. You can use the ``show_objects_with_no_team``
  parameter in the Server Configuration dialog box to change the
  behavior. If ``show_objects_with_no_team`` is set to ``false`` , the
  server with no team isn’t visible to all other users.

- Use the **Background** color selector to select the color to display
  in the PEM tree behind database objects that are stored on the server.

- Use the **Foreground** color selector to select the font color of
  labels in the PEM tree for objects stored on the server.

- Select **Connect now?** to attempt a server connection when you select
  **Save**. Clear **Connect now?** if you don’t want the PEM client to
  validate the specified connection parameters until a later connection
  attempt.

- Provide notes about the server in the **Comments** field.

Use the **Connection tab** to specify connection details for the server:

- Specify the IP address of the server host or the fully qualified
  domain name in the **Host name/address** field. On Unix-based systems,
  leave the address field blank to use the default PostgreSQL Unix
  Domain Socket on the local machine. Or you can set an alternative path
  containing a PostgreSQL socket. If you enter a path, the path must
  begin with a forward slash (/).

- Specify the port number of the host in the **Port** field.

- Use the **Maintenance database** field to specify the name of the
  initial database for PEM to connect to that’s expected to contain
  pgAgent schema and adminpack objects installed (both optional). On
  PostgreSQL version 8.1 and later, the maintenance DB is normally
  called ``postgres`` . On earlier versions ``template1`` is often used,
  although it’s better to create a ``postgres`` database to avoid
  cluttering the template database.

- Set **Kerberos Authentication** to **Yes** to use the Kerberos
  authentication for a monitored server. By default, the monitored
  server uses the same authentication method as the PEM server. If the
  monitored server doesn’t want to use Kerberos authentication, then set
  ``ALLOW_DATABASE_CONNECTION_WITHOUT_KERBEROS`` to ``TRUE`` in the
  ``config_local.py`` file.

- Specify the name to use when authenticating with the server in the
  **Username** field.

- Provide the password associated with the specified user in the
  **Password** field.

- Select **Save password?** to store passwords in encrypted format in a
  PEM backend database for later reuse. Each password is stored on a
  per-user, per-server basis and isn’t shared with other team members.
  PEM uses the saved password to connect the database server next time.
  To remove a saved password, disconnect the database server first, and
  then select **Object > Clear Saved Password**.

- Use the **Role** field to specify the name of the role that’s assigned
  the privileges for the client to use after connecting to the server.
  This value allows you to connect as one role and then assume the
  permissions of another role (the one you specified in this field) when
  the connection is established. The connecting role must be a member of
  the role specified.

Use the **SSL** tab to configure SSL:

- In the **SSL mode** field, select the type of SSL connection for the
  server to use. For more information about using SSL encryption, see
  `the PostgreSQL documentation <https://www.postgresql.org/docs/current/static/libpq-ssl.html>`_  .

You can use the platform-specific file manager dialog box to upload
files that support SSL encryption to the server. To open the file
manager, select the icon located to the right of each of the following
fields:

- Use the **Client certificate** field to specify the file containing
  the client SSL certificate. This file replaces the default
  ``~/.postgresql/postgresql.crt`` file if PEM is installed in Desktop
  mode and ``<STORAGE_DIR>/<USERNAME>/.postgresql/postgresql.crt`` if
  PEM is installed in Web mode. This parameter is ignored if an SSL
  connection isn’t made.

- Use the **Client certificate key** field to specify the file
  containing the secret key used for the client certificate. This file
  replaces the default ``~/.postgresql/postgresql.key`` if PEM is
  installed in Desktop mode and
  ``<STORAGE_DIR>/<USERNAME>/.postgresql/postgresql.key`` if PEM is
  installed in Web mode. This parameter is ignored if an SSL connection
  isn’t made.

- Use the **Root certificate** field to specify the file containing the
  SSL certificate authority. This file replaces the default
  ``~/.postgresql/root.crt`` file. This parameter is ignored if an SSL
  connection isn’t made.

- Use the **Certificate revocation list** field to specify the file
  containing the SSL certificate revocation list. This list replaces the
  default list, found in ``~/.postgresql/root.crl`` . This parameter is
  ignored if an SSL connection isn’t made.

- When **SSL compression?** is set to **True**, data sent over SSL
  connections is compressed. The default value is **False** (compression
  is disabled). This parameter is ignored if an SSL connection isn’t
  made.

..  Warning ::
   Certificates, private keys, and the revocation list are stored in the per-user file storage area on the server, which is owned by the user account under which the PEM server process is run. This means that administrators of the server might be able to access those files. Use caution before using this feature.

Use the **SSH Tunnel** tab to configure SSH tunneling. You can use a
tunnel to connect a database server through an intermediary proxy host
to a server that resides on a network to which the client might not be
able to connect directly.

- Set **Use SSH tunneling** to **Yes** to use an SSH tunnel when
  connecting to the specified server.

- Specify the name or IP address of the SSH host (through which client
  connections are forwarded) in the **Tunnel host** field.

- Specify the port of the SSH host through which client connections are
  forwarded in the **Tunnel port** field.

- Specify the name of a user with login privileges for the SSH host in
  the **Username** field.

- Specify the type of authentication to use when connecting to the SSH
  host in the **Authentication** field.

- Select **Password** to use a password for authentication to the SSH
  host. This is the default.

- Select **Identity file** to use a private key file when connecting.

- If the SSH host is expecting a private key file for authentication,
  use the **Identity file** field to specify the location of the key
  file.

- If the SSH host is expecting a password, use the **Password** field to
  specify the password. If an identity file is being used, specify the
  passphrase.

Use the **Advanced** tab to specify details that are used to manage the
server:

- Specify the IP address of the server host in the **Host Address**
  field.

- Use the **DB restriction** field to specify a SQL restriction to use
  against the `pg_database <http://www.postgresql.org/docs/current/interactive/catalog-pg-database.html>`_  table to limit the databases displayed in
  the tree. For example, you might enter: ``'live_db'`` , ``'test_db'``
  to display only the ``live_db`` and ``test_db`` databases. You can
  also limit the schemas shown in the database from the database
  Properties dialog box by entering a restriction against `pg_namespace <http://www.postgresql.org/docs/current/interactive/catalog-pg-namespace.html>`_ 
  .

- Use the **Password file** field to specify the location of a password
  file (``.pgpass`` ). The ``.pgpass`` file allows a user to log in
  without providing a password when they connect. The file must be
  present on the PEM server. For more information, see the `Postgres documentation <http://www.postgresql.org/docs/current/static/libpq-pgpass.html>`_ 
  .

- Use the **Service ID** field to specify parameters to the database
  service process. For servers that are stored in the Enterprise Manager
  directory, enter the service ID. On Windows machines, this is the
  identifier for the Windows service. On Linux machines, the name of the
  init script used to start the server is ``/etc/init.d`` and the name
  of the systemd script to start the server is ``systemctl`` . For
  example, the name of the EDB Postgres Advanced Server 11 service is
  ``edb-as-11`` . For local servers, the setting is operating system
  dependent:

- If the PEM client is running on a Windows machine, it can control the
  postmaster service if you have enough access rights. Enter the name of
  the service. In case of a remote server, prepend it with the machine
  name (such as ``PSE1\pgsql-8.0`` ). PEM automatically discovers
  services running on your local machine.

- If the PEM client is running on a Linux machine, it can control
  processes running on the local machine if you have enough access
  rights. Provide a full path and needed options to access the
  ``pg_ctl`` program. When executing service control functions, PEM
  appends status/start/stop keywords to this. For example:

``sudo /usr/pgsql-x/bin/pg_ctl -D /var/lib/pgsql/x/data``

where ``x`` is the version of the PostgreSQL database server.

- If the server is a member of a Failover Manager cluster, you can use
  PEM to monitor the health of the cluster and to replace the primary
  node if necessary. To enable PEM to monitor Failover Manager, use the
  **EFM cluster name** field to specify the cluster name. The cluster
  name is the prefix of the name of the Failover Manager cluster
  properties file. For example, if the cluster properties file is named
  ``efm.properties`` , the cluster name is efm.

- If you’re using PEM to monitor the status of a Failover Manager
  cluster, use the **EFM installation path** field to specify the
  location of the Failover Manager binary file. By default, the Failover
  Manager binary file is installed in ``/usr/edb/efm-x.x/bin`` , where
  ``x.x`` specifies the Failover Manager version.

Use the **PEM Agent** tab to specify connection details for the PEM
agent.

On the **Connection Parameters** tab:

- Set **Remote monitoring?** to **Yes** to indicate that the PEM agent
  doesn’t reside on the same host as the monitored server. When remote
  monitoring is enabled, agent level statistics for the monitored server
  aren’t available for custom charts and dashboards, and the remote
  server can’t be accessed by some PEM utilities (such as Audit Manager,
  Capacity Manager, Log Manager).

- Use the **Bound agent** list to select a PEM agent. One agent can
  monitor multiple Postgres servers.

- In the **Host** field, enter the IP address or socket path for the
  agent to use when connecting to the database server. By default, the
  agent uses the host address shown on the **General** tab. On a Unix
  server, you might want to specify a socket path, such as ``/tmp`` .

- Enter the port number for the agent to use when connecting to the
  server. By default, the agent uses the port defined on the
  **Properties** tab.

- Use the **SSL** field to specify an SSL operational mode. Specify
  **require**, **prefer**, **allow**, **disable**, **verify-ca**, or
  **verify-full**.

.. csv-table::
  :header: Mode,Description
  :widths: 10,30
  :align: left
  :class: longtable

  require,Require SSL encryption for transactions between the server and the agent.
  prefer,Use SSL encryption between the server and the agent if SSL encryption is available.
  allow,Allow the connection to use SSL if required by the server.
  disable,Disable SSL encryption between the agent and the server.
  verify-ca,Require SSL encryption and require the server to authenticate using a certificate registered by a certificate authority.
  verify-full,Require SSL encryption and require the server to authenticate using a certificate registered by a trusted certificate authority.

For more information about using SSL encryption, see the `PostgreSQL documentation <https://www.postgresql.org/docs/12.1/libpq-ssl.html>`_  .

- Use the **Database** field to specify the name of the Postgres
  database to which the agent initially connects. If you’re registering
  a EDB Postgres Distributed database node then specify the EDB Postgres
  Distributed-enabled database name in this field.

- In the **User name** field, specify the name of the role for the agent
  to use when connecting to the server. The specified role must be a
  database superuser for all of the features to work as expected. For
  the list of features that don’t work if the specified role isn’t a
  database superuser, see :ref:`Setting agent privileges <Setting agent privileges>`  . If you’re using the Kerberos
  authentication method, then specify the user having the pgd_monitor or
  pgd_superuser role in this field.

If you’re using Postgres version 10 or later, you can use the pg_monitor
role to grant the required privileges to a non-superuser. For
information about the pg_monitor role, see `Default Roles <https://www.postgresql.org/docs/current/default-roles.html>`_  .

- In the **User name** field, specify the name of the user for the agent
  to use when connecting to the server. The specified role must be a
  database superuser for all of the features to work as expected. If
  you’re using Postgres version 10 or later, you can use the pg_monitor
  role to grant the required privileges to a nonsuperuser. For
  information about the pg_monitor role, see `Default Roles <https://www.postgresql.org/docs/current/default-roles.html>`_  .

- Specify the password for the agent to use when connecting to the
  server in the **Password** field and **Confirm password** fields. If
  you don’t specify a password, you must configure the authentication
  for the agent manually. For example, you can use a ``.pgpass`` file,
  which must be present and accessible on the system where agent is
  installed.

On the **Advanced** tab:

- Set **Allow takeover?** to **Yes** to specify that another agent can
  take over the server. This feature allows an agent to take
  responsibility for the monitoring of the database server if, for
  example, the server moved to another host as part of a
  high-availability failover process.

- Use the plus sign (**+**) to add the database you want to exclude from
  the PEM monitoring. You can’t exclude the database mentioned on the
  **Connection Parameters** tab of the **PEM Agent** tab.

..  Note::
   The database-level probes don't execute for excluded databases, but the server-level probes can collect the database statistics.

Use the **General** tab under the **BART** tab to describe the general
properties of the BART server that map to the PEM server:

- Use the **BART server** field to select the BART server name. All the
  BART servers configured in the PEM console are listed.

- Use the **Server name** field to specify a name for the database
  server that you want to back up using the BART server. This name gets
  stored in the BART configuration file.

- Use the **Backup name** field to specify a template for user-defined
  names to assign to the backups of the database server. If you don’t
  specify a backup name template, then you can reference the backup in
  BART sub-commands only by using the BART-assigned integer backup
  identifier.

- Use the **Host address** field to specify the IP address of the
  database server that you want to configure for backup.

- Use the **Port** field to specify the port to use for the database
  that you want to back up.

- Use the **User** field to specify the user of the database that you
  want to back up using BART through the PEM console. If you want to
  enable incremental backups for this database server, then the user
  must be a superuser.

- Use the **Password** field to specify the password for the user of the
  database that you want to back up.

- Use the **Cluster Owner** field to specify the Linux operating system
  user account that owns the database cluster. This is typically
  enterprisedb for EDB Postgres Advanced Server database clusters
  installed in the Oracle databases compatible mode. It is typically
  postgres for PostgreSQL database clusters and for EDB Postgres
  Advanced Server database clusters installed in the PostgreSQL
  databases compatible mode.

- Use the **Archive command** field to specify the desired format of the
  archive command string to use in the ``bart.cfg`` file. Inputs
  provided for the Archive command overwrite the database server’s
  ``Postgresql.conf`` file. After the server gets added, the database
  server restarts or database configurations are reloaded.

- Use **Allow incremental backup?** to specify whether to enable
  incremental backup for this database server.

- Use **Setup passwordless SSH?** to specify if you want to create SSH
  certificates to allow passwordless logins between the database server
  and the BART server. Be sure to bind a PEM agent before setting up the
  passwordless SSH authentication. Passwordless SSH doesn’t work for a
  database server being remotely monitored by a PEM agent.

Use the **Misc** tab under the **BART** tab to describe the
miscellaneous properties of the BART Server:

- Use **Override default configuration?** to override the BART server
  configurations with the specific database server configurations.

- Use the **Xlog** method to specify how to collect the transaction log
  while pg_basebackup is executing.

- Use the **Retention policy** field to specify the retention policy for
  the backup. This determines when to mark an active backup as obsolete
  and hence a candidate for deletion. You can specify the retention
  policy in terms of number of backups or duration (days, weeks, or
  months).

- Use **WAL compression** to specify if you want to compress the
  archived Xlog/WAL files in gzip format. To enable WAL compression, the
  gzip compression program must be present in the BART user account’s
  PATH. Don’t enable the **WAL compression** setting for database
  servers for which you need to take incremental backups.

- Use the **Copy WALs during restore** field to specify how the archived
  WAL files are collected when invoking the RESTORE operation. Set to
  **Enabled** to copy the archived WAL files from the BART backup
  catalog to the ``<restore_path>/archived_wals`` directory prior to the
  database server archive recovery. Set to **Disabled** to retrieve the
  archived WAL files directly from the BART backup catalog during the
  database server archive recovery.

- Use the **Thread count** field to specify the number of threads to
  copy the blocks. You must set **Thread count** to **1** if you want to
  take a backup using the pg_basebackup utility.

- Use the **Batch size** field to specify the number of blocks of memory
  used for copying modified blocks. This option applies only to
  incremental backups.

- Use the **Scan interval** field to specify the number of seconds for
  the WAL scanner to wait befor scanning the new WAL files.

- Use the **MBM scan timeout** field to specify the number of seconds to
  wait for MBM files before timing out. This option applies only to
  incremental backups.

To view the properties of a server, right-click the server name in the
PEM client tree, and select **Properties** from the context menu. To
modify a server’s properties, disconnect from the server before opening
the Properties dialog box.

Verifying the connection and binding
------------------------------------

Once registered, the new server is added to the PEM browser tree and is
displayed on the Global Overview dashboard.

When first connecting to a newly bound server, the Global Overview
dashboard might display the new server with a status of “unknown” in the
server list. Before recognizing the server, the bound agent must execute
a number of probes to examine the server. These probes might take a few
minutes to complete, depending on network availability.

In a few minutes, bar graphs on the Global Overview dashboard show that
the agent connected successfully. The new server is included in the
**Postgres Server Status** list.

If after five minutes the Global Overview dashboard still doesn’t list
the new server, check the logfiles for the monitoring agent for errors.
Right-click the agent’s name in the tree, and select the **Dashboards >
Probe Log Analysis** from the context menu.
