Postgresql где лежат базы
Перейти к содержимому

Postgresql где лежат базы

  • автор:

Postgresql где лежат базы

В данном разделе описывается формат хранения на уровне файлов и каталогов.

Файлы конфигурации и файлы данных, используемые кластером базы данных, традиционно хранятся вместе в каталоге данных кластера, который обычно называют PGDATA (по имени переменной среды, которую можно использовать для его определения). Обычно PGDATA находится в /var/lib/pgsql/data . На одной и той же машине может находиться множество кластеров, управляемых различными экземплярами сервера.

В каталоге PGDATA содержится несколько подкаталогов и управляющих файлов, как показано в Таблице 65.1. В дополнение к этим обязательным элементам конфигурационные файлы кластера postgresql.conf , pg_hba.conf и pg_ident.conf традиционно хранятся в PGDATA , хотя их можно разместить и в другом месте.

Таблица 65.1. Содержание PGDATA

Элемент Описание
PG_VERSION Файл, содержащий номер основной версии PostgreSQL
base Подкаталог, содержащий подкаталоги для каждой базы данных
global Подкаталог, содержащий общие таблицы кластера, такие как pg_database
pg_commit_ts Подкаталог, содержащий данные о времени фиксации транзакций
pg_clog Подкаталог, содержащий данные о состоянии транзакции
pg_dynshmem Подкаталог, содержащий файлы, используемые подсистемой динамически разделяемой памяти
pg_logical Подкаталог, содержащий данные о состоянии для логического декодирования
pg_multixact Подкаталог, содержащий данные о состоянии мультитранзакций (используемые для разделяемой блокировки строк)
pg_notify Подкаталог, содержащий данные состояния прослушивания и нотификации (LISTEN/NOTIFY)
pg_replslot Подкаталог, содержащий данные слота репликации
pg_serial Подкаталог, содержащий информацию о выполненных сериализуемых транзакциях.
pg_snapshots Подкаталог, содержащий экспортированные снимки (snapshots)
pg_stat Подкаталог, содержащий постоянные файлы для подсистемы статистики.
pg_stat_tmp Подкаталог, содержащий временные файлы для подсистемы статистики
pg_subtrans Подкаталог, содержащий данные о состоянии подтранзакций
pg_tblspc Подкаталог, содержащий символические ссылки на табличные пространства
pg_twophase Подкаталог, содержащий файлы состояний для подготовленных транзакций
pg_xlog Подкаталог, содержащий файлы WAL (журнал предзаписи)
postgresql.auto.conf Файл, используемый для хранения параметров конфигурации, которые устанавливаются при помощи ALTER SYSTEM
postmaster.opts Файл, содержащий параметры командной строки, с которыми сервер был запущен в последний раз
postmaster.pid Файл блокировки, содержащий идентификатор (ID) текущего управляющего процесса (PID), путь к каталогу данных кластера, время запуска управляющего процесса, номер порта, путь к каталогу Unix-сокета (пустой для Windows), первый корректный адрес прослушивания (listen_address) (IP-адрес или * , либо пустое значение в случае отсутствия прослушивания по TCP), и ID сегмента разделяемой памяти (этот файл отсутствует после остановки сервера).

Для каждой базы данных в кластере существует подкаталог внутри PGDATA /base , названный по OID базы данных в pg_database . Этот подкаталог по умолчанию является местом хранения файлов базы данных; в частности, там хранятся её системные каталоги.

Каждая таблица и индекс хранятся в отдельном файле. Для обычных отношений, эти файлы получают имя по номеру файлового узла таблицы или индекса, который содержится в pg_class . relfilenode . Но для временных отношений, имя файла имеет форму t BBB _ FFF , где BBB — идентификатор серверного процесса сервера, который создал данный файл, а FFF — номер файлового узла. В обоих случаях, помимо главного файла (также называемого основным слоем), у каждой таблицы и индекса есть карта свободного пространства (см. Раздел 65.3), в которой хранится информация о свободном пространстве в данном отношении. Имя файла карты свободного пространства образуется из номера файлового узла с суффиксом _fsm . Также таблицы имеют карту видимости, хранящуюся в слое с суффиксом _vm , для отслеживания страниц, не содержащих мёртвых записей. Карта видимости подробнее описана в Разделе 65.4. Нежурналируемые таблицы и индексы имеют третий слой, так называемый слой инициализации, имя которого содержит суффикс _init (см. Раздел 65.5).

Внимание

Заметьте, что хотя номер файла таблицы часто совпадает с её OID, так бывает не всегда; некоторые операции, например, TRUNCATE , REINDEX , CLUSTER и некоторые формы команды ALTER TABLE могут изменить номер файла, но при этом сохранят OID. Не следует рассчитывать, что номер файлового узла и OID таблицы совпадают. Кроме того, для некоторых системных каталогов, включая и pg_class , в pg_class . relfilenode содержится ноль. Фактический номер файлового узла для них хранится в низкоуровневой структуре данных, и его можно получить при помощи функции pg_relation_filenode() .

Когда объём таблицы или индекса превышает 1 GB, они делятся на сегменты размером в один гигабайт. Файл первого сегмента называется по номеру файлового узла (filenode); последующие сегменты получают имена filenode.1, filenode.2 и т. д. При такой организации хранения не возникает проблем на платформах, имеющих ограничения по размеру файлов. (На самом деле, 1 ГБ — лишь размер по умолчанию. Размер сегмента можно изменить при сборке PostgreSQL , используя параметр конфигурации —with-segsize .) В принципе, карты свободного пространства и карты видимости также могут занимать нескольких сегментов, хотя на практике это маловероятно.

У таблицы, столбцы которой могут содержать данные большого объёма, будет иметься собственная таблица TOAST, предназначенная для отдельного хранения значений, которые слишком велики для хранения в строках самой таблицы. Основная таблица связывается с её таблицей TOAST (если таковая имеется) через pg_class . reltoastrelid . За подробной информацией обратитесь к Разделу 65.2.

Содержание таблиц и индексов рассматривается ниже (см. Раздел 65.6).

Табличное пространство делает сценарий более сложным. Каждое пользовательское табличное пространство имеет символическую ссылку внутри каталога PGDATA /pg_tblspc , указывающую на физический каталог табличного пространства (т. е., положение, указанное в команде табличного пространства CREATE TABLESPACE ). Эта символическая ссылка получает имя по OID табличного пространства. Внутри физического каталога табличного пространства имеется подкаталог, имя которого зависит от версии сервера PostgreSQL , как например PG_9.0_201008051 . (Этот подкаталог используется для того, чтобы последующие версии базы данных могли свободно использовать одно и то же местоположение, заданное в CREATE TABLESPACE .) Внутри каталога конкретной версии находится подкаталог для каждой базы данных, которая имеет элементы в табличном пространстве, названный по OID базы данных. Таблицы и индексы хранятся внутри этого каталога, используя схему именования файловых узлов. Табличное пространство pg_default недоступно через pg_tblspc , но соответствует PGDATA /base . Подобным же образом, табличное пространство pg_global недоступно через pg_tblspc , но соответствует PGDATA /global .

Функция pg_relation_filepath() показывает полный путь (относительно PGDATA ) для любого отношения. Часто это избавляет от необходимости запоминать многие из приведённых выше правил. Но следует помнить, что эта функция выдаёт лишь имя первого сегмента основного слоя отношения, т. е. возможно, понадобится добавить номер сегмента и/или _fsm , _vm или _init , чтобы найти все файлы, связанные с отношением.

Временные файлы (для таких операций, как сортировка объёма данных большего, чем может уместиться в памяти) создаются внутри PGDATA /base/pgsql_tmp или внутри подкаталога pgsql_tmp каталога табличного пространства, если для них определено табличное пространство, отличное от pg_default . Имя временного файла имеет форму pgsql_tmp PPP . NNN , где PPP — PID серверного процесса, а NNN служит для разделения различных временных файлов этого серверного процесса.

Пред. Наверх След.
Глава 65. Физическое хранение базы данных Начало 65.2. TOAST

Где хранится бд которая создана в psql-треминале?

Где, в свою очередь, хранит данные сам PostgreSQL можно посмотреть командой:

show data_directory; 

Вот эта вся директория (так же известная как PGDATA ) — и есть данные СУБД, включая все созданные базы в этом кластере. Обязательно включая абсолютно всё содержимое по всем симлинкам внутри этой директории! Отдельное представление созданной create datebase вы найти можете внутри каталога PGDATA , но вы обязаны понимать, что без всей целиком директории PGDATA отдельные её части — лишь куча бесполезного бинарного мусора. Для каких-то осмысленных манипуляций с данными PostgreSQL обязательно необходим весь PGDATA со всем содержимым по всем симлинкам.

Отслеживать
ответ дан 30 ноя 2018 в 18:03
21.5k 3 3 золотых знака 27 27 серебряных знаков 53 53 бронзовых знака
В PGDATA лежат простые файлы. Это и есть бд? Я думал у них будет какое-то расширение.
1 дек 2018 в 4:54

Эта директория и есть все данные этого экземпляра postgresql. Расширения файлов? А зачем они нужны? В PGDATA за исключением recovery.conf (либо пара signal файлов начиная с PG12 вместо него, «спасибо» мне), либо, в некоторых инсталляциях, pg_hba.conf и postgresql.conf — вообще руками лезть не надо. Ну и зачем усложнять именования бесполезными надуманными расширениями?

1 дек 2018 в 14:41
data_directory может быть пустая?
3 дек 2018 в 23:24

@Hellseher смотря откуда смотреть. По пути из show data_directory; — не может. В конфигах такая настройка может отсутствовать.

3 дек 2018 в 23:53

В терминологии PostgreSQL это называется — кластером, другими словами директория, где будут хранится ВСЕ создаваемые базы данных, это может быть отдельный диск, NFS, DAS, SAN и т.д.

Все возможные конфигурации хранятся в postgresql.conf файле:

postgres:~$ grep data_directory /etc/postgresql/*/main/postgresql.conf data_directory = '/var/lib/postgresql/9.6/main' # use data in another directory postgres@:~$ ls -la /var/lib/postgresql/*/main total 92 drwx------ 19 postgres postgres 4096 Dec 3 01:40 . drwxr-xr-x 3 postgres postgres 4096 Nov 29 22:43 .. drwx------ 6 postgres postgres 4096 Nov 29 22:43 base drwx------ 2 postgres postgres 4096 Dec 1 00:12 global drwx------ 2 postgres postgres 4096 Nov 29 22:43 pg_clog drwx------ 2 postgres postgres 4096 Nov 29 22:43 pg_commit_ts drwx------ 2 postgres postgres 4096 Nov 29 22:43 pg_dynshmem drwx------ 4 postgres postgres 4096 Nov 29 22:43 pg_logical drwx------ 4 postgres postgres 4096 Nov 29 22:43 pg_multixact drwx------ 2 postgres postgres 4096 Dec 1 00:12 pg_notify drwx------ 2 postgres postgres 4096 Nov 29 22:43 pg_replslot drwx------ 2 postgres postgres 4096 Nov 29 22:43 pg_serial drwx------ 2 postgres postgres 4096 Nov 29 22:43 pg_snapshots drwx------ 2 postgres postgres 4096 Dec 1 00:12 pg_stat drwx------ 2 postgres postgres 4096 Nov 29 22:43 pg_stat_tmp drwx------ 2 postgres postgres 4096 Nov 29 22:43 pg_subtrans drwx------ 2 postgres postgres 4096 Nov 29 22:43 pg_tblspc drwx------ 2 postgres postgres 4096 Nov 29 22:43 pg_twophase -rw------- 1 postgres postgres 4 Nov 29 22:43 PG_VERSION drwx------ 3 postgres postgres 4096 Nov 29 22:43 pg_xlog -rw------- 1 postgres postgres 88 Nov 29 22:43 postgresql.auto.conf -rw------- 1 postgres postgres 133 Dec 1 00:12 postmaster.opts -rw------- 1 postgres postgres 91 Dec 1 00:12 postmaster.pid 

Ссылки

Postgresql где лежат базы

Справочный центр Cerebro

Оглавление
Расположение файловой структуры БД
Расположение файловой структуры БД
Автор: Cerebro Support
Обновлено больше недели назад
Оглавление

База данных PostgreSQL представляет собой директорию на дисковом массиве содержащую в себе файловую структуру определённого вида. В частности, в корне этой директории располагаются конфигурационные файлы, с помощью которых можно управлять различными параметрами работы PostgreSQL.

Для того, чтобы определить положение директории БД в случае уже установленной службы PostgreSQL, нужно узнать параметры командной строки, с которыми она запускается.

Windows

Откройте оснастку Службы. Щёлкните службу PostgreSQL в списке правой кнопкой мыши, а затем выберите Свойства из контекстного меню.

В открывшемся окне в поле Исполняемый файл можно увидеть (выделить и скопировать) команду запуска службы со всеми параметрами.

Linux

В момент, когда служба PostgreSQL запущена выполните в консоли следующую команду:

ps afx | grep postgres

В результатах команды нужно найти строку вида:

/usr/lib/postgresql/9.0/bin/postgres -D /var/lib/postgresql/9.0/main -c unix_socket_directory=/var/run/postgresql -c config_file=/etc/postgresql/9.0/main/postgresql.conf

После того, как вы определили командную строку запуска службы PostgreSQL, следующие ключи в ней указывают расположение файлов БД:

ключ-D директория файловой структуры БД;

ключ-с с параметром config_file расположение главного конфигурационного файла, обычно именуемого postgresql.conf;

ключ-с с параметром hba_file расположение конфигурационного файла с параметрами аутентификации, обычно именуемого pg_hba.conf.

Если для конфигурационных файлов не задано персональное расположение, то они находятся в корне директории БД.

Перемещение базы данных postgresql в Ubuntu 18.04 LTS

postgresql ubuntu

При установке на Ubuntu zabbix-server база данных по умолчанию пишется в папку /var/lib/postgresql. Со временем база растёт и поднимается вопрос переноса её на другой раздел диска. Перенесём базу данных в /opt/postgresql.

Требования

  • ОС Ubuntu 18.04 LTS. Или Ubuntu 16.04.
  • Работаем из-под root.
  • Сервер PostgreSQL
  • Сервер zabbix. Не обязательно.

Подготовка

Проверим где находится текущая БД postgresql.

sudo -u postgres psql psql (9.5.14) Type "help" for help. postgres=# SHOW data_directory; data_directory ------------------------------ /var/lib/postgresql/9.5/main (1 row)

БД находится в папке /var/lib/postgresql/9.5/main.

Для переноса БД нам понадобится rsync:

apt-get install rsync

Убедимся что существует директория /opt.

Остановка сервисов

service zabbix-server stop systemctl stop postgresql

Проверка статуса postgresql.

systemctl status postgresql

Ищем строку «Stopped PostgreSQL RDBMS.»

Перенос файлов базы данных

rsync -av /var/lib/postgresql /opt

После переноса переименуем старую папку, на всякий случай:

mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.bak

Настройка конфигурации postgresql

Правим файл postgresql.conf:

vim /etc/postgresql/9.5/main/postgresql.conf

Изменяем значение data_directory:

data_directory = '/opt/postgresql/9.5/main'

Запуск сервисов

systemctl start postgresql

Проверяем где находится текущая БД postgresql.

sudo -u postgres psql psql (9.5.14) Type "help" for help. postgres=# SHOW data_directory; data_directory ------------------------------ /opt/postgresql/9.5/main (1 row)

БД находится в папке /opt/postgresql/9.5/main.

service zabbix-server start

Удаление ненужных файлов

rm -Rf /var/lib/postgresql/9.5/main.bak

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *