Где PostgreSQL хранит базу данных?

278

Где хранятся файлы для базы данных PostgreSQL?

  • 1
    postgresql.org/docs/9.5/static/storage-file-layout.html
  • 6
    sudo -u postgres psql -c "show data_directory;" покажет текущие места хранения в стандартной установке PostgreSQL.
Теги:

12 ответов

297

Чтобы узнать, где находится каталог данных, используйте этот запрос.

show data_directory;

Чтобы просмотреть все параметры времени выполнения, используйте

show all;

Вы можете создавать табличные пространства для хранения объектов базы данных в других частях файловой системы. Чтобы просмотреть табличные пространства, которые могут отсутствовать в этом каталоге данных, используйте этот запрос.

SELECT * FROM pg_tablespace;
  • 0
    показать data_directory; Команда указывает на точное местоположение данных. Поиск определенной папки является болезненным, так как кто-то другой мог установить ее для вас, и теперь вы не знаете конфигурацию, поэтому следование sql поможет сэкономить время. :) Спасибо, Майк.
  • 3
    Он говорит "должен быть суперпользователем, чтобы изучить каталог данных" :(
Показать ещё 3 комментария
56

В Windows7 все базы данных относятся к числу в файле с именем pg_database под C:\Program Files (x86)\PostgreSQL\8.2\data\global. Затем вы должны искать имя папки по этому номеру в C:\Program Files (x86)\PostgreSQL\8.2\data\base. Это содержимое базы данных.

  • 3
    Не отвечайте определенным образом для ОС, если в вопросе явно не указана ОС.
  • 18
    Почему бы и нет? Если вы не упомянете ОС и просто скажете «это работает», любой, кто попробует это на другой ОС, будет сбит с толку. Это актуально. РЕДАКТИРОВАТЬ: О, вы, вероятно, имеете в виду "вообще не давать конкретного ответа ОС". Я думаю, это имеет смысл, я не знаю.
Показать ещё 2 комментария
27

Откройте pgAdmin и перейдите в "Свойства" для конкретной базы данных. Найдите OID, а затем откройте каталог

<POSTGRESQL_DIRECTORY>/data/base/<OID>

Должны быть ваши файлы DB.

  • 2
    Как получить OID с помощью инструмента командной строки?
  • 11
    SELECT oid from pg_database where datname = '<dbname>'
22

Под моей установкой Linux он находится здесь: /var/lib/postgresql/8.x/

Вы можете изменить его с помощью initdb -D "c:/mydb/"

  • 8
    Зависит от дистрибутива - для Fedora 20 он находится в /var/lib/pgsql/data . Лучше выяснить это с помощью ps auxw|grep postgres|grep -- -D .
21

Как указано в "местоположении по умолчанию базы данных PostgreSQL в Linux, под Linux вы можете узнать, используя следующую команду:

ps aux | grep postgres | grep -- -D
14

Расположение определенных таблиц/индексов можно настроить с помощью TABLESPACE:

CREATE TABLESPACE dbspace LOCATION '/data/dbs';
CREATE TABLE something (......) TABLESPACE dbspace;
CREATE TABLE otherthing (......) TABLESPACE dbspace;
11

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 = <database_name>;

Найдите имя файла таблицы, запустив (дает целое число. Это имя файла):

SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

Это двоичный файл. Данные файла, такие как размер и время создания, могут быть получены как обычно. Для получения дополнительной информации прочитайте этот поток SO

11

В Mac: /Library/PostgreSQL/9.0/data/base

Невозможно ввести каталог, но вы можете посмотреть содержимое через: sudo du -hc data

  • 13
    Если вы установили через homebrew (а почему бы и нет?), Он будет в /usr/local/var/postgres который вы можете найти, используя @ MikeSherrill's show data_directory; совет
  • 0
    /Library/PostgreSQL/9.0/data/base кажется более похожим на Mac, чем /usr/local/var/postgres . Вы не можете перейти к последнему в Finder, не включив скрытые функции Finder.
Показать ещё 4 комментария
10

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

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';
6

Держу пари, что вы задаете этот вопрос, потому что вы пробовали 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

... и он работает.

  • 1
    Если вы используете homebrew, более простой способ найти эти данные - просто brew info postgres
5

В Windows каталог PGDATA, который описывают документы PostgresSQL, находится где-то вроде C:\Program Files\PostgreSQL\8.1\data. Данные для конкретной базы данных находятся (например) в C:\Program Files\PostgreSQL\8.1\data\base\100929, где, как мне кажется, 100929 - это номер базы данных.

  • 1
    Осторожно: если вы хотите сделать резервное копирование на уровне файловой системы, не просто создавайте резервные копии этих каталогов, потому что, как описывают документы : «... у вас может возникнуть соблазн попытаться выполнить резервное копирование или восстановление только определенных отдельных таблиц или баз данных из их соответствующих файлы или каталоги. Это не будет работать, потому что информация, содержащаяся в этих файлах, не может быть использована без файлов журнала фиксации, pg_clog / *, которые содержат статус фиксации всех транзакций. "
  • 0
    Это зависит Вы можете настроить его в другую папку при установке.
Показать ещё 1 комментарий
0

Picmate ответ правильный. на windows расположение основной папки БД (по крайней мере на моей установке)

C:\PostgreSQL\9.2\data\base\

а не в программных файлах.

его 2 сценария, даст вам точный каталог/файл вам нужно:

SELECT oid from pg_database WHERE datname = <database_name>;
SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

мой находится в datname 16393 и relfilenode 41603

Изображение 5096

Ещё вопросы

Сообщество Overcoder
Наверх
Меню