The postgreSQL server comes with a wrapper called pg_ctl which will simplify some admin tasks for you.
Check if the variable PGDATA is set:
[postgres@myserver ~]$ echo $PGDATA /pgdata/data
Check status:
[postgres@myserver ~]$ pg_ctl status pg_ctl: server is running (PID: 27870) /usr/pgsql-11/bin/postgres "-D" "/pgdata/data"
If the PGDATA variable is not set in your operating system, you need to specify the D-flag, like this:
[postgres@myserver ~]$ pg_ctl status -D /pgdata/data pg_ctl: server is running (PID: 27870) /usr/pgsql-11/bin/postgres "-D" "/pgdata/data"
Check if the database accepts incoming requests:
[postgres@myserver ~]$ pg_isready -d testdb01 /var/run/postgresql:5432 - accepting connections
Stop:
[postgres@myserver ~]$ pg_ctl stop waiting for server to shut down.... done server stopped # stop immediate - similar to Oracles "shutdown abort". Instance recovery needed pg_ctl -D $PGDATA stop -m immediate waiting for server to shut down.... done server stopped # stop fast - similar to Oracles "shutdown immediate". Rollback of uncommited transactions, shutdown gracefully. No instance recovery needed pg_ctl -D $PGDATA stop -m fast waiting for server to shut down.... done server stopped # stop smart - similar to Oracles "shutdown normal". Waits for all transactions to complete. No instance recovery needed. May take time to complete. pg_ctl -D $PGDATA stop -m smart waiting for server to shut down.... done server stopped
Start:
[postgres@myserver ~]$ pg_ctl start waiting for server to start....2019-01-30 10:35:04 CET LOG: listening on IPv4 address "0.0.0.0", port 5432 2019-01-30 10:35:04 CET LOG: listening on IPv6 address "::", port 5432 2019-01-30 10:35:04 CET LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" 2019-01-30 10:35:04 CET LOG: listening on Unix socket "/tmp/.s.PGSQL.5432" 2019-01-30 10:35:04 CET LOG: redirecting log output to logging collector process 2019-01-30 10:35:04 CET HINT: Future log output will appear in directory "log". done server startedRHEL7 or later
If your postgres server is running on RHEL7 or newer, you should use systemctl to control the service:
systemctl start postgresql-11 systemctl stop postgresql-11 systemctl restart postgresql-11 systemctl status postgresql-11Example output(abbreviated) from the status command:
● postgresql-11.service - PostgreSQL 11 database server Loaded: loaded (/etc/systemd/system/postgresql-11.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2021-01-08 02:20:51 CET; 1 months 10 days ago Docs: https://www.postgresql.org/docs/11/static/ Main PID: 1910 (postmaster) CGroup: /system.slice/postgresql-11.service ├─ 1910 /usr/pgsql-11/bin/postmaster -D /postgres/data ├─ 2047 postgres: logger ├─ 2390 postgres: checkpointer ├─ 2392 postgres: background writer ├─ 2394 postgres: walwriter ├─ 2395 postgres: autovacuum launcher ├─ 2396 postgres: archiver last was 00000001000002360000009A ├─ 2397 postgres: stats collector ├─ 2398 postgres: logical replication launcher ├─ 2766 postgres: postgres_exporter postgres localhost(60360) idle ├─ 3061 postgres: postgres_exporter postgres localhost(44202) idle ├─48217 postgres: postgres postgres [local] idle
If the postgres server is down, and you need to check the current version installed, you can use either of these methods:
which psql /sw/postgres/pgsql-13/bin/psql cat /u02/pgdata/datafiles/PG_VERSION 13 cat /etc/PG_VERSION 13.ansible