postgres

https://cheatography.com/tme520/cheat-sheets/postgresql/

Fundamentals

View PostgreSQL server versionpostgres=# SELECT version();

View PostgreSQL client versionpsql -V

Check if Postgres is running/etc/init.d/postgresql status

Start/Stop/Restart Postgres (SysVinit)/etc/init.d/postgresql start | stop | restart

Start/Stop/Restart Postgres (Systemd)systemctl start | stop | restart postgresql.service

Enter our queries in our favorite editorpostgres=# \e

Change PostgreSQL root passwordpsql postgres postgres

postgres=# ALTER ROLE postgres WITH PASSWORD 'toto';

postgres=# \q

List available functionspostgres=# \df

View Helppostgres=# \?

postgres=# \h CREATE

postgres=# \h CREATE INDEX

List DBspostgres=# \l

Create a DB from Postgrespostgres=# CREATE DATABASE maDB WITH OWNER akiko;

Create a DB from the Shellpostgres@debianVM:~$ /usr/bin/createdb maDB -O midori

Delete a database from Postgrespostgres=# DROP DATABASE maDB;

Delete a database from the Shellpostgres@debianVM:~$ dropdb maDB

List the tables of a DBpostgres-# \c postgres

postgres-# \d

Get a list of data types available in PostgreSQLpostgres=# SELECT typname,typlen from pg_type where typtype='b';

Redirect query results to a filepostgres=# \o nom_fichier (enables redirection)

postgres=# \o (cancels redirect)

Backups

Back up a single databasepg_dump -U user nom_DB -f madb.sql

Back up all databasespg_dumpall > all.sql

Back up global objects (users + tablespaces)pg_dumpall -g > everything.sql

Back up a tablepg_dump --table articles -U midori nom_DB -f unetable.sql

Restore a databasepsql -U midori -d nom_DB -f madb.sql

Restore all databasespsql -f all.sql

Restore a tablepsql -f a table.sql nom_DB

Back up a local database and restore it to a remote server in one linepg_dump nom_DB_source | psql -h server nom_DB_cible

Index

See the indexes of a tablepostgres=# \d nom_table

Creating an index on a tableCREATE INDEX name ON table USING type_index (column);

Postgres supports 5 types of indexes: Balanced-Tree (btree; used by default), hash (unlogged transactions, deprecated), Generalized Search Tree (gist), Generalized Inverted Indexes (gin) and Space-Partitioned GIST (spgist).

Investigate, analyze

View the history filecat ~/.psql_history

Enable/disable timingpostgres=# \timing

Get execution details of a query without running itpostgres=# EXPLAIN SELECT typname,typlen from pg_type where typtype='b';

Get statistics for a query that just turnedpostgres=# EXPLAIN ANALYSE SELECT typname,typlen from pg_type where typtype='b';

A bit like Linux with its bash_history, PostgreSQL keeps a list of commands executed in the $HOME/.psql_history file. Timing saves the time it takes a query to execute.

Users and roles

Create a user from the Shell/usr/bin/createuser midori

Create a user from Postgrespostgres=# CREATE USER akiko WITH password 'yamete';

Grant privileges to a userpostgres=# GRANT ALL PRIVILEGES ON DATABASE CityHunter TO akiko;

Delete a user from the Shell/usr/bin/dropuser midori

Delete a user from Postgrespostgres=# DROP USER akiko;

List rolespostgres=# \du

Create a rolepostgres=# CREATE ROLE trainer WITH LOGIN ENCRYPTED PASSWORD 'learn' CREATEDB;

Create a role with multiple privilegespostgres=# CREATE ROLE demidieu WITH LOGIN ENCRYPTED PASSWORD 'toto' CREATEDB CREATEROLE REPLICATION SUPERUSER;

Edit a rolepostgres=# ALTER ROLE demidieu CREATEROLE CREATEDB REPLICATION SUPERUSER;

Delete a rolepostgres=# DROP ROLE trainer;

These two variants require to be a postgres user (su - postgres).

Disk space

Calculate the disk space occupied by a databasepostgres=# SELECT pg_database_size('foodb');

postgres=# SELECT pg_size_pretty(pg_database_size('foodb'));

Calculate disk space occupied by a table (including indexes)postgres=# SELECT pg_size_pretty(pg_total_relation_size('grosse_table'));

Calculate the disk space occupied by a table (without the index)postgres=# SELECT pg_size_pretty(pg_relation_size('grosse_table'));

Find the largest table (variant 1)postgres=# SELECT relname, relpages FROM pg_class ORDER BY relpages DESC;

Find the largest table (variant 2)postgres=# SELECT nspname || '.' || relname AS tablename, pg_size_pretty(pg_table_size((nspname || '.' || relname)::regclass)) AS size FROM pg_class c JOIN pg_namespace n ON (c.relnamespace = n.oid) WHERE relkind = 'r' ORDER BY pg_table_size((nspname || '.' || relname)::regclass) DESC LIMIT 10;

Transactions

Start a transactionpostgres=# BEGIN

Make a rollbackpostgres=# ROLLBACK

Make a commit (end of transaction)postgres=# COMMIT

.SQL

Count rows in a tablepostgres=# select count(*) from table;

Generate a series of numbers and insert it into a tablepostgres=# INSERT INTO numbers (num) VALUES ( generate_series(1,100));

Retrieve the second smallest value in a columnpostgres=# SELECT MIN(num) from number_table WHERE num > ( SELECT MIN(num) FROM number_table );

Retrieve the second largest value in a columnpostgres=# SELECT MAX(num) FROM number_table WHERE num < ( SELECT MAX(num) FROM number_table );

Encrypt, then save a passwordpostgres=# SELECT crypt ( 'midori', gen_salt('md5') );

Last updated