PostgreSQL 9.6.x deployment on Linux

End of Life Notice

CAST Storage Service (com.castsoftware.css) is End of Life and is no longer supported or distributed. Customers previously using CAST Storage Service must migrate to a standard PostgreSQL installation. CAST recommends PostgreSQL 18.x.

Installation via YUM

PostgreSQL can be installed using RPMs (binary) or SRPMs (source) managed by YUM. This is available for the following Linux distributions (CAST recommends to use only 64-bit platforms):

  • Recommended versions of Linux:
    • all Linux distributions based on (or derived from) Red Hat

Configure your YUM repository

Locate and edit your distribution .repo file, located:

  • On CentOS/etc/yum.repos.d/CentOS-Base.repo[base] and [updates] sections
  • On Red Hat/etc/yum/pluginconf.d/rhnplugin.conf [main] section

To the section(s) identified above, you need to append a line (otherwise dependencies might resolve to the postgresql supplied by the base repository):

exclude=postgresql*

Update the RPM package

[postgres@cssx data]$ rpm -ivh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
[postgres@cssx data]$ yum update

Install latest service pack from PostgreSQL

[postgres@cssx data]$ yum install postgresql96 postgresql96-server postgresql96-libs postgresql96-contrib postgresql-devel

Configure data storage location

You cannot customize the location of PGDATA by using ./postgresql96-setup, therefore you need to edit the following file and change the default location of PGDATA:

/usr/lib/systemd/system/postgresql-9.6.service

Initialize the PostgreSQL database server to configure data storage location

Once installed, please run the following command to initialize the server:

[postgres@cssx data]$ export PGSETUP_INITDB_OPTIONS="-E 'UTF-8' --no-locale"
[postgres@cssx data]$ cd /usr/pgsql-9.6/bin
[postgres@cssx data]$ ./postgresql96-setup initdb

Configuring the server/database

Edit the pg_hba.conf file

Edit the pg_hba.conf file at /usr/local/pgsql/data using the vi command:

[postgres@cssx data]$ vi pg_hba.conf

Please replace the sample 192.168.x.x IP address and /24 subnet below with the appropriate allowed client IP addresses/subnets:

# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 192.168.21.57/24 md5
 # IPv6 local connections:
host all all ::1/128 md5

Note that adding the following line will ensure ANY client can connect:

host all all 0.0.0.0/0 md5

Check server configuration

To check if the server itself is configured correctly for CAST AIP, we need to verify and modify certain parameters in the postgresql.conf (the file is in the postgresql directory \db_data).

pgtune

The postgresql.conf settings listed below are directly related to available RAM for the CSS server - and as such their configuration is specific to the host machine. Please use http://pgtune.leopard.in.ua/ on the host machine to identify the correct settings for your host machine and then modify postgresql.conf with the settings provided by pgtune:

  • shared_buffers
  • effective_cache_size
  • maintenance_work_mem
  • min_wal_size
  • max_wal_size
  • wal_buffers
Other settings

The following settings should also be modified to the values listed below:

ParametersRequired valueComments
listen_addresses‘*’Instead of localhost by default. Enables connectivity from other machines.
Port2282
max_connections300
temp_buffers32MB
work_mem64MBHigher value than the setting provided by pgtune.
maintenance_work_mem1024MBMemory for backup/restore/vacuum operations.
fsyncoff
synchronous_commitoff
full_page_writesoff
commit_delay10
checkpoint_completion_target0.9
cursor_tuple_fraction1.0
log_checkpointson
log_destination‘stderr’
logging_collectoron
log_line_prefix‘%t [%p]: [%l-1] 'Don’t forget the space before final quote mark
log_temp_files1024kB
log_autovacuum_min_duration1000ms
autovacuum_vacuum_cost_limit200
bytea_output’escape’
datestyle‘iso, mdy’Ensure that this option is active (it may already be active).
lc_messages‘C’
lc_monetary‘C’
lc_numeric‘C’
lc_time‘C’
max_locks_per_transaction4096Higher value than 64 by default.
standard_conforming_stringson

Start the PostgreSQL database server

[postgres@cssx data]$ systemctl enable postgresql-9.6.service
[postgres@cssx data]$ systemctl start postgresql-9.6.service

Create users

CAST AIP requires the following default users to be created:

UsernamePasswordPermissionsNotes
operatorCastAIPSUPERUSER-
guestWelcomeToAIP-Note that in the CAST AIP ≥ 8.3.11, the “guest” user is no longer used.

If you would like to create these users, use the following commands:

[postgres@cssx data]$ psql
*create user operator with SUPERUSER password 'CastAIP';
*create user guest with password 'WelcomeToAIP';
*grant postgres to operator;
CAST AIP ≥ 8.3.12 - custom users

If you are using CAST AIP ≥ 8.3.12, you are also free to create your own users and then use them with CAST AIP and related software - you need to have a minimum of one user with the SUPERUSER permission and then grant the “postgres” role to this user. For example:

[postgres@cssx data]$ psql
*create user my_user with SUPERUSER password 'my_password';
*grant postgres to my_user;

When using CAST AIP ≥ 8.3.30, it is possible to create custom users that do NOT require the SUPERUSER permission if you prefer not to grant this. For example, this script creates a role “my_role” with the password “my_password” that can login. The role has not been granted the SUPERUSER permission and instead only the minimum permissions required to operate CAST AIP are granted:

[postgres@cssx data]$ psql
*create role my_role LOGIN PASSWORD 'my_password' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
*grant create, connect, temporary on database postgres to my_role;

postgres database

All CAST AIP products will expect the CAST AIP schemas to be members of the postgres database - i.e. all connections to a PostgreSQL instance will connect direct to the postgres database. This database is created by default during the installation of the PostgreSQL instance and should be retained. While you can create an alternative custom database, it is not possible to connect to a custom database using any CAST AIP products.

CAST AIP schemas

Using CAST Server Manager, connect to the ‘postgres’ database and follow the installation instructions in Install CAST AIP schemas. Please make sure you are using the correct port and connection string when connecting to the PostgreSQL Server:

How to log all statement’s plan

Change the following parameters in the configuration file  (..\db_data\postgresql.conf):

auto_explain.log_min_duration = '0s'            # setting this to zero logs all plan
auto_explain.log_nested_statements = on         # log statements executed inside a function
auto_explain.log_verbose = on                   # it's equivalent to the VERBOSE option of EXPLAIN
auto_explain.log_buffers = on                   # it's equivalent to the BUFFERS option of EXPLAIN
auto_explain.log_analyze = on                   # causes EXPLAIN ANALYZE output; when this parameter is on, per-plan-node timing occurs for all statements executed, whether or not they run long enough to actually get logged. This can have an extremely negative impact on performance. Turning off auto_explain.log_timing ameliorates the performance cost, at the price of obtaining less information.
shared_preload_libraries = 'auto_explain'       # change requires restart

Set this parameter to off when only actual row counts, and not exact times, are needed:

auto_explain.log_timing = off                   #  this parameter has no effect unlessauto_explain.log_analyze is enabled