Dove archivia PostgreSQL il database?


Risposte:


355

Per vedere dove si trova la directory dei dati, utilizzare questa query.

show data_directory;

Per vedere tutti i parametri di runtime, utilizzare

show all;

È possibile creare tablespace per archiviare oggetti di database in altre parti del file system. Per visualizzare i tablespace, che potrebbero non trovarsi in quella directory di dati, utilizzare questa query.

SELECT * FROM pg_tablespace;

1
mostra data_directory; il comando indica l'esatta posizione dei dati. La ricerca di una cartella specifica è dolorosa in quanto qualcun altro potrebbe averla installata per te e ora non conosci la configurazione, quindi seguire sql aiuta a risparmiare tempo. :) Grazie Mike.
Vishal,

3
Dice "deve essere un superutente per esaminare la directory dei dati" :(
temporary_user_name

5
Se non sei un DBA, non devi comunque saperlo.
Mike Sherrill 'Cat Recall',

8
A proposito: se qualcuno sta cercando il percorso del database per Postgres.app su un Mac come me, è in ~ / Library / Application Support / Postgres [ver] / var per impostazione predefinita.
sstringer,

1
Per eseguire una query, utilizzare PGAdmin III e utilizzare l'icona "esegui una query" nella barra dei menu.
Rutger Hofste l'

61

Su Windows 7 tutti i database sono indicati da un numero nel file indicato pg_databasesotto C:\Program Files (x86)\PostgreSQL\8.2\data\global. Quindi dovresti cercare il nome della cartella con quel numero sotto C:\Program Files (x86)\PostgreSQL\8.2\data\base. Questo è il contenuto del database.


3
Non rispondere in un modo specifico del sistema operativo a meno che la domanda non indichi esplicitamente il sistema operativo.
simonmenke,

24
Perchè no? Se non menzioni il sistema operativo e dici semplicemente "funziona", chiunque lo provi su un sistema operativo diverso verrà confuso. È rilevante. EDIT: Oh, probabilmente intendi "non dare una risposta specifica al sistema operativo". Immagino che abbia un senso, non lo so.
David Winiecki,

34
@ David, la domanda è stata chiusa presumibilmente perché non specificava quale sistema operativo. (Se avesse specificato un sistema operativo, sarebbe stato chiuso per essere troppo specifico.) La tua risposta è stata utile e istruttiva - ignora solo i negligenti e i downvoter fino a quando non riescono finalmente a distruggere SO. Gli odiatori odieranno e tutto il resto.
SamGoody,

@SamGoody ci sarebbe un po 'di punto su quello che stavi dicendo, se questa risposta fosse effettivamente corretta. (Non è strettamente errato, poiché la cartella potrebbe essere lì in Windows, ma sicuramente non è un dato di fatto). Se è il caso o no, può essere facilmente scoperto seguendo la risposta già fornita.
Jon Hanna,

@senthilkumari Ho postgresql 11 e windows 10. Come hai detto, ho provato a vedere il pg_database nella cartella globale ma non ne ho visto nessuno. Ho potuto vedere un mucchio di _vms, _fsm, config_exec_params, pg_control, pg_filenode.map, pg_internal.init. Per Windows 10 quale file denominato dovrei cercare. È diverso?
Nachiket,

29

Apri pgAdmin e vai su Proprietà per un database specifico. Trova OID e quindi apri la directory

<POSTGRESQL_DIRECTORY>/data/base/<OID>

Dovrebbero esserci i tuoi file DB.


14
SELECT oid from pg_database where datname = '<dbname>'
Charlie,


27

Sotto la mia installazione di Linux, è qui: /var/lib/postgresql/8.x/

Puoi cambiarlo con initdb -D "c:/mydb/"


12
Dipende dalla distribuzione - per Fedora 20 è sotto /var/lib/pgsql/data. Meglio scoprirlo usando ps auxw|grep postgres|grep -- -D.
Skippy le Grand Gourou,

17

La posizione di tabelle / indici specifici può essere regolata da TABLESPACEs:

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

15

Tutti hanno già risposto, ma solo per gli ultimi aggiornamenti. Se vuoi sapere dove risiedono tutti i file di configurazione, esegui questo comando nella shell

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

14

Scommetto che stai facendo questa domanda perché hai provato pg_ctl starte ricevuto il seguente errore:

pg_ctl: nessuna directory di database specificata e variabile di ambiente PGDATA non impostata

In altre parole, stai cercando la directory da inserire -Dnel tuo pg_ctl startcomando.

In questo caso, la directory che stai cercando contiene questi file.

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

Puoi individuarlo individuando uno dei file e le directory sopra usando la ricerca fornita con il tuo sistema operativo.

Ad esempio nel mio caso ( un'installazione di HomeBrew su Mac OS X ), questi file si trovano in /usr/local/var/postgres. Per avviare il server digito:

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

... e funziona.


1
Se usi l'homebrew, un modo più semplice per individuare questi dati è semplicementebrew info postgres
Ben

Hai ragione sul motivo per cui sto cercando la cartella del database. Ma il fatto è che non riesco a trovare nessuno dei file sopra conlocate <filename>
aswin prabhakar

Li sudo locate <filename>
ho

14

Postgres memorizza i dati in file nella sua directory di dati. Seguire i passaggi seguenti per accedere a un database e ai suoi file:

Il database corrispondente a un file di tabella postgresql è una directory. La posizione dell'intera directory di dati può essere ottenuta eseguendo SHOW data_directory. in un sistema operativo UNIX come (ad esempio: Mac) /Library/PostgreSQL/9.4/data Vai all'interno della cartella di base nella directory dei dati che ha tutte le cartelle del database:/Library/PostgreSQL/9.4/data/base

Trova il nome della cartella del database eseguendo (Fornisce un numero intero. Questo è il nome della cartella del database):

SELECT oid from pg_database WHERE datname = <database_name>;

Trova il nome del file della tabella eseguendo (Fornisce un numero intero. Questo è il nome del file):

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

Questo è un file binario. I dettagli del file come dimensione e data di creazione possono essere ottenuti come al solito. Per maggiori informazioni leggi questa discussione SO


11

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

La directory non può essere inserita, ma puoi guardare il contenuto tramite: sudo du -hc data


13
Se installato tramite homebrew (e perché non lo faresti?), Sarebbe in /usr/local/var/postgresquesto che puoi scoprire usando il show data_directory;suggerimento di @ MikeSherrill
Chris Beck,

/Library/PostgreSQL/9.0/data/basesembra un luogo più simile a un Mac di /usr/local/var/postgres. Non puoi accedere a quest'ultimo in Finder senza abilitare le funzioni di Finder nascosto.
Charlie,

@Charlie Puoi navigare usando il Finder dal menu Vai. Vai> Vai a Cartella ... o ⇧⌘G
Jason S

@JasonS Sì, puoi usare quel trucco per aprire la cartella non simile a Mac nel Finder.
Charlie

1
Nel mio caso è in: / Users / bob / Library / Application Support / Postgres / var-9.5
Bwyss

7

Su Windows, la directory PGDATA descritta dai documenti PostgresSQL è in qualche modo simile C:\Program Files\PostgreSQL\8.1\data. I dati per un determinato database sono sotto (ad esempio) C:\Program Files\PostgreSQL\8.1\data\base\100929, dove immagino che 100929 sia il numero del database.


1
Attenzione: se si desidera eseguire il backup a livello di file system, non eseguire il backup di queste directory, poiché, come descrivono i documenti : "... si potrebbe essere tentati di provare a eseguire il backup o il ripristino solo di determinate singole tabelle o database dai rispettivi file o directory. Ciò non funzionerà perché le informazioni contenute in questi file non sono utilizzabili senza i file di registro di commit, pg_clog / *, che contengono lo stato di commit di tutte le transazioni. "
Janis Veinbergs,

Questo dipende. Al momento dell'installazione potresti averlo configurato in una cartella diversa.
ANeves

sulla mia, non esiste una cartella di dati all'interno di C: \ Programmi \ PostgreSQL \ 9.4 \ è qualcosa di specifico a 9.4 o hai fatto qualcosa di sbagliato?
LucyViolet il

2

la risposta di picmate è giusta. su Windows il percorso della cartella DB principale è (almeno sulla mia installazione)

C:\PostgreSQL\9.2\data\base\

e non nei file di programma.

i suoi 2 script, ti daranno la directory / i file esatti di cui hai bisogno:

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

il mio è nel nome dati 16393 e relfilenode 41603

file di database in postgresql


0

Sto eseguendo Postgres (9.5) in un contenitore docker (su CentOS, come succede), e come Skippy le Grand Gourou menziona in un commento sopra, i file si trovano in /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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.