Create tablespace postgresql linux
CREATE TABLESPACE — создать табличное пространство
Синтаксис
CREATE TABLESPACEтабл_пространство
[ OWNER <новый_владелец
| CURRENT_ROLE | CURRENT_USER | SESSION_USER > ] LOCATION 'каталог
' [ WITH (параметр_табличного_пространства
=значение
[, . ] ) ]
Описание
CREATE TABLESPACE регистрирует новое табличное пространство на уровне кластера баз данных. Имя табличного пространства должно отличаться от имён уже существующих табличных пространств в кластере.
Табличные пространства позволяют суперпользователям определять альтернативные расположения в файловой системе, где могут находиться файлы, содержащие объекты базы данных (например, таблицы или индексы).
Пользователь, имеющий соответствующие права, может передать параметр табл_пространство команде CREATE DATABASE , CREATE TABLE , CREATE INDEX или ADD CONSTRAINT , чтобы файлы данных для этих объектов хранились в указанном табличном пространстве.
Предупреждение
Табличное пространство нельзя использовать отдельно от кластера, в котором оно было определено; см. Раздел 23.6.
Параметры
Имя создаваемого табличного пространства. Это имя не может начинаться с pg_ , так как такие имена зарезервированы для системных табличных пространств. имя_пользователя
Имя пользователя, который будет владельцем табличного пространства. Если опущено, владельцем по умолчанию станет пользователь, выполняющий команду. Создавать табличные пространства могут только суперпользователи, но их владельцами могут быть назначены и обычные пользователи. каталог
Каталог, который будет использован для этого табличного пространства. Этот каталог должен уже существовать ( CREATE TABLESPACE не создаст его), быть пустым и принадлежать системному пользователю PostgreSQL . Задаваться его расположение должно абсолютным путём. параметр_табличного_пространства
Устанавливаемый или сбрасываемый параметр табличного пространства. В настоящее время поддерживаются только параметры seq_page_cost , random_page_cost , effective_io_concurrency и maintenance_io_concurrency . При установке этих значений для заданного табличного пространства переопределяются обычная оценка стоимости чтения страниц из таблиц в этом пространстве и характеристики предвыборки во время выполнения, зависящие от одноимённых параметров конфигурации (см. seq_page_cost, random_page_cost, effective_io_concurrency, maintenance_io_concurrency). Это может быть полезно, если одно из табличных пространств размещено на диске, который быстрее или медленнее остальной дисковой подсистемы.
Замечания
Табличные пространства поддерживаются только на платформах, поддерживающих символические ссылки.
CREATE TABLESPACE не может быть выполнена внутри блока транзакции.
Примеры
Чтобы создать табличное пространство dbspace , расположенное в файловой системе в каталоге /data/dbs , сначала создайте этот каталог средствами операционной системы и установите для него подходящего владельца:
mkdir /data/dbs chown postgres:postgres /data/dbs
Затем выполните в PostgreSQL команду, собственно создающую табличное пространство:
CREATE TABLESPACE dbspace LOCATION '/data/dbs';
Чтобы создать табличное пространство, которое будет принадлежать другому пользователю БД, выполните такую команду:
CREATE TABLESPACE indexspace OWNER genevieve LOCATION '/data/indexes';
Совместимость
CREATE TABLESPACE является расширением PostgreSQL .
См. также
Create tablespace postgresql linux
Табличные пространства в PostgreSQL позволяют администраторам организовать логику размещения файлов объектов базы данных в файловой системе. К однажды созданному табличному пространству можно обращаться по имени на этапе создания объектов.
Табличные пространства позволяют администратору управлять дисковым пространством для инсталляции PostgreSQL . Это полезно минимум по двум причинам. Во-первых, это нехватка места в разделе, на котором был инициализирован кластер и невозможность его расширения. Табличное пространство можно создать в другом разделе и использовать его до тех пор, пока не появится возможность переконфигурирования системы.
Во-вторых, табличные пространства позволяют администраторам оптимизировать производительность согласно бизнес-процессам, связанным с объектами базы данных. Например, часто используемый индекс можно разместить на очень быстром и надёжном, но дорогом SSD-диске. В то же время таблица с архивными данными, которые редко используются и скорость к доступа к ним не важна, может быть размещена в более дешёвом и медленном хранилище.
Предупреждение
Несмотря на внешнее размещение относительно основного каталога хранения данных PostgreSQL, табличные пространства являются неотъемлемой частью кластера и не могут трактоваться, как самостоятельная коллекция файлов данных. Они зависят от метаданных, расположенных в главном каталоге, и потому не могут быть подключены к другому кластеру, или копироваться по отдельности. Также, в случае потери табличного пространства (при удалении файлов, сбое диска и т. п.), кластер может оказаться недоступным или не сможет запуститься. Таким образом, при размещении табличного пространства во временной файловой системе, например, в RAM-диске, возникает угроза надёжности всего кластера.
Для создания табличного пространства используется команда CREATE TABLESPACE , например: :
CREATE TABLESPACE fastspace LOCATION '/ssd1/postgresql/data';
Каталог должен существовать, быть пустым и принадлежать пользователю ОС, под которым запущен PostgreSQL . Все созданные впоследствии объекты, принадлежащие целевому табличному пространству, будут храниться в файлах расположенных в этом каталоге. Каталог не должен размещаться на съёмных или устройствах временного хранения, так как кластер может перестать функционировать из-за потери этого пространства.
Примечание
Обычно нет смысла создавать более одного пространства на одну логическую файловую систему, так как нет возможности контролировать расположение отдельных файлов в файловой системе. Однако PostgreSQL не накладывает никаких ограничений в этом отношении, и более того, напрямую не заботится о точках монтирования файловой системы. Просто осуществляется хранение файлов в указанных каталогах.
Создавать табличное пространство должен суперпользователь базы данных, но после этого можно разрешить обычным пользователям его использовать. Для этого необходимо предоставить привилегию 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 ).
После создания, табличное пространство можно использовать в рамках любой базы данных, при условии, что у пользователя имеются необходимые права. Это означает, что табличное пространство невозможно удалить до тех пор, пока не будут удалены все объекты баз данных, использующих это пространство.
Для удаления пустого табличного пространства используйте команду DROP TABLESPACE .
Чтобы получить список табличных пространств можно сделать запрос к системному каталогу pg_tablespace , например,
SELECT spcname FROM pg_tablespace;
Метакоманда \db утилиты psql также позволяет отобразить список существующих табличных пространств.
PostgreSQL использует символические ссылки для упрощения реализации табличных пространств. Это означает, что табличные пространства могут использоваться только в системах, поддерживающих символические ссылки.
Каталог $PGDATA/pg_tblspc содержит символические ссылки, которые указывают на внешние табличные пространства кластера. Хоть и не рекомендуется, но возможно регулировать табличные пространства вручную, переопределяя эти ссылки. Ни при каких обстоятельствах эти операции нельзя проводить, пока запущен сервер баз данных. Обратите внимание, что в версии PostgreSQL 9.1 и более ранних также необходимо обновить информацию в pg_tablespace о новых расположениях. (Если это не сделать, то pg_dump будет продолжать выводить старые расположения табличных пространств.)