Zapomněl jsem, jak jsem naposledy spustil PostgreSQL (to bylo před měsíci) a nepamatuji si, kde je umístěn datový adresář. Zdá se, že příkaz postgres
vyžaduje umístění datového adresáře.
Jsem na MacOsXu, pokud to pomůže.
/usr/local/postgres
na mém počítači Mac neexistuje.
Pomocí níže uvedených odpovědí jsem zjistil, že to bylo tady:
/usr/local/var/postgres
Pokud se můžete připojit k databázi s přístupem superuživatele, pak
SHOW data_directory;
je nejkratší cesta.
Pokud server nefunguje a vy jste zapomněli, kde byl datový adresář, musíte se opravdu uhodnout. Rady specifické pro operační systém nebo historie prostředí mohou poskytovat rady.
Můžete také dotazovat
select setting from pg_settings where name = 'data_directory';
pg_config
zobrazuje spoustu informací včetně datového adresáře:
CONFIGURE = '--disable-debug' '--prefix=/usr/local/Cellar/postgresql/9.3.2'
'--datadir=/usr/local/Cellar/postgresql/9.3.2/share/postgresql'
'--docdir=/usr/local/Cellar/postgresql/9.3.2/share/doc/postgresql'
'--enable-thread-safety' '--with-bonjour' '--with-gssapi' '--with-krb5'
'--with-ldap' '--with-openssl' '--with-pam' '--with-libxml' '--with-libxslt'
'--with-ossp-uuid' '--with-python' '--with-Perl' '--with-tcl' 'CC=clang'
'CFLAGS=-I/usr/local/Cellar/ossp-uuid/1.6.2/include'
'LDFLAGS=-L/usr/local/Cellar/ossp-uuid/1.6.2/lib' 'LIBS=-luuid'
To by ale mohla být věc specifická pro pivo; bez vaření nevím, co to ukazuje.
Na Ubuntu\Debian zkuste pg_lsclusters
příkaz.
Na mém stroji:
pg_lsclusters
Version Cluster Port Status Owner Data directory Log file
8.4 main 5432 online postgres /home/adam/db/main/data /home/adam/db/main/log
Pokud se nemůžete přihlásit (např. Zapomněli jste své heslo), ale služba je spuštěna, protože MacOS X je varianta posixu, můžete vždy zkontrolovat ps
a zjistit, zda se předává jako argument:
Na linuxové krabici se dvěma spuštěnými instancemi postgresu:
-bash-3.2$ ps ax | grep postgres | grep -v postgres:
4698 ? S 9:59 /opt/PostgreSQL/8.4/bin/postgres -D /opt/PostgreSQL/8.4/data
6115 ? S 8:16 /opt/PostgreSQL/8.4/bin/postgres -D /opt/PostgreSQL/8.4/data_sums
30694 pts/9 S+ 0:00 grep postgres
Otevřete postgresql.conf, přejděte na řádek:
data_directory='/var/lib/postgresql/main/'
je vaše odpověď.
Zobecnění ze 2 hlavních odpovědí:
Zobrazení datového adresáře přímo na příkazovém řádku:
psql -U postgres -tA -c "SHOW data_directory;"
Chcete-li také zobrazit všechny ostatní definované cesty k souborům a adresářům:
psql -U postgres -c "SELECT name, setting FROM pg_settings WHERE setting LIKE '/%';"
Ukázkový výstup:
name | setting
-------------------------+------------------------------------------
config_file | /etc/postgresql/9.6/main/postgresql.conf
data_directory | /mnt/pg_ssd_500/9.6/main
external_pid_file | /var/run/postgresql/9.6-main.pid
hba_file | /etc/postgresql/9.6/main/pg_hba.conf
ident_file | /etc/postgresql/9.6/main/pg_ident.conf
ssl_cert_file | /etc/ssl/pg_server.cer
ssl_key_file | /etc/ssl/private/pg_server.key
stats_temp_directory | /var/run/postgresql/9.6-main.pg_stat_tmp
unix_socket_directories | /var/run/postgresql
(9 rows)
(V systému Windows nahraďte LIKE '/%'
s LIKE '%/%'
protože cesta začíná písmenem jednotky)
V systému Windows Server 2012 příkaz pg_config
neodhalil datový adresář z nějakého šíleného důvodu. Ale našel jsem to při pohledu na soubor C:\Program Files\PostgreSQL\9.4\pg_env.bat
, který obsahoval tento řádek:
@SET PGDATA=E:\POSTGRESQL
To byla odpověď, kterou jsem potřeboval.
V OS X 10.8 a 10.9 (ne 10.10) s nainstalovanou serverovou aplikací zadejte do terminálového okna text
Sudo serveradmin settings postgres
V OS X 10.9 Mavericks je to výstup, který získám z toho, který obsahuje datový adresář.
postgres:log_connections = "on"
postgres:unix_socket_directory = "/private/var/pgsql_socket"
postgres:listen_addresses = "127.0.0.1,::1"
postgres:unix_socket_group = "_postgres"
postgres:log_statement = "ddl"
postgres:log_line_prefix = "%t "
postgres:unix_socket_permissions = "0770"
postgres:log_lock_waits = "on"
postgres:logging_collector = "on"
postgres:log_filename = "PostgreSQL.log"
postgres:dataDir = "/Library/Server/PostgreSQL/Data"
postgres:log_directory = "/Library/Logs/PostgreSQL"
Jen jsem to zkusil v Yosemite (OS X 10.10) a postgres již není uveden jako služba pod serveradmin (ačkoli postgres je nainstalován).
Sudo serveradmin list
neuvede postgres
Jak používat standardní utilitu pg_config, například pg_config --bindir
Jeden mohl také získat konfigurační parametry použité pro kompilaci PostgreSQL a analyzovat je s pg_config --configure
Na Fedoře a pravděpodobně několika dalších linuxových distribucích můžete změnit uživatele postgresu a přečíst si proměnnou prostředí PGDATA
. Např.:
Sudo su - postgres
echo ${PGDATA}
/var/lib/pgsql/12/data
Na základě odpovědi @Matthew Mark Miller, na MacOS 10.14 pomocí Postgres 11 je umístěn na:
~/Library/Application Support/Postgres
Jak bylo zdůrazněno, dalo by se také použít ps
k zachycení datového umístění, jako například:
ps -e |egrep postgres|egrep -E '[[:blank:]]+\-D'| Perl -pe 's/^.*[[:blank:]]+-D[[:blank:]]+(\S+).*?$/$1/'
.
Většinou to bude fungovat. Vrátilo by to něco jako /usr/local/pgsql/data
nebo kdekoli jinde to bylo specifikováno v parametrech PostgreSQL při spuštění.