Структура каталогов и файлов PostgreSQL¶
СУБД PostgreSQL в разных операционных системах имеет практически идентичную структуру каталогов. В данной статье рассматривается стандартная структура каталогов для ОС Ubuntu 12.04.
По умолчанию PostgreSQL устанавливается в папку /var/lib/postgresql//main. Основной каталог СУБД содержит подкаталоги с пользовательскими данными и служебной информацией.
-
postmaster.opts — файл, в котором сдержится командная строка с параметрами, с помощью которой была запущена СУБД. На моем компьютере в этом файле хранится следующая строка
/usr/lib/postgresql/9.3/bin/postgres "-D" "/var/lib/postgresql/9.3/main" "-c" "config_file=/etc/postgresql/9.3/main/postgresql.conf"
Имена подкаталогов соответствуют OID’ам баз данных.
root@server: /var/lib/postgresql/9.3/main/base# ls 1/ 12065/ 12070/ 16384/ 24580/
denis=# select oid, datname from pg_database; oid | datname -------+----------- 1 | template1 12065 | template0 12070 | postgres 16384 | denis 24580 | t1 (5 rows)
- транзакция стартовала,
- транзакция успешно завершена,
- транзакция отменена,
- подтранзакция успешно завершена.
Количество хранимых транзакций ограничено параметром autovacuum_freeze_max_age (максимальное значение ~ 2 миллиарда), который в свою очередь регулирует работу автовакума. Поэтому максимальный размер файла может быть ~ 0.5 Гб максимум.
Файлы создаются при вызове процедуры pg_export_snapshot() и существуют до окончания транзакции. Ниже представлена последовательность действий, позволяющая понять, как появляются и исчезают файлы в этом каталоге. Экспорт снапшота в транзакции
BEGIN denis=# SELECT pg_export_snapshot(); pg_export_snapshot -------------------- 00000312-1 (1 row)
В каталоге появился файл, в котором содержится информация о снапшоте
root@server: /var/lib/postgresql/9.3/main/pg_snapshots# ls 00000312-1 root@server: /var/lib/postgresql/9.3/main/pg_snapshots# cat 00000312-1 xid:786 dbid:16384 iso:1 ro:0 xmin:786 xmax:786 xcnt:0 sof:0 sxcnt:0 rec:0
Отмена транзакции
denis=# rollback; ROLLBACK
Файл удален
root@server: /var/lib/postgresql/9.3/main/pg_snapshots# l ----
Ниже показана последовательность действий, демонстрирующая, как в этом каталоге появляются файлы. Создается табличное пространство
denis=# CREATE TABLESPACE tmp LOCATION '/home/denis/1'; CREATE TABLESPACE
Получается список табличных пространств
denis=# select oid, spcname from pg_tablespace; oid | spcname -------+------------ 1663 | pg_default 1664 | pg_global 27936 | tmp (3 rows)
Для каждого пользовательского табличного пространства в каталоге создается символьная ссылка на заданный каталог, именем этой ссылки является OID этого табличного пространства.
/var/lib/postgresql/9.3/main/pg_tblspc# ll total 8 drwx------ 2 postgres postgres 4096 Nov 4 09:51 ./ drwx------ 15 postgres postgres 4096 Nov 4 07:05 ../ lrwxrwxrwx 1 postgres postgres 13 Nov 4 09:51 27936 -> /home/denis/1/
Где PostgreSQL хранит базу данных?
sudo -u postgres psql -c «show data_directory;» покажет текущие места хранения в стандартной установке PostgreSQL.
Lorenzo Ancora 01 фев. 2018, в 11:03
Поделиться:
12 ответов
Чтобы узнать, где находится каталог данных, используйте этот запрос.
show data_directory;
Чтобы просмотреть все параметры времени выполнения, используйте
show all;
Вы можете создавать табличные пространства для хранения объектов базы данных в других частях файловой системы. Чтобы просмотреть табличные пространства, которые могут отсутствовать в этом каталоге данных, используйте этот запрос.
SELECT * FROM pg_tablespace;
Mike Sherrill ‘Cat Recall’ 23 нояб. 2011, в 06:46
Поделиться
показать data_directory; Команда указывает на точное местоположение данных. Поиск определенной папки является болезненным, так как кто-то другой мог установить ее для вас, и теперь вы не знаете конфигурацию, поэтому следование sql поможет сэкономить время. 🙂 Спасибо, Майк.
Vishal 14 июнь 2013, в 08:54
Он говорит «должен быть суперпользователем, чтобы изучить каталог данных» 🙁
temporary_user_name 19 авг. 2013, в 22:45
Если вы не администратор, вам все равно не нужно об этом знать.
Mike Sherrill ‘Cat Recall’ 20 авг. 2013, в 10:15
Кстати, если кто-то ищет местоположение базы данных для Postgres.app на Mac, как я, это по умолчанию в ~ / Library / Application Support / Postgres [ver] / var.
sstringer 11 янв. 2014, в 19:00
Чтобы выполнить запрос, используйте PGAdmin III и значок «выполнить запрос» в строке меню.
Rutger Hofste 08 дек. 2016, в 16:16
Показать ещё 3 комментария
В Windows7 все базы данных относятся к числу в файле с именем pg_database под C:\Program Files (x86)\PostgreSQL\8.2\data\global . Затем вы должны искать имя папки по этому номеру в C:\Program Files (x86)\PostgreSQL\8.2\data\base . Это содержимое базы данных.
senthilkumari 09 март 2012, в 07:26
Поделиться
Не отвечайте определенным образом для ОС, если в вопросе явно не указана ОС.
simonmenke 26 окт. 2012, в 09:54
Почему бы и нет? Если вы не упомянете ОС и просто скажете «это работает», любой, кто попробует это на другой ОС, будет сбит с толку. Это актуально. РЕДАКТИРОВАТЬ: О, вы, вероятно, имеете в виду «вообще не давать конкретного ответа ОС». Я думаю, это имеет смысл, я не знаю.
David Winiecki 16 май 2013, в 22:26
@ Давид, вопрос был закрыт, предположительно, потому что не было указано, какая ОС. (Если бы он указывал ОС, он был бы закрыт из-за того, что он был слишком конкретным.) Ваш ответ был полезным и информативным — просто игнорируйте скептиков и спекулянтов, пока им не удастся окончательно уничтожить SO. Ненавистники будут ненавидеть, и все такое.
SamGoody 09 июль 2013, в 10:58
@ SamGoody было бы что-то вроде того, что вы говорили, если бы этот ответ был действительно правильным. (Это не совсем неверно, поскольку папка может быть в Windows, но это определенно не дано). Независимо от того, так ли это, можно легко узнать, следуя уже предоставленному ответу.
Jon Hanna 13 май 2014, в 18:17
Показать ещё 2 комментария
Откройте pgAdmin и перейдите в «Свойства» для конкретной базы данных. Найдите OID, а затем откройте каталог
/data/base/
Должны быть ваши файлы DB.
Almir Sarajčić 27 окт. 2012, в 12:51
Поделиться
Как получить OID с помощью инструмента командной строки?
Nick Retallack 23 янв. 2014, в 19:12
SELECT oid from pg_database where datname = ‘
Charlie 10 нояб. 2014, в 16:28
Под моей установкой Linux он находится здесь: /var/lib/postgresql/8.x/
Вы можете изменить его с помощью initdb -D «c:/mydb/»
Sadegh 16 июль 2009, в 12:10
Поделиться
Зависит от дистрибутива — для Fedora 20 он находится в /var/lib/pgsql/data . Лучше выяснить это с помощью ps auxw|grep postgres|grep — -D .
Skippy le Grand Gourou 26 фев. 2014, в 10:22
Как указано в «местоположении по умолчанию базы данных PostgreSQL в Linux, под Linux вы можете узнать, используя следующую команду:
ps aux | grep postgres | grep -- -D
Skippy le Grand Gourou 26 фев. 2014, в 11:21
Поделиться
Расположение определенных таблиц/индексов можно настроить с помощью TABLESPACE:
CREATE TABLESPACE dbspace LOCATION '/data/dbs'; CREATE TABLE something (. ) TABLESPACE dbspace; CREATE TABLE otherthing (. ) TABLESPACE dbspace;
ymv 16 июль 2009, в 13:26
Поделиться
Postgres хранит данные в файлах в своем каталоге данных. Выполните следующие шаги, чтобы перейти к базе данных и ее файлам:
База данных, соответствующая файлу таблицы postgresql, является каталогом. Местоположение всего каталога данных можно получить, запустив SHOW data_directory . в операционной системе UNIX (например: Mac) /Library/PostgreSQL/9.4/data Перейдите в базовую папку в каталоге данных, где есть все папки базы данных: /Library/PostgreSQL/9.4/data/base
Найдите имя папки базы данных, запустив (дает целое число. Это имя папки базы данных):
SELECT oid from pg_database WHERE datname = ;
Найдите имя файла таблицы, запустив (дает целое число. Это имя файла):
SELECT relname, relfilenode FROM pg_class WHERE relname = ;
Это двоичный файл. Данные файла, такие как размер и время создания, могут быть получены как обычно. Для получения дополнительной информации прочитайте этот поток SO
picmate 涅 10 июнь 2015, в 17:33
Поделиться
В Mac: /Library/PostgreSQL/9.0/data/base
Невозможно ввести каталог, но вы можете посмотреть содержимое через: sudo du -hc data
evgeni 01 март 2011, в 04:26
Поделиться
Если вы установили через homebrew (а почему бы и нет?), Он будет в /usr/local/var/postgres который вы можете найти, используя @ MikeSherrill’s show data_directory; совет
Chris Beck 16 апр. 2014, в 00:40
/Library/PostgreSQL/9.0/data/base кажется более похожим на Mac, чем /usr/local/var/postgres . Вы не можете перейти к последнему в Finder, не включив скрытые функции Finder.
Charlie 10 нояб. 2014, в 16:20
@Charlie Вы можете просматривать с помощью Finder из меню Go. Перейти> Перейти в папку . или ⇧⌘G
Jason S 10 март 2015, в 05:45
@JasonS Да, вы можете использовать этот трюк, чтобы открыть не похожую на Mac папку в Finder.
Charlie 10 март 2015, в 19:15
К вашему сведению, этот Ответ по-прежнему корректен на Postgres 9.4 с использованием установщика, предоставленного EnterpriseDB .
Basil Bourque 27 апр. 2015, в 20:15
В моем случае это находится в: / Users / Bob / Библиотека / Поддержка приложений / Postgres / VAR-9,5
Bwyss 18 март 2016, в 16:51
Показать ещё 4 комментария
Все уже ответили, но только для последних обновлений. Если вы хотите знать, где находятся все файлы конфигурации, запустите эту команду в оболочке
SELECT name, setting FROM pg_settings WHERE category = 'File Locations';
Saad Saadi 08 дек. 2017, в 03:37
Поделиться
Держу пари, что вы задаете этот вопрос, потому что вы пробовали pg_ctl start и получили следующую ошибку:
pg_ctl: не указан каталог базы данных и переменная среды PGDATA unset
Другими словами, вы ищете каталог, который будет помещен после -D в команду pg_ctl start .
В этом случае каталог, который вы ищете, содержит эти файлы.
PG_VERSION pg_dynshmem pg_multixact pg_snapshots pg_tblspc postgresql.conf base pg_hba.conf pg_notify pg_stat pg_twophase postmaster.opts global pg_ident.conf pg_replslot pg_stat_tmp pg_xlog postmaster.pid pg_clog pg_logical pg_serial pg_subtrans postgresql.auto.conf server.log
Вы можете найти его, указав любой из файлов и каталогов выше, используя поиск, предоставляемый вашей ОС.
Например, в моем случае (HomeBrew установить на Mac OS X) эти файлы находятся в /usr/local/var/postgres . Для запуска сервера я печатаю:
pg_ctl -D /usr/local/var/postgres -w start
Где PostgreSQL хранит базы данных в Windows
PostgreSQL — мощная система управления базами данных (СУБД) с открытым исходным кодом. Одной из ее особенностей является то, что она позволяет пользователю выбирать различные места для хранения данных. В частности, на операционной системе Windows PostgreSQL предоставляет несколько способов хранения баз данных.
Одним из вариантов является хранение баз данных в директории данных PostgreSQL. По умолчанию, эта директория располагается в папке «pgdata» в директории установки PostgreSQL. В этой директории находятся все файлы, связанные с базами данных, включая файлы таблиц, индексы и журналы транзакций.
Другим вариантом является использование внешнего хранилища данных, такого как диски на разных физических устройствах или сетевые файловые системы. При использовании внешнего хранилища данных, пользователь должен указать путь к этому хранилищу в настройках PostgreSQL. Это позволяет достичь более высокой производительности и надежности системы.
Важно отметить, что выбор места хранения баз данных может существенно влиять на производительность и доступность системы. Поэтому рекомендуется провести тщательный анализ требований и возможностей, прежде чем принимать решение о выборе места хранения данных PostgreSQL на Windows.
Путь расположения баз данных в PostgreSQL
По умолчанию, на операционной системе Windows, базы данных PostgreSQL хранятся в специальной директории. Путь к этой директории зависит от того, какая версия PostgreSQL установлена и какие настройки были изменены.
Обычно, по умолчанию, базы данных PostgreSQL хранятся по следующему пути: C:\Program Files\PostgreSQL\версия\PostgreSQL\data . В этой директории каждая база данных представлена отдельной папкой.
Если вы не нашли базы данных в указанной директории, возможно, что они были перемещены в другое место. В этом случае, вам нужно будет обратиться к настройкам PostgreSQL и найти путь расположения баз данных.
Знание пути расположения баз данных в PostgreSQL очень важно для администрирования и резервного копирования данных. Будьте внимательны при работе с базами данных PostgreSQL и избегайте случайного удаления или изменения файлов баз данных.
Где хранится база данных postgresql
Оглавление
Расположение файловой структуры БД
Расположение файловой структуры БД
Автор: 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.
Если для конфигурационных файлов не задано персональное расположение, то они находятся в корне директории БД.
