PostgreSQL


Connecting to postgres

$ sudo su - postgres
$ psql
psql -h <database.host> -U <user> -W

Basic commands

postgres=# \q # выйти
postgres=# \l  # список баз данных.
postgres=# \с dbname  # подсоединение к БД dbname.
postgres=# \dt  # список всех таблиц
postgres=# \d table  # структура таблицы table.
postgres=# \du  # список всех пользователей и их привилегий.
postgres=# \dt+  # список всех таблиц с описанием.
postgres=# \dt *s*  # список всех таблиц, содержащих s в имени.
postgres=# \o FILE  # сохранить результат запроса в файл FILE.
postgres=# \i FILE  # выполнить команды из файла FILE.
postgres=# \a  # переключение между режимами вывода: с/без выравнивания.

Create, delete database


Creating

CREATE DATABASE mydatabase
WITH
    OWNER = owner
    ENCODING = 'UTF8'
    LC_COLLATE = 'uk_UA.UTF-8'
    LC_CTYPE = 'uk_UA.UTF-8'
    TABLESPACE = pg_default
    CONNECTION LIMIT = -1;
postgres=# create database dbname with encoding='UNICODE';

postgres=# create user dbuser with password 'dbpass';

postgres=# grant all privileges on database dbname to dbuser;

Removing

postgres=# DROP DATABASE dbname;

Очищение таблицы

postgres=# TRUNCATE TABLE tablename RESTART IDENTITY CASCADE;

Backup, Dumps

pg_dump -h <database.host> -U <user> <database> > <database>.sql

pg_dump -h 192.168.0.14 -U postgres web_core > web_core.sql

Restore dump

psql -h <database.host> -U <new_user> <new_database> < <database>.sql

psql -h 192.168.0.14 -U web web_core2 < web_core.sql

System catalog

pg_catalog
information_schema
Functions
SELECT pg_terminate_backend(pid) FROM pg_stat_activity
WHERE datname = current_database() AND pid <> pg_backend_pid();
Queries
SELECT version();

ALTER SYSTEM SET configuration_parameter { TO | = } { value | 'value' | DEFAULT }
** ALTER SYSTEM RESET** configuration_parameter
** ALTER SYSTEM RESET ALL**

SELECT name, current_setting(name), source FROM pg_settings
WHERE source IN ('configuration file');
Size
SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size
FROM pg_database;
SELECT tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename))
FROM pg_tables LIMIT 2;
SELECT indexrelid::regclass, pg_size_pretty(pg_relation_size(indexrelid::regclass))
FROM pg_index LIMIT 2;