Qual è la directory predefinita in cui PostgreSQL manterrà tutti i database su Linux?
Qual è la directory predefinita in cui PostgreSQL manterrà tutti i database su Linux?
Risposte:
La " directory in cui postgresql manterrà tutti i database " (e la configurazione) è chiamata "directory dei dati" e corrisponde a ciò che PostgreSQL chiama (in modo un po 'confuso) un " cluster di database ", che non è correlato al calcolo distribuito, significa solo un gruppo di database e oggetti correlati gestiti da un server PostgreSQL.
La posizione della directory dei dati dipende dalla distribuzione. Se installi dalla sorgente, l'impostazione predefinita è /usr/local/pgsql/data
:
In termini di file system, un cluster di database sarà una singola directory in cui verranno archiviati tutti i dati. Chiamiamo questa directory o area dati. Dipende completamente da te dove scegliere di memorizzare i tuoi dati. Non ci sono impostazioni predefinite, sebbene posizioni come / usr / local / pgsql / data o / var / lib / pgsql / data siano popolari. ( rif )
Inoltre, un'istanza di un server PostgreSQL in esecuzione è associata a un cluster; la posizione della sua directory di dati può essere passata al demone del server (" postmaster " o " postgres ") -D
nell'opzione della riga di comando, o dalla PGDATA
variabile d'ambiente (di solito nell'ambito dell'utente in esecuzione, in genere postgres
). Di solito puoi vedere il server in esecuzione con qualcosa del genere:
[root@server1 ~]# ps auxw | grep postgres | grep -- -D
postgres 1535 0.0 0.1 39768 1584 ? S May17 0:23 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
Si noti che è possibile, sebbene non molto frequente, eseguire due istanze dello stesso server PostgreSQL (stessi binari, processi diversi) che servono diversi "cluster" (directory di dati). Naturalmente, ogni istanza ascolterebbe sulla propria porta TCP / IP.
/var/lib/postgresql/[version]/data/
Almeno in Gentoo Linux e Ubuntu 14.04 per impostazione predefinita.
Puoi trovare postgresql.conf
e guardare param data_directory
. Se è commentato, la directory del database è la stessa di questa directory del file di configurazione.
/var/lib/8.1/postgresql
/var/lib/pgsql/9.3
Connettiti a un database ed esegui il comando:
SHOW data_directory;
Maggiori informazioni:
https://www.postgresql.org/docs/current/sql-show.html https://www.postgresql.org/docs/current/runtime-config-file-locations.html
Predefinito in Debian 8.1 e PostgreSQL 9.4 dopo l'installazione con apt-get del gestore di pacchetti
ps auxw | grep postgres | grep -- -D
postgres 17340 0.0 0.5 226700 21756 ? S 09:50 0:00 /usr/lib/postgresql/9.4/bin/postgres -D /var/lib/postgresql/9.4/main -c config_file=/etc/postgresql/9.4/main/postgresql.conf
così a quanto pare /var/lib/postgresql/9.4/main
.
Il comando pg_lsclusters
(almeno sotto Linux / Ubuntu) può essere utilizzato per elencare i cluster esistenti e con esso anche la directory dei dati:
Ver Cluster Port Status Owner Data directory Log file
9.5 main 5433 down postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
10 main 5432 down postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
Penso che il metodo migliore sia interrogare la pg_setting
vista:
select s.name, s.setting, s.short_desc from pg_settings s where s.name='data_directory';
Produzione:
name | setting | short_desc
----------------+------------------------+-----------------------------------
data_directory | /var/lib/pgsql/10/data | Sets the server's data directory.
(1 row)
La query sottostante aiuterà a trovare il file di configurazione di postgres.
postgres=# SHOW config_file;
config_file
-------------------------------------
/var/lib/pgsql/data/postgresql.conf
(1 row)
[root@node1 usr]# cd /var/lib/pgsql/data/
[root@node1 data]# ls -lrth
total 48K
-rw------- 1 postgres postgres 4 Nov 25 13:58 PG_VERSION
drwx------ 2 postgres postgres 6 Nov 25 13:58 pg_twophase
drwx------ 2 postgres postgres 6 Nov 25 13:58 pg_tblspc
drwx------ 2 postgres postgres 6 Nov 25 13:58 pg_snapshots
drwx------ 2 postgres postgres 6 Nov 25 13:58 pg_serial
drwx------ 4 postgres postgres 36 Nov 25 13:58 pg_multixact
-rw------- 1 postgres postgres 20K Nov 25 13:58 postgresql.conf
-rw------- 1 postgres postgres 1.6K Nov 25 13:58 pg_ident.conf
-rw------- 1 postgres postgres 4.2K Nov 25 13:58 pg_hba.conf
drwx------ 3 postgres postgres 60 Nov 25 13:58 pg_xlog
drwx------ 2 postgres postgres 18 Nov 25 13:58 pg_subtrans
drwx------ 2 postgres postgres 18 Nov 25 13:58 pg_clog
drwx------ 5 postgres postgres 41 Nov 25 13:58 base
-rw------- 1 postgres postgres 92 Nov 25 14:00 postmaster.pid
drwx------ 2 postgres postgres 18 Nov 25 14:00 pg_notify
-rw------- 1 postgres postgres 57 Nov 25 14:00 postmaster.opts
drwx------ 2 postgres postgres 32 Nov 25 14:00 pg_log
drwx------ 2 postgres postgres 4.0K Nov 25 14:00 global
drwx------ 2 postgres postgres 25 Nov 25 14:20 pg_stat_tmp