Табличные пространства (tablespace) позволяют хранить данные Использование и настройка PostgreSQL на разных устройствах.
Задача. На HDD перестало хватать места под базу данных. Было принято решение добавить дополнительный HDD и перенести на него хранение одной таблицы cdr_old нашей базы данных.
Решение. Создаётся новое табличное пространство и в него переносится таблица cdr_old вместе с её индексами.
mkdir -p /var/log/VAR/LIB/psql/tspace_old_cdr chown -R postgres:postgres /var/log/VAR/LIB/psql/
CREATE TABLESPACE tablespace_name [ OWNER user_name ] LOCATION 'directory'
tablespace_name - имя создаваемого табличного пространства. Имя не может начинаться с pg_ , такие имена зарезервированы для системных табличных пространств. user_name - имя пользователя владельца. directory - каталог, который будет использоваться для табличного пространства. В нашем случае команда примет вид:
CREATE TABLESPACE tspace_old_cdr LOCATION '/var/log/VAR/LIB/psql/tspace_old_cdr';
ALTER TABLE cdr_old SET TABLESPACE tspace_old_cdr;
Перемещение индекса таблицы в новое табличное пространство.
ALTER INDEX i_cdr_out SET TABLESPACE tspace_old_cdr;
После окончания копирования, при помощи ключа \d, можно посмотреть в каком табличном пространстве находится таблица и ее индексы. Вывод команды ниже показывает, что сама таблица cdr_old и её индекс i_cdr_out находятся в одном табличном пространстве tspace_old_cdr, а три других индекса в табличном пространстве по умолчанию.
# \d cdr_old ... Indexes: "cdr_new_pk" PRIMARY KEY, btree (id) "i_cdr_in" btree (begin_time, src_peer_id, cause_local) "i_cdr_out" btree (begin_time, dst_peer_id, cause_local), tablespace "tspace_old_cdr" "i_cdr_pairs" btree (begin_time) Tablespace: "tspace_old_cdr"