Як знайти каталог даних PostgreSQL?


123

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

Я на MacOsX, якщо це допомагає.

/usr/local/postgres не існує на моєму Mac.

Використовуючи відповіді, подані нижче, я виявив, що саме тут:

/usr/local/var/postgres

Коли ви використовуєте Homebrew для встановлення Postgres, тоді dataце/usr/local/var/postgres
andrerpena

Відповіді:


152

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

SHOW data_directory;

це найкоротший шлях.

Якщо сервер не працює і ви забули, де був каталог даних, то вам справді доведеться самі здогадуватися. Підказки щодо конкретної операційної системи або історії оболонок можуть давати підказки.


7
якщо він не працює, спробуйте виконати пошук для postgresql.conf, який зазвичай знаходиться в каталозі даних, або матиме інформацію про каталог даних.
xzilla

34

Ви також можете запитувати його

select setting from pg_settings where name = 'data_directory';

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 Щоправда, але ОП був під ОС 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 є варіантом позиксу, ви завжди можете перевірити, 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

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 мають зручне діалогове вікно «Налаштування сервера», яке дозволить вам не просто перераховувати каталог даних, а й відкривати його безпосередньо.

Дуже корисно, якщо трапляється випадковий збій машини, який залишає після себе файл блокування.

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


Де цей діалог? Я не можу знайти щось подібне під час прямої установки (не варити) 9,5 через postgresql.org/download/macosx . Він поставляється з pgadmin III, але, схоже, це не має цього діалогу. Я не можу знайти будь-яких клієнтів на робочому столі?
Джон Літтл

1

У ОС 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

не відображає постгреси


1

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

@SET PGDATA=E:\POSTGRESQL

То була потрібна відповідь.


0

Як щодо використання стандартної утиліти pg_config, такої як pg_config --bindirOne, також може отримати параметри налаштування, використовувані для компіляції PostgreSQL та розбору їхpg_config --configure


--bindirпоказує розташування виконуваних файлів, а не каталог даних. --configureдобре, хоч треба трохи проаналізувати вихід.
dezso

Так, це правда, і, на жаль, у pg_config немає параметра, який би розкривав datadir. Коли я це писав, я думав, що принаймні це дає щось близьке, припускаючи, що datadir не знаходиться в спеціальному місці. datadir буде відносно тоді до bindir, таких як ../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 Марка Міллера, на 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 '%/%'тому що шлях починається з букви диска)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.