# Табличное пространство и база данных

    postgres$ mkdir /var/lib/postgresql/ts_dir

Табличные пространства может создавать только суперпользователь:

    student$ psql -U postgres -c "CREATE TABLESPACE ts LOCATION '/var/lib/postgresql/ts_dir'"

    CREATE TABLESPACE

    student$ psql -U postgres -c "ALTER TABLESPACE ts OWNER TO student"

    ALTER TABLESPACE

    α=> CREATE DATABASE backup_base;

    CREATE DATABASE

    α=> \c backup_base

    You are now connected to database "backup_base" as user "student".

    α=> CREATE TABLE t(s text) TABLESPACE ts;

    CREATE TABLE

    α=> INSERT INTO t VALUES ('Привет, мир!');

    INSERT 0 1

# Базовая резервная копия

Создадим каталог, в который поместим резервную копию:

    postgres$ mkdir /var/lib/postgresql/backup

Каталог для табличного пространства ts на сервере, который будет развернут из резервной копии:

    postgres$ mkdir /var/lib/postgresql/ts_beta_dir

Запускаем pg_basebackup от имени роли student, указывая формат tar со сжатием:

    postgres$ pg_basebackup --format=tar --gzip -U student --pgdata=/var/lib/postgresql/backup

    postgres$ ls -l /var/lib/postgresql/backup/

    total 4676
    -rw-r--r-- 1 postgres postgres     339 июн 13 20:00 32843.tar.gz
    -rw-r--r-- 1 postgres postgres 4761420 июн 13 20:00 base.tar.gz
    -rw------- 1 postgres postgres   19792 июн 13 20:00 pg_wal.tar.gz

# Восстановление из базовой резервной копии

Разворачиваем резервную копию:

    postgres$ rm -rf /var/lib/postgresql/10/beta/*

    postgres$ tar -zxf /var/lib/postgresql/backup/base.tar.gz -C /var/lib/postgresql/10/beta

    postgres$ tar -zxf /var/lib/postgresql/backup/32843.tar.gz -C /var/lib/postgresql/ts_beta_dir

    postgres$ tar -zxf /var/lib/postgresql/backup/pg_wal.tar.gz -C /var/lib/postgresql/10/beta/pg_wal

Изменяем порт:

    postgres$ echo 'port = 5433' >> /var/lib/postgresql/10/beta/postgresql.auto.conf

В каталоге pg_tblspc сейчас пусто:

    postgres$ ls /var/lib/postgresql/10/beta/pg_tblspc/

Символическая ссылка появится при старте сервера в соответствии с файлом tablespace_map (который находится внутри base.tar):

    postgres$ cat /var/lib/postgresql/10/beta/tablespace_map

    32843 /var/lib/postgresql/ts_dir

Изменяем в этом файле путь для табличного пространства:

    postgres$ sed -i 's/ts_dir/ts_beta_dir/' /var/lib/postgresql/10/beta/tablespace_map

# Запуск и проверка

Запускаем сервер.

    student$ sudo pg_ctlcluster 10 beta start

    postgres$ ls -l /var/lib/postgresql/10/beta/pg_tblspc/

    total 0
    lrwxrwxrwx 1 postgres postgres 31 июн 13 20:00 32843 -> /var/lib/postgresql/ts_beta_dir

    student$ psql -p 5433 -d backup_base

    β=> \c backup_base

    You are now connected to database "backup_base" as user "student".

    β=> SELECT * FROM t;

          s
    --------------
     Привет, мир!
    (1 row)

# Удаление базы данных и табличного пространства

Чтобы удалить БД, надо от нее отключиться.

    α=> \c student

    You are now connected to database "student" as user "student".

    α=> DROP DATABASE backup_base;

    DROP DATABASE

    α=> DROP TABLESPACE ts;

    DROP TABLESPACE

    postgres$ rm -rf /var/lib/postgresql/ts_dir/

И для второго сервера:

    β=> \c student

    You are now connected to database "student" as user "student".

    β=> DROP DATABASE backup_base;

    DROP DATABASE

    β=> DROP TABLESPACE ts;

    DROP TABLESPACE

    postgres$ rm -rf /var/lib/postgresql/ts_beta_dir/