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

Ответы:

355

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

show data_directory;

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

show all;

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

SELECT * FROM pg_tablespace;
Майк Шеррилл 'Cat Recall'
источник
1
show data_directory; Команда указывает на точное местоположение данных. Поиск в определенной папке является болезненным, так как кто-то другой мог установить ее для вас, и теперь вы не знаете конфигурацию, поэтому следующий sql поможет сэкономить время. :) Спасибо, Майк.
Вишал
3
Он говорит , что «должны быть суперпользователем , чтобы изучить каталог данных» :(
temporary_user_name
5
Если вы не администратор, вам все равно не нужно об этом знать.
Майк Шеррилл 'Cat Recall'
8
Кстати, если кто-то ищет местоположение базы данных для Postgres.app на Mac, как я, то по умолчанию оно находится в ~ / Library / Application Support / Postgres [ver] / var.
Сстрингер
1
Чтобы выполнить запрос, используйте PGAdmin III и значок «выполнить запрос» в строке меню.
Рутгер Хофсте
61

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

senthilkumari
источник
3
Не отвечайте определенным образом для ОС, если в вопросе явно не указана ОС.
симонменке
24
Почему нет? Если вы не упомянете ОС и просто скажете «это работает», любой, кто попробует это на другой ОС, будет сбит с толку. Это актуально. РЕДАКТИРОВАТЬ: О, вы, вероятно, имеете в виду "вообще не давать конкретного ответа ОС". Я думаю, это имеет смысл, я не знаю.
Дэвид Винецкий
34
@ Давид, вопрос был закрыт, предположительно, потому что не было указано, какая ОС. (Если бы он указывал ОС, он был бы закрыт из-за того, что он был слишком конкретным.) Ваш ответ был полезным и информативным - просто игнорируйте скептиков и падальщиков, пока им не удастся окончательно уничтожить SO. Ненавистники будут ненавидеть, и все такое.
SamGoody
@ SamGoody было бы что-то вроде того, что вы говорили, если бы этот ответ был действительно правильным. (Это не совсем неверно, поскольку папка может быть в Windows, но это определенно не дано). Является ли это случаем или нет, можно легко узнать, следуя уже даному ответу.
Джон Ханна
@senthilkumari У меня есть postgresql 11 и windows 10. Как вы упомянули, я пытался просмотреть базу данных pg_database внутри глобальной папки, но не смог ее увидеть. Я мог видеть кучу _vms, _fsm, config_exec_params, pg_control, pg_filenode.map, pg_internal.init. Для Windows 10, какой файл с именем следует искать. Это другое?
Nachiket
29

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

<POSTGRESQL_DIRECTORY>/data/base/<OID>

Там должны быть ваши файлы БД.

Альмир Сарайчич
источник
14
SELECT oid from pg_database where datname = '<dbname>'
Чарли
27

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

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

Sadegh
источник
12
Зависит от дистрибутива - для Fedora 20 он ниже /var/lib/pgsql/data. Лучше узнать, используя ps auxw|grep postgres|grep -- -D.
Skippy le Grand Gourou
17

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

CREATE TABLESPACE dbspace LOCATION '/data/dbs';
CREATE TABLE something (......) TABLESPACE dbspace;
CREATE TABLE otherthing (......) TABLESPACE dbspace;
ymv
источник
15

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

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';
Саад Саади
источник
14

Могу поспорить, что вы задаете этот вопрос, потому что вы попробовали pg_ctl startи получили следующую ошибку:

pg_ctl: каталог базы данных не указан и переменная окружения PGDATA не установлена

Другими словами, вы ищете в каталоге на сайте после того, как -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

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

xagg
источник
1
Если вы используете доморощенный, более простой способ найти эти данные простоbrew info postgres
Бен
Вы правы по поводу причины, по которой я ищу папку базы данных. Но дело в том, что я не могу найти ни один из вышеперечисленных файлов сlocate <filename>
асвин прабхакар
Нашел их ... Пришлось использоватьsudo locate <filename>
асвин прабхакар
14

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

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

Picmate 涅
источник
11

На Mac: /Library/PostgreSQL/9.0/data/base

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

Evgeni
источник
13
Если вы установили с помощью доморощенного (? И почему бы не вы), это было бы в /usr/local/var/postgresкоторые вы можете обнаружить с помощью @ MikeSherrill в show data_directory;наконечнике
Chris Беку
/Library/PostgreSQL/9.0/data/baseкажется более Mac-подобным местом, чем /usr/local/var/postgres. Вы не можете перейти к последнему в Finder, не включив скрытые функции Finder.
Чарли
@Charlie Вы можете просматривать с помощью Finder из меню Go. Перейти> Перейти в папку ... или ⇧⌘G
Джейсон С
@JasonS Да, вы можете использовать этот трюк, чтобы открыть не похожую на Mac папку в Finder.
Чарли
1
В моем случае это в: / Users / Bob / Библиотека / Поддержка приложений / Postgres / VAR-9,5
Bwyss
7

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

Бен Хойт
источник
1
Осторожно: если вы хотите сделать резервное копирование на уровне файловой системы, не просто создавайте резервные копии этих каталогов, потому что, как описано в документации : «... у вас может возникнуть соблазн попытаться выполнить резервное копирование или восстановление только определенных отдельных таблиц или баз данных из их соответствующих файлы или каталоги. Это не будет работать, потому что информация, содержащаяся в этих файлах, не может быть использована без файлов журнала фиксации, pg_clog / *, которые содержат статус фиксации всех транзакций. "
Янис Вейнбергс
Это зависит Вы могли настроить его в другую папку при установке.
ANeves
по моему, в C: \ Program Files \ PostgreSQL \ 9.4 \ нет папки с данными, это что-то специфическое для 9.4 или что-то не так?
LucyViolet
2

правильный ответ от 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

файлы базы данных в postgresql

k3nn
источник
0

Я запускаю postgres (9.5) в док-контейнере (на CentOS, как это происходит), и, как упоминает Skippy le Grand Gourou в комментарии выше, файлы находятся в /var/lib/postgresql/data/.

$ docker exec -it my-postgres-db-container bash
root@c7d61efe2a5d:/# cd /var/lib/postgresql/data/
root@c7d61efe2a5d:/var/lib/postgresql/data# ls -lh
total 56K
drwx------. 7 postgres postgres   71 Apr  5  2018 base
drwx------. 2 postgres postgres 4.0K Nov  2 02:42 global
drwx------. 2 postgres postgres   18 Dec 27  2017 pg_clog
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_commit_ts
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_dynshmem
-rw-------. 1 postgres postgres 4.4K Dec 27  2017 pg_hba.conf
-rw-------. 1 postgres postgres 1.6K Dec 27  2017 pg_ident.conf
drwx------. 4 postgres postgres   39 Dec 27  2017 pg_logical
drwx------. 4 postgres postgres   36 Dec 27  2017 pg_multixact
drwx------. 2 postgres postgres   18 Nov  2 02:42 pg_notify
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_replslot
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_serial
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_snapshots
drwx------. 2 postgres postgres    6 Sep 16 21:15 pg_stat
drwx------. 2 postgres postgres   63 Nov  8 02:41 pg_stat_tmp
drwx------. 2 postgres postgres   18 Oct 24  2018 pg_subtrans
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_tblspc
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_twophase
-rw-------. 1 postgres postgres    4 Dec 27  2017 PG_VERSION
drwx------. 3 postgres postgres   92 Dec 20  2018 pg_xlog
-rw-------. 1 postgres postgres   88 Dec 27  2017 postgresql.auto.conf
-rw-------. 1 postgres postgres  21K Dec 27  2017 postgresql.conf
-rw-------. 1 postgres postgres   37 Nov  2 02:42 postmaster.opts
-rw-------. 1 postgres postgres   85 Nov  2 02:42 postmaster.pid
rotarydial
источник