Как найти каталог данных PostgreSQL?
Я забыл, как я в прошлый раз начал postgres (это было несколько месяцев назад), и я не помню, где находится каталог данных. Кажется, что команда postgres требует расположения. Я нахожусь на MacOsX, если это помогает.
/usr /local /postgres
не существует.
Используя приведенные ниже ответы, я обнаружил, что он был здесь
/USR /местные /вар /Postgres
11 ответов
Если вы можете подключиться к базе данных с доступом суперпользователя, то
SHOW data_directory;
- самый короткий путь.
Если сервер не запущен и вы забыли, где находится каталог данных, вам действительно нужно угадать. Контекст конкретной операционной системы или история оболочки могут содержать подсказки.
Вы также можете запросить его
выберите параметр из pg_settings, где name = 'data_directory';
pg_config
показывает много информации, включая каталог данных:
CONFIGURE = '--disable-debug' '--prefix = /usr /local /Cellar /postgresql /9.3.2'
'--datadir = /USR /местные /Погреб /PostgreSQL /9.3.2 /доля /PostgreSQL'
'--docdir = /USR /местные /Погреб /PostgreSQL /9.3.2 /доля /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 /местные /Подвал /OSSP-UUID /1.6.2 /включают'
'LDFLAGS = -L /usr /local /Cellar /ossp-uuid /1.6.2 /lib' 'LIBS = -luuid'
Это может быть особенность, характерная для варки; без пива я не знаю, что он показывает.
В Ubuntu \ Debian попробуйте выполнить команду pg_lsclusters
.
На моей машине:
pg_lsclusters
Версия Cluster Port Status Owner Каталог данных Файл журнала
8.4 main 5432 online postgres /home /adam /db /main /data /home /adam /db /main /log
Если вы не можете войти в систему (например, забыли свой пароль), но служба запущена, так как MacOS X является переменным posix, вы всегда можете проверить ps
, чтобы узнать, передается ли он в в качестве аргумента:
В окне Linux с двумя экземплярами 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
Откройте postgresql.conf, перейдите к строке:
data_directory = '/вар /Библиотека /PostgreSQL /главная /'
- ваш ответ.
Современные версии настольного клиента PostgreSQL для OSX имеют удобный диалог «Настройки сервера», который позволит вам не просто перечислить каталог данных, но и открыть его напрямую.
Очень полезно, если вы столкнулись с случайным сбоем машины, который оставляет за собой файл блокировки.
В OS X 10.8 и 10.9 (не 10.10) с установленным серверным приложением в окне терминала введите
Настройки sudo serveradmin 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 = "/Библиотека /Сервер /PostgreSQL /Данные"
postgres: log_directory = "/Library /Logs /PostgreSQL"
Я просто попробовал это в Yosemite (OS X 10.10), и postgres больше не отображается как служба в serveradmin (хотя postgres установлен).
Список sudo serveradmin
не перечисляет postgres
В Windows Server 2012 команда pg_config
не обнаружила каталог данных по какой-то сумасшедшей причине. Но я нашел его, посмотрев файл C: \ Program Files \ PostgreSQL \ 9.4 \ pg_env.bat
, который содержал эту строку:
@SET PGDATA = E: \ POSTGRESQL
Это был ответ, который мне нужен.
Как насчет использования стандартной утилиты pg_config, такой как pg_config --bindir
. Также можно получить параметры конфигурации, используемые для компиляции PostgreSQL, и проанализировать их с помощью pg_config --configure
Как указано, можно также использовать ps
для захвата местоположения данных, например:
ps -e | egrep postgres | egrep -E '[[: blank:]] + \ - D' | perl -pe 's /^.* [[: blank:]] + - D [[: blank:]] + (\ S +). *? $ /$ 1 /'
.
Это будет работать большую часть времени. Он будет возвращать что-то вроде /usr /local /pgsql /data
или везде, где он был указан в параметрах PostgreSQL при запуске.