Де PostgreSQL зберігає базу даних?


Відповіді:


355

Щоб побачити, де знаходиться каталог даних, використовуйте цей запит.

show data_directory;

Щоб побачити всі параметри часу виконання, використовуйте

show all;

Ви можете створити простори таблиць для зберігання об’єктів бази даних в інших частинах файлової системи. Щоб побачити простори таблиць, яких може бути в цьому каталозі даних, використовуйте цей запит.

SELECT * FROM pg_tablespace;

1
показати_довідник даних; команди вказують на точне розташування даних. Пошук певної папки болісний, оскільки хтось інший, можливо, встановив її для вас, і тепер ви не знаєте конфігурації, тому наступний sql допомагає заощадити час. :) Дякую Майку.
Вішал

3
Він каже , що «повинні бути суперкористувачем , щоб вивчити каталог даних» :(
temporary_user_name

5
Якщо ви не DBA, вам все одно не потрібно знати.
Майк Шеррілл 'Відкликання котів'

8
BTW - якщо хтось шукає розташування бази даних для Postgres.app на mac, як я, це за замовчуванням знаходиться в ~ / Бібліотека / Підтримка програм / Postgres [ver] / var.
sstringer

1
Щоб запустити запит, використовуйте PGAdmin III та використовуйте піктограму "запустити запит" на панелі меню.
Rutger Hofste

61

У Windows7 всі бази даних посилаються на номер у файлі, названому pg_databaseпід C:\Program Files (x86)\PostgreSQL\8.2\data\global. Потім слід шукати ім'я папки за цим номером у розділі C:\Program Files (x86)\PostgreSQL\8.2\data\base. Це вміст бази даних.


3
Не відповідайте конкретним чином для ОС, якщо в цьому питанні прямо не вказано ОС.
simonmenke

24
Чому ні? Якщо ви не згадаєте про ОС і просто скажете "це працює", кожен, хто спробує це в іншій ОС, буде заплутаний. Це актуально. EDIT: О, ви, мабуть, маєте на увазі "взагалі не давати конкретної відповіді для ОС". Я думаю, це має сенс, я не знаю.
David Winiecki

34
@David, Питання було закрито, імовірно, оскільки в ньому не було вказано, яка ОС. (Якби в ньому була вказана ОС, вона була б закрита, бо надто конкретна.) Ваша відповідь була корисною та інформативною - просто ігноруйте найсайєрів та низових людей, поки їм не вдасться остаточно знищити 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/"


12
Залежить від дистрибутива - для Fedora 20 це нижче /var/lib/pgsql/data. Краще з’ясувати за допомогою ps auxw|grep postgres|grep -- -D.
Skippy le Grand Gourou

17

Розташування конкретних таблиць / індексів можна регулювати за допомогою ТАБЛЕСПАС:

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

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

... і це працює.


1
Якщо ви користуєтеся домашньою мовою, простіший спосіб знайти ці дані простоbrew info postgres
Бен

Ви маєте рацію про те, чому я шукаю папку бази даних. Але річ у тому, що я не можу знайти жоден із перерахованих вище файлів за допомогоюlocate <filename>
aswin prabhakar

Знайшов їх ... Довелося скористатисяsudo locate <filename>
aswin prabhakar

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

Це двійковий файл. Деталі файлів, такі як розмір та дата створення, можна отримати як завжди. Для отримання додаткової інформації прочитайте цю тему SO


11

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

Каталог не можна ввести, але ви можете переглянути вміст за допомогою: sudo du -hc data


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
Jason S

@JasonS Так, ви можете використовувати цей трюк, щоб відкрити папку, що не нагадує mac, у Finder.
Чарлі

1
У моєму випадку це: / Користувачі / 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 / *, які містять статус фіксації всіх транзакцій. "
Janis Veinbergs

Це залежить. Ви могли налаштувати його в іншу папку при встановленні.
ANeves

на моєму папці даних всередині C: \ Program Files \ PostgreSQL \ 9.4 \ це щось специфічне для 9.4 чи щось зробили не так?
LucyViolet

2

відповідь пікетника правильна. у 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>; 

шахта знаходиться в даті 16393 і relfilenode 41603

файли бази даних у postgresql


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.