Перейти к основному содержимому

Начало работы с табличным пространством

  1. В сеансе postgres в оболочке создайте каталог для размещения табличного пространства.

    [postgres@ServerName ~]$ mkdir ts_data

    Проверьте, что каталог успешно создан.

    [postgres@ServerName ~]$ ls
    ts_data
  2. Подключитесь к БД postgres суперпользователем.

    [postgres@ServerName ~]$ psql
    psql (15.5)
    Type "help" for help.
  3. Создайте табличное пространство ts_lab в ранее созданном каталоге.

    postgres@postgres=# CREATE TABLESPACE ts_lab LOCATION '/var/lib/pgsql/ts_data';
    CREATE TABLESPACE

    Проверьте расположение нового табличного пространства.

    postgres@postgres=# \db+
    List of tablespaces
    Name | Owner | Location | Access privileges | Options | Size | Descri
    ------------+----------+---------------------------+-------------------+---------+---------+-------
    pg_default | postgres | | | | 63 MB |
    pg_global | postgres | | | | 1002 MB |
    ts_lab | postgres | /var/lib/postgres/ts_data | | | 0 bytes |
    (3 rows)
  4. Создайте БД ts_db, указав табличное пространство ts_lab в качестве хранилища по умолчанию.

    postgres@postgres=# CREATE DATABASE ts_db TABLESPACE ts_lab;
    CREATE DATABASE
  5. Проверьте, увеличился ли размер занятого табличным пространством места на диске.

    Первый способ: проверка только размера.

    postgres@postgres=# SELECT pg_size_pretty(pg_tablespace_size('ts_lab'));
    pg_size_pretty
    ----------------
    9579 kB
    (1 row)

    Второй способ: получение детальной информации.

    postgres@postgres=# \x \db+ ts_lab \x
    Expanded display is on.
    List of tablespaces
    -[ RECORD 1 ]-----+--------------------------
    Name | ts_lab
    Owner | postgres
    Location | /var/lib/postgres/ts_data
    Access privileges |
    Options |
    Size | 9579 kB
    Description |

    Expanded display is off.
  6. Сравните полученный размер с объемом БД ts_db.

    postgres@postgres=# SELECT pg_size_pretty(pg_database_size('ts_db'));
    pg_size_pretty
    ----------------
    9567 kB
    (1 row)
    Почему размеры не совпадают?

    В каталоге табличного пространства помимо файлов БД, также имеются служебные файлы табличного пространства: файл PG_VERSION (около 4 КБ) и специальный файловый узел с именем pg_filenode_map (около 8 КБ).

Самопроверка​

Вопрос 1

Какая функция возвращает размер табличного пространства в байтах?

Вопрос 2

В сеансе psql выполнены следующие команды:

postgres@postgres=# SELECT pg_size_pretty(pg_tablespace_size('ts_lab'));
 pg_size_pretty
----------------
       9579 kB
(1 row)

postgres@postgres=# SELECT pg_size_pretty(pg_database_size('ts_db'));
 pg_size_pretty
----------------
       9567 kB
(1 row)

Почему размер табличного пространства ts_lab больше размера БД ts_db?