Как мне найти каталог данных PostgreSQL?

124

Я забыл, как запустил PostgreSQL в последний раз (это было несколько месяцев назад), и я не помню, где находится каталог данных. Команда, postgresкажется, требует расположения каталога данных.

Я на MacOsX, если это поможет.

/usr/local/postgres не существует на моем Mac.

Используя ответы, приведенные ниже, я обнаружил, что это было здесь:

/usr/local/var/postgres
случайный парень
источник
При использовании Homebrew установки Postgres, то dataэто/usr/local/var/postgres
andrerpena

Ответы:

154

Если вы можете подключиться к базе данных с правами суперпользователя, то

SHOW data_directory;

это самый короткий путь.

Если сервер не работает, и вы забыли, где находится каталог данных, то вам действительно нужно догадаться. Соглашение о конкретной операционной системе или история оболочки могут содержать подсказки.

Питер Айзентраут
источник
7
если он не запущен, попробуйте запустить find для postgresql.conf, который обычно находится в каталоге данных или будет содержать информацию о каталоге данных.
xzilla
35

Вы также можете запросить его

select setting from pg_settings where name = 'data_directory';
DrColossos
источник
18

pg_config показывает много информации, включая каталог данных:

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'

Впрочем, это может быть специфическая вещь для варева; без варева я не знаю что это показывает.

Дэйв Ньютон
источник
1
Я тоже использую варево. На данный момент перечисленный в datadir pg_config --configureотличается от brew info postgresqlрекомендованного (который является $(brew --prefix)/var/postgresсимволической ссылкой и не является символом ссылки в списке). Кажется, формула немного слаба при правильном использовании флагов конфигурации.
Ваз
Примечание для Ubuntu / Debain: pg_config не устанавливается вместе с postgresql-<ver>пакетом apt, но требует такжеpostgresql-server-dev-<ver>
pscl
@PSCL Правда, но OP был под OS X.
Дейв Ньютон,
Понял. Просто примечание для будущей ссылки пользователей Debian (таких как я), которые наткнулись на этот вопрос, основываясь на его обобщенном названии.
pscl
1
@ Том, я не думаю, что формула действительно предназначена для использования datadir, переданного для настройки ... он ожидает, что datadir передается как аргумент командной строки, вы можете увидеть, что передается, когда он запускается автоматически как служба $(brew --prefix postgresql)/homebrew.mxcl.postgresql.plist, смотрите для пути, следующего за -D(это /usr/local/var/postgresна моем).
Ваз
16

На Ubuntu \ Debian попробуйте pg_lsclustersкоманду.

На моей машине:

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
Адам Матан
источник
8

Если вы не можете войти (например, забыли свой пароль), но служба работает, так как MacOS X - это posix-вариант, вы всегда можете проверить ps, передается ли он в качестве аргумента:

На linux box с двумя запущенными экземплярами postgres:

-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
Джо
источник
2

Откройте postgresql.conf, перейдите к строке:

data_directory='/var/lib/postgresql/main/'

это твой ответ.

Роналдиньо
источник
где вы найдетеpostgresql.conf
user5359531
@ user5359531 Вы можете сделать, find / -iname "postgresql.conf" 2>/dev/nullчтобы узнать
Том
Мой postgresql.confне data_directoryопределил. На него ссылаются только в комментарии:#data_directory = 'ConfigDir' # use data in another directory
SimpleJ
2

Современные версии настольного клиента PostgreSQL для OSX имеют удобный диалог «Настройки сервера», который позволит вам не просто перечислить каталог данных, но и открыть его напрямую.

Очень полезно, если вы столкнулись со случайным падением компьютера, которое оставляет файл блокировки.

введите описание изображения здесь

Мэтью Марк Миллер
источник
Где этот диалог? Я не могу найти ничего подобного в прямой установке (не brew) 9.5 через postgresql.org/download/macosx . Он поставляется с pgadmin III, но, похоже, этого диалога нет. Я не могу найти настольных клиентов?
Джон Литтл
1

В OS X 10.8 и 10.9 (не 10.10) с установленным приложением сервера в окне терминала введите

sudo serveradmin settings postgres

На OS X 10.9 Mavericks это вывод, который я получаю из этого, который включает каталог данных.

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"

Я только что попробовал это в Yosemite (OS X 10.10), и postgres больше не указан как сервис под serveradmin (хотя postgres установлен).

sudo serveradmin list

не перечисляет postgres

Джейсон С
источник
1

В Windows Server 2012 команда pg_configпо какой-то безумной причине не показала каталог данных. Но я нашел это, посмотрев на файл C:\Program Files\PostgreSQL\9.4\pg_env.bat, который содержал эту строку:

@SET PGDATA=E:\POSTGRESQL

Это был ответ, который мне был нужен.

user3618269
источник
0

Как насчет использования стандартной утилиты pg_config, такой как pg_config --bindirOne, также можно получить параметры конфигурации, используемые для компиляции PostgreSQL, и проанализировать их с помощьюpg_config --configure

Жак
источник
--bindirпоказывает расположение исполняемых файлов, а не каталог данных. --configureвсе в порядке, хотя нужно немного разобрать вывод.
Дезсо
Да, это правда, и, к сожалению, в pg_config нет параметра, который бы раскрыл каталог данных. Когда я писал это, я думал, что, по крайней мере, это дает что-то близкое, предполагая, что датадир не находится в специальном месте. Датадир будет относительным по отношению к биндиру, например ../data
Жак
0

Как указывалось, можно также использовать psдля захвата местоположения данных, таких как:

ps -e |egrep postgres|egrep -E '[[:blank:]]+\-D'| perl -pe 's/^.*[[:blank:]]+-D[[:blank:]]+(\S+).*?$/$1/',

Это будет работать большую часть времени. Он будет возвращать что-то вроде /usr/local/pgsql/dataили где-либо еще это было указано в параметрах PostgreSQL при запуске.

Жак
источник
0

Основываясь на ответе @Matthew Mark Miller, в macOS 10.14 с использованием Postgres 11 он находится по адресу:

~/Library/Application Support/Postgres
Навид
источник
0

Обобщая из 2 лучших ответов:

Чтобы отобразить каталог данных непосредственно в командной строке:

psql -U postgres -tA -c "SHOW data_directory;"

Чтобы также увидеть все другие определенные пути к файлам и каталогам:

psql -U postgres -c "SELECT name, setting FROM pg_settings WHERE setting LIKE '/%';"

Образец вывода:

          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)

(В Windows замените LIKE '/%'на, LIKE '%/%'потому что путь начинается с буквы диска)

mivk
источник