Начало работы с табличным пространством
-
В сеансе
postgresв оболочке создайте каталог для размещения табличного пространства.[postgres@ServerName ~]$ mkdir ts_dataПроверьте, что каталог успешно создан.
[postgres@ServerName ~]$ lsts_data -
Подключитесь к БД
postgresсуперпользователем.[postgres@ServerName ~]$ psqlpsql (15.5)Type "help" for help. -
Создайте табличное пространство
ts_labв ранее созданном каталоге.postgres@postgres=# CREATE TABLESPACE ts_lab LOCATION '/var/lib/pgsql/ts_data';CREATE TABLESPACEПроверьте расположение нового табличного пространства.
postgres@postgres=# \db+List of tablespacesName | 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) -
Создайте БД
ts_db, указав табличное пространствоts_labв качестве хранилища по умолчанию.postgres@postgres=# CREATE DATABASE ts_db TABLESPACE ts_lab;CREATE DATABASE -
Проверьте, увеличился ли размер занятого табличным пространством места на диске.
Первый способ: проверка только размера.
postgres@postgres=# SELECT pg_size_pretty(pg_tablespace_size('ts_lab'));pg_size_pretty----------------9579 kB(1 row)Второй способ: получение детальной информации.
postgres@postgres=# \x \db+ ts_lab \xExpanded display is on.List of tablespaces-[ RECORD 1 ]-----+--------------------------Name | ts_labOwner | postgresLocation | /var/lib/postgres/ts_dataAccess privileges |Options |Size | 9579 kBDescription |Expanded display is off. -
Сравните полученный размер с объемом БД
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?