Gdzie PostgreSQL przechowuje bazę danych?

Odpowiedzi:

355

Aby zobaczyć, gdzie znajduje się katalog danych, użyj tego zapytania.

show data_directory;

Aby wyświetlić wszystkie parametry czasu wykonywania, użyj

show all;

Możesz utworzyć obszary tabel do przechowywania obiektów bazy danych w innych częściach systemu plików. Aby zobaczyć obszary tabel, które mogą nie znajdować się w tym katalogu danych, użyj tego zapytania.

SELECT * FROM pg_tablespace;
Mike Sherrill „Cat Recall”
źródło
1
pokaż katalog danych; polecenie wskazuje dokładną lokalizację danych. Przeszukiwanie określonego folderu jest bolesne, ponieważ ktoś mógł go dla Ciebie zainstalować, a teraz nie znasz konfiguracji, więc śledzenie kodu SQL pomaga zaoszczędzić czas. :) Dzięki Mike.
Vishal
3
Mówi „musi być superużytkownikiem, aby sprawdzić katalog danych” :(
tymczasowego
5
Jeśli nie jesteś DBA, tak naprawdę nie musisz tego wiedzieć.
Mike Sherrill „Cat Recall”
8
BTW - jeśli ktoś szuka lokalizacji bazy danych Postgres.app na komputerze Mac tak jak ja, domyślnie jest to ~ / Library / Application Support / Postgres [ver] / var.
piosenkarz
1
Aby uruchomić zapytanie, użyj PGAdmin III i użyj ikony „uruchom zapytanie” na pasku menu.
Rutger Hofste
61

W Windows7 wszystkie bazy danych są oznaczone numerami w pliku o nazwie pg_databaseunder C:\Program Files (x86)\PostgreSQL\8.2\data\global. Następnie wyszukaj nazwę folderu według tego numeru pod C:\Program Files (x86)\PostgreSQL\8.2\data\base. To jest zawartość bazy danych.

senthilkumari
źródło
3
Nie odpowiadaj w sposób specyficzny dla systemu operacyjnego, chyba że pytanie wyraźnie określa system operacyjny.
simonmenke
24
Dlaczego nie? Jeśli nie wspomnisz o systemie operacyjnym i po prostu powiesz „to działa”, każdy, kto spróbuje tego w innym systemie, będzie zdezorientowany. To jest istotne. EDYCJA: Och, prawdopodobnie masz na myśli „w ogóle nie udzielaj odpowiedzi na system operacyjny”. Myślę, że to ma sens, nie wiem.
David Winiecki
34
@ David, pytanie zostało prawdopodobnie zamknięte, ponieważ nie określało, który system operacyjny. (Gdyby określił system operacyjny, zostałby zamknięty, ponieważ jest zbyt szczegółowy.) Twoja odpowiedź była pomocna i pouczająca - po prostu zignoruj ​​naysayers i downvoters, dopóki nie uda im się ostatecznie zniszczyć SO. Hejterzy będą nienawidzić i tak dalej.
SamGoody
@SamGoody byłoby trochę sensu w tym, co mówiłeś, gdyby ta odpowiedź była rzeczywiście poprawna. (Nie jest to absolutnie niepoprawne, ponieważ folder może znajdować się w systemie Windows, ale z pewnością nie jest dany). Niezależnie od tego, czy tak jest, czy nie, można łatwo ustalić, postępując zgodnie z już udzieloną odpowiedzią.
Jon Hanna
@senthilkumari Mam postgresql 11 i Windows 10. Jak wspomniałeś, próbowałem zobaczyć pg_database w folderze globalnym, ale nie widziałem żadnego. Widziałem, że było kilka _vms, _fsm, config_exec_params, pg_control, pg_filenode.map, pg_internal.init. W systemie Windows 10, który plik o nazwie powinienem wyszukać. Czy to jest inne
Nachiket
29

Otwórz pgAdmin i przejdź do Właściwości dla określonej bazy danych. Znajdź OID, a następnie otwórz katalog

<POSTGRESQL_DIRECTORY>/data/base/<OID>

Powinny być twoje pliki DB.

Almir Sarajčić
źródło
14
SELECT oid from pg_database where datname = '<dbname>'
Charlie,
27

W mojej instalacji Linuksa jest tutaj: /var/lib/postgresql/8.x/

Możesz to zmienić za pomocą initdb -D "c:/mydb/"

Sadegh
źródło
12
Zależy od dystrybucji - dla Fedory 20 jest poniżej /var/lib/pgsql/data. Lepiej dowiedzieć się, używając ps auxw|grep postgres|grep -- -D.
Skippy le Grand Gourou
17

Lokalizację określonych tabel / indeksów można dostosować za pomocą TABLESPACEs:

CREATE TABLESPACE dbspace LOCATION '/data/dbs';
CREATE TABLE something (......) TABLESPACE dbspace;
CREATE TABLE otherthing (......) TABLESPACE dbspace;
ymv
źródło
15

Wszyscy już odpowiedzieli, ale tylko na najnowsze aktualizacje. Jeśli chcesz wiedzieć, gdzie znajdują się wszystkie pliki konfiguracyjne, uruchom to polecenie w powłoce

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';
Saad Saadi
źródło
14

Założę się, że zadajesz to pytanie, ponieważ próbujesz uzyskać pg_ctl startnastępujący błąd:

pg_ctl: nie określono katalogu bazy danych i nie ustawiono zmiennej środowiskowej PGDATA

Innymi słowy, szukasz katalogu umieścić po -Dw pg_ctl startpoleceniu.

W takim przypadku katalog, którego szukasz, zawiera te pliki.

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

Możesz go zlokalizować, lokalizując dowolny z powyższych plików i katalogów, korzystając z wyszukiwania dostarczonego z systemem operacyjnym.

Na przykład w moim przypadku ( instalacja HomeBrew na Mac OS X ) pliki te znajdują się w /usr/local/var/postgres. Aby uruchomić serwer, piszę:

pg_ctl -D /usr/local/var/postgres -w start

... i działa.

Xagg
źródło
1
Jeśli używasz homebrew, łatwiejszym sposobem na zlokalizowanie tych danych jest po prostubrew info postgres
Ben
Masz rację co do powodu, dla którego szukam folderu bazy danych. Ale nie mogę znaleźć żadnego z powyższych plikówlocate <filename>
aswin prabhakar
Znaleziono je ... Musiałem użyćsudo locate <filename>
aswin prabhakar
14

Postgres przechowuje dane w plikach w swoim katalogu danych. Wykonaj poniższe kroki, aby przejść do bazy danych i jej plików:

Baza danych odpowiadająca plikowi tabeli postgresql jest katalogiem. Lokalizację całego katalogu danych można uzyskać, uruchamiając SHOW data_directory. w systemie operacyjnym UNIX (np .: Mac) /Library/PostgreSQL/9.4/data Wejdź do folderu podstawowego w katalogu danych, który zawiera wszystkie foldery bazy danych:/Library/PostgreSQL/9.4/data/base

Znajdź nazwę folderu bazy danych, uruchamiając (podaje liczbę całkowitą. To jest nazwa folderu bazy danych):

SELECT oid from pg_database WHERE datname = <database_name>;

Znajdź nazwę pliku tabeli, uruchamiając (podaje liczbę całkowitą. To jest nazwa pliku):

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

To jest plik binarny. Szczegóły pliku, takie jak rozmiar i data utworzenia, można uzyskać jak zwykle. Aby uzyskać więcej informacji, przeczytaj ten wątek SO

picmate 涅
źródło
11

Na komputerze Mac: /Library/PostgreSQL/9.0/data/base

Nie można wprowadzić katalogu, ale możesz obejrzeć zawartość poprzez: sudo du -hc data

evgeni
źródło
13
Jeśli zainstalowano poprzez homebrew (? I dlaczego nie), byłoby w /usr/local/var/postgresktórym można dowiedzieć się używając @ MikeSherrill w show data_directory;końcówce
Chris Beck
/Library/PostgreSQL/9.0/data/basewydaje się być lokalizacją bardziej podobną do komputera Mac niż /usr/local/var/postgres. Nie możesz przeglądać tych ostatnich w Finderze bez włączenia ukrytych funkcji Findera.
Charlie,
@Charlie Możesz przeglądać za pomocą Findera z menu Idź. Idź> Idź do folderu ... lub ⇧⌘G
Jason S
@JasonS Tak, możesz użyć tej sztuczki, aby otworzyć folder podobny do Maca w Finderze.
Charlie,
1
W moim przypadku jest on w: / Users / bob / Library / Application Support / Postgres / var-9.5
Bwyss 18.03.16
7

W systemie Windows katalog PGDATA, który opisują dokumenty PostgresSQL, jest gdzieś podobny C:\Program Files\PostgreSQL\8.1\data. Dane dla konkretnej bazy danych znajdują się pod (na przykład) C:\Program Files\PostgreSQL\8.1\data\base\100929, gdzie chyba 100929 jest numerem bazy danych.

Ben Hoyt
źródło
1
Uwaga: jeśli chcesz wykonać kopię zapasową na poziomie systemu plików, nie wykonuj kopii zapasowych tylko tych katalogów, ponieważ, jak opisują dokumenty : „... możesz ulec pokusie, aby spróbować wykonać kopię zapasową lub przywrócić tylko niektóre pojedyncze tabele lub bazy danych z ich odpowiednich pliki lub katalogi. To nie zadziała, ponieważ informacje zawarte w tych plikach nie są użyteczne bez plików dziennika zatwierdzeń pg_clog / *, które zawierają status zatwierdzenia wszystkich transakcji. ”
Janis Veinbergs,
To zależy. Możesz zainstalować go w innym folderze podczas instalacji.
ANeves
w moim przypadku nie ma folderu danych wewnątrz C: \ Program Files \ PostgreSQL \ 9.4 \ czy jest to coś specyficznego dla 9.4 lub czy zrobiłeś coś złego?
LucyViolet
2

odpowiedź picmate jest prawidłowa. w Windowsie główna lokalizacja folderu DB to (przynajmniej w mojej instalacji)

C:\PostgreSQL\9.2\data\base\

i nie w plikach programu.

jego 2 skrypty podadzą Ci dokładnie katalog / pliki, których potrzebujesz:

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

moja jest w nazwie 16393 i relfilenode 41603

pliki bazy danych w postgresql

k3nn
źródło
0

Używam postgres (9.5) w kontenerze dokera (jak to się dzieje w CentOS), a jak wspomina Skippy le Grand Gourou w powyższym komentarzu, pliki znajdują się w /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
źródło