PostgreSQL
List databases
sudo -u postgres psql -l
sudo -u postgres psql -c "\list+"
List tables in the database
psql -U postgres
\l
\c database-name
\dt
Backup dump database
su -c "pg_dump -U postgres --create -d mydb > db.sql" postgres
PostgreSQL backup all databases in separate files
su - postgres
mkdir /tmp/backup-$(date +"%d-%m-%Y")
for DB in $(psql -t -c 'SELECT datname FROM pg_database WHERE datistemplate = false;'); do pg_dump --create "$DB" > "/tmp/backup-$(date +"%d-%m-%Y")/${DB}.sql"; done
Restore from file to the database
psql demo < /tmp/demo_backup.sql
PostgreSQL restore all databses from files
su - postgres
for DB in /tmp/backup-$(date +"%d-%m-%Y")/*.sql; do psql < "$DB"; done
Terminate transactions, with duration more than 1000 seconds
select pg_terminate_backend(pid)
from pg_stat_activity
where state != 'idle' and backend_type = 'client backend' and extract(epoch from now() - xact_start) > 1000;
Install PostgreSQL on YUM
yum install postgresql postgresql-server postgresql-devel postgresql-libs postgresql-contrib
- установим переменные для PostgreSQL
nano /root/.bash_profile
PGDATA=/var/lib/pgsql/data
PATH=$PATH:/usr/bin/postgres
PGUSER=postgres
export PGDATA PATH PGUSER
/etc/rc.d/init.d/postgresql initdb
nano /var/lib/pgsql/data/postgresql.conf
listen_addresses = '*'
log_line_prefix = '%t %u %d'
chkconfig postgresql on
/etc/rc.d/init.d/postgresql start
su - postgres
psql postgres postgres
alter user postgres with password 'password';
\password postgres
CREATE USER zabbix WITH PASSWORD 'password';
CREATE DATABASE zabbix OWNER zabbix;
\q
nano /var/lib/pgsql/data/pg_hba.conf
local all all md5
host all all 127.0.0.1/32 md5
cd /home/zabbix/zabbix-2.0.3/database/postgresql
cat schema.sql | psql -U zabbix zabbix
cat images.sql | psql -U zabbix zabbix
cat data.sql | psql -U zabbix zabbix
Create database user and database
sudo -u postgres createuser --pwprompt zabbix
sudo -u postgres createdb -O zabbix zabbix_proxy
PostgreSQL database backup in container
Do automatic database backup in Docker container.
- Create container with volume mapped to /backups in container. Backup archives will be available in that local folder.
volumes: - ./container_db/backups:/backups
- Create /opt/container/backup.sh
#!/bin/bash if [ "$(docker inspect -f '{{.State.Running}}' container_db 2>/dev/null)" = "true" ]; then docker exec container_db /backups/autopostgresqlbackup; fi
- Create /opt/container/container_db/backups/autopostgresqlbackup
Install: apt install autopostgresqlbackup If the default options are not suitable for you, change them: ${EDITOR} /etc/default/autopostgresqlbackup https://github.com/k0lter/autopostgresqlbackup/blob/master/Documentation.md
- Create /etc/cron.d/container_db_docker_psql_backup
0 4 * * * root /opt/container/backup.sh
Docker Compose healthcheck for PostgreSQL container
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
To check if PostgreSQL server is running in standalone mode
sudo -u postgres psql -c "SELECT * FROM pg_stat_replication;"
If there are no rows in result, your PostgreSQL server is running in standalone mode. If there is at least one row in the result (each row represents one replica), your PostgreSQL server is a master and currently connected to a replica(s). That's characteristic for a master/replica setup.
To check if your PostgreSQL server is a replica
sudo -u postgres psql -c "SELECT pg_is_in_recovery();"
If the result is t
(true), your PostgreSQL server is running as a replica. If the result is f
(false), it is not running as a replica (it could be a master or a standalone server).
PostgreSQL list users
SELECT * FROM pg_authid;
PostgreSQL show all databases
sudo -u postgres psql -t -c 'SELECT datname FROM pg_database WHERE datistemplate = false;'
PostgreSQL WAL replication
If PostgreSQL replication is enabled then WAL archiving should be enabled. PostgreSQL by itself WILL NO delete any WALs generated, what allows unlimited growth of pg_wal directory:
show wal_level;
wal_level
-----------
replica
show archive_command;
archive_command
-----------------
(disabled)
PostgreSQL total number of current database connections
sudo -u postgres psql
SELECT count(*) FROM pg_stat_activity WHERE datname = 'bitbucket';
PostgreSQL get details of all connections
sudo -u postgres psql
SELECT pid, usename, application_name, client_addr, state, backend_start, xact_start, query_start, state_change, query
FROM pg_stat_activity
WHERE datname = 'bitbucket'
ORDER BY query_start;
PostgreSQL identify slow queries:
sudo -u postgres psql
SELECT pid, usename, application_name, client_addr, state, backend_start, xact_start, query_start, state_change, query, now() - query_start AS duration
FROM pg_stat_activity
WHERE datname = 'bitbucket' AND state = 'active'
ORDER BY duration DESC;