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;

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.


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.


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/"


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;

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

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.


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


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


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.


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.