21.6. Табличные пространства#
21.6. Табличные пространства #
Табличные пространства в Tantor BE позволяют администраторам баз данных определить местоположения в файловой системе, где могут быть сохранены файлы, представляющие объекты базы данных. После создания, на табличнoe пространствo можно ссылаться по имени при создании объектов базы данных.
С помощью табличных пространств администратор может контролировать расположение дискового пространства установки Tantor BE. Это полезно по крайней мере в двух случаях. Во-первых, если секция или том, на котором была инициализирована кластерная система, исчерпывают свое пространство и не может быть расширен, можно создать табличное пространство на другой секции и использовать его, пока система не будет переконфигурирована.
Во-вторых, таблицы позволяют администратору использовать знание о образце использования объектов базы данных для оптимизации производительности. Например, индекс, который часто используется, может быть размещен на очень быстром, высокодоступном диске, таком как дорогостоящее твердотельное устройство. В то же время таблица, хранящая архивные данные, которые редко используются или не являются критическими для производительности, может быть сохранена на менее дорогой, медленной системе хранения.
Предупреждение
Даже если находятся за пределами основного каталога данных PostgreSQL, табличные пространства являются неотъемлемой частью кластера базы данных и не могут рассматриваться как автономная коллекция файлов данных. Они зависят от метаданных, содержащихся в основном каталоге данных, и поэтому не могут быть присоединены к другому кластеру базы данных или резервироваться индивидуально. Аналогично, если вы потеряете табличное пространство (удаление файла, сбой диска и т. д.), кластер базы данных может стать неразборчивым или неспособным к запуску. Размещение табличного пространства на временной файловой системе, такой как RAM-диск, рискует надежностью всего кластера.
Для определения табличного пространства используйте команду CREATE TABLESPACE, например: :
CREATE TABLESPACE fastspace LOCATION '/ssd1/postgresql/data';
Местоположение должно быть существующим пустым каталогом, принадлежащим пользователю операционной системы Tantor BE. Все объекты, созданные в дальнейшем внутри табличного пространства, будут храниться в файлах в этом каталоге. Местоположение не должно находиться на съемном или временном носителе, так как кластер может перестать функционировать, если табличное пространство отсутствует или потеряно.
Примечание
Обычно нет смысла создавать более одного табличного пространства для каждой логической файловой системы, поскольку нельзя контролировать расположение отдельных файлов внутри логической файловой системы. Однако Tantor BE не накладывает такое ограничение и, на самом деле, не имеет прямого представления о границах файловой системы на вашей системе. Он просто сохраняет файлы в каталогах, которые вы указываете ему использовать.
Создание самого табличного пространства должно выполняться от имени суперпользователя базы данных, но после этого вы можете разрешить обычным пользователям базы данных его использовать.
Для этого предоставьте им привилегию CREATE
.
Таблицы, индексы и целые базы данных могут быть назначены определенным табличным пространствам. Для этого пользователь с привилегией CREATE
на определенном табличном пространстве должен передать имя табличного пространства в качестве параметра соответствующей команде. Например, следующая команда создает таблицу в табличном пространстве space1
:
CREATE TABLE foo(i int) TABLESPACE space1;
В качестве альтернативы используйте параметр default_tablespace:
SET default_tablespace = space1; CREATE TABLE foo(i int);
Когда default_tablespace
установлено на что-либо, кроме пустой строки, оно предоставляет неявную фразу TABLESPACE
для команд CREATE TABLE
и CREATE INDEX
, которые не имеют явно указанной фразы.
Также существует параметр temp_tablespaces, который определяет размещение временных таблиц и индексов, а также временных файлов, используемых для сортировки больших наборов данных. Это может быть список имен табличных пространств, а не только одно имя, чтобы нагрузка, связанная с временными объектами, могла быть распределена по нескольким табличным пространствам. Случайный элемент из списка выбирается каждый раз, когда создается временный объект.
Табличное пространство имен, связанное с базой данных, используется для хранения системных каталогов этой базы данных. Кроме того, это пространство имен по умолчанию используется для таблиц, индексов и временных файлов, созданных внутри базы данных, если не указано ни одного предложения TABLESPACE
и не указано другое выборочное пространство имен с помощью default_tablespace
или temp_tablespaces
(при необходимости). Если база данных создается без указания пространства имен, она использует то же пространство имен, что и база данных-шаблон, из которой она копируется.
Во время инициализации кластера базы данных автоматически создаются два табличных пространства. Табличное пространство pg_global
используется для общих системных каталогов. Табличное пространство pg_default
является табличным пространством по умолчанию для баз данных template1
и template0
(и, следовательно, будет также табличным пространством по умолчанию для других баз данных, если не переопределено с помощью TABLESPACE
в CREATE DATABASE
).
После создания, табличное пространство может быть использовано из любой базы данных, при условии, что у запрашивающего пользователя есть достаточные привилегии. Это означает, что табличное пространство не может быть удалено, пока все объекты во всех базах данных, использующих это табличное пространство, не будут удалены.
Чтобы удалить пустое табличнoe пространствo, используйте команду DROP TABLESPACE.
Для определения набора существующих табличных пространств, изучите системный каталог pg_tablespace
, например
SELECT spcname FROM pg_tablespace;
Программа psql также полезна для перечисления существующих табличных пространств с помощью метакоманды \db
.
Каталог $PGDATA/pg_tblspc
содержит символические ссылки, которые указывают на каждое из определенных в кластере не встроенных табличных пространств. Хотя это не рекомендуется, возможно вручную настроить расположение табличных пространств путем переопределения этих ссылок. Во время работы сервера ни в коем случае не выполняйте эту операцию. Обратите внимание, что в PostgreSQL 9.1 и более ранних версиях вам также потребуется обновить каталог pg_tablespace
с новыми местоположениями. (Если вы этого не сделаете, pg_dump
будет продолжать выводить старые местоположения табличных пространств).