Bagaimana cara menemukan direktori data PostgreSQL?

124

Saya lupa bagaimana saya memulai PostgreSQL terakhir kali (berbulan-bulan yang lalu) dan saya tidak ingat di mana direktori data berada. The postgresperintah tampaknya memerlukan lokasi direktori data.

Saya menggunakan MacOsX jika itu membantu.

/usr/local/postgres tidak ada di Mac saya.

Dengan menggunakan jawaban yang disediakan di bawah ini, saya menemukan bahwa jawabannya ada di sini:

/usr/local/var/postgres
membeli secara acak
sumber
Bila Anda menggunakan Homebrew untuk menginstal Postgres, maka dataadalah/usr/local/var/postgres
andrerpena

Jawaban:

154

Jika Anda dapat terhubung ke database dengan akses superuser, maka

SHOW data_directory;

adalah jalan terpendek.

Jika server tidak berjalan dan Anda lupa di mana direktori data berada, maka Anda harus menebak sendiri. Konvensi khusus sistem operasi atau riwayat shell mungkin memberikan petunjuk.

Peter Eisentraut
sumber
7
jika tidak berjalan, coba jalankan find untuk postgresql.conf, yang biasanya di direktori data, atau akan memiliki informasi tentang direktori data.
xzilla
35

Anda juga dapat menanyakannya

select setting from pg_settings where name = 'data_directory';
DrColossos
sumber
18

pg_config memperlihatkan banyak informasi termasuk direktori data:

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'

Ini mungkin merupakan hal yang spesifik untuk pembuatan bir; tanpa minuman saya tidak tahu apa yang ditampilkan.

Dave Newton
sumber
1
Saya menggunakan minuman juga. Sampai sekarang, datadir yang tercantum dalam pg_config --configuretidak sama dengan yang brew info postgresqldirekomendasikan (yang merupakan $(brew --prefix)/var/postgresdan bukan symlink ke yang terdaftar). Tampaknya rumusnya agak longgar dalam menggunakan flag konfigurasi dengan benar.
Vaz
Catatan untuk Ubuntu / Debain: pg_config tidak diinstal dengan postgresql-<ver>paket apt, tetapi membutuhkan jugapostgresql-server-dev-<ver>
pscl
@PSCL Benar, tetapi OP berada di bawah OS X.
Dave Newton
Dimengerti. Hanya catatan untuk referensi di masa depan dari pengguna Debian (seperti saya) yang tersandung pada pertanyaan ini berdasarkan pada judul generiknya.
pscl
1
@ Tom Saya tidak berpikir rumus ini benar-benar dimaksudkan untuk menggunakan datadir yang disahkan untuk mengkonfigurasi ... ia mengharapkan akan melewati datadir sebagai arg baris perintah, Anda dapat melihat apa yang dilewati ketika dijalankan secara otomatis sebagai layanan $(brew --prefix postgresql)/homebrew.mxcl.postgresql.plist, lihat untuk jalan mengikuti -D(ada /usr/local/var/postgresdi tambang).
Vaz
16

Di Ubuntu \ Debian, coba pg_lsclustersperintah.

Di mesin saya:

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
Adam Matan
sumber
8

Jika Anda tidak dapat masuk (misalnya, lupa kata sandi Anda) tetapi layanan sedang berjalan, karena MacOS X adalah varian posix, Anda selalu dapat memeriksa psuntuk melihat apakah itu dilewatkan sebagai argumen:

Pada kotak linux dengan dua instance postgres berjalan:

-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
Joe
sumber
2

Buka postgresql.conf, buka baris:

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

adalah jawaban anda

Ronaldinho
sumber
di mana Anda menemukanpostgresql.conf
user5359531
@ user5359531 Anda dapat melakukannya find / -iname "postgresql.conf" 2>/dev/nulluntuk mencari tahu
Tom
Saya postgresql.conftidak memiliki data_directorydefinisi. Ini hanya dirujuk dalam komentar:#data_directory = 'ConfigDir' # use data in another directory
SimpleJ
2

Versi modern dari klien desktop PostgreSQL untuk OSX memiliki dialog "Pengaturan Server" yang nyaman yang akan memungkinkan Anda tidak hanya untuk mendaftar direktori data tetapi membukanya secara langsung.

Sangat berguna jika Anda mengalami kerusakan mesin acak yang meninggalkan file kunci.

masukkan deskripsi gambar di sini

Matthew Mark Miller
sumber
Di mana dialog ini? Saya tidak dapat menemukan hal seperti ini pada pemasangan langsung (bukan minuman) 9.5 melalui postgresql.org/download/macosx . Itu memang datang dengan pgadmin III, tetapi ini sepertinya tidak memiliki dialog ini. Saya tidak dapat menemukan klien desktop?
John Little
1

Pada OS X 10.8 dan 10.9 (bukan 10.10) dengan aplikasi server diinstal, di jendela terminal, ketik

sudo serveradmin settings postgres

Pada OS X 10.9 Mavericks, ini adalah output yang saya dapatkan dari itu, yang termasuk direktori data.

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"

Saya baru saja mencoba ini di Yosemite (OS X 10.10) dan postgres tidak lagi terdaftar sebagai layanan di bawah serveradmin (walaupun postgres diinstal).

sudo serveradmin list

tidak mencantumkan postgres

Jason S
sumber
1

Pada Windows Server 2012, perintah pg_configitu tidak mengungkapkan direktori data untuk beberapa alasan gila. Tapi saya menemukannya dengan melihat file C:\Program Files\PostgreSQL\9.4\pg_env.batyang berisi baris ini:

@SET PGDATA=E:\POSTGRESQL

Itulah jawaban yang saya butuhkan.

pengguna3618269
sumber
0

Bagaimana dengan menggunakan utilitas standar pg_config seperti pg_config --bindirOne juga bisa mendapatkan parameter konfigurasi yang digunakan untuk mengkompilasi PostgreSQL dan menguraikannya denganpg_config --configure

Jacques
sumber
--bindirmenunjukkan lokasi file executable, bukan direktori data. --configureOK, meskipun kita harus menguraikan output sedikit.
dezso
Ya itu benar dan sayangnya pg_config tidak memiliki parameter yang akan mengungkapkan datadir. Ketika saya menulis ini, saya berpikir bahwa setidaknya itu memberikan sesuatu yang dekat, dengan anggapan bahwa datadir tidak berada di lokasi khusus. datadir akan relatif kemudian ke bindir seperti ../data
Jacques
0

Seperti yang ditunjukkan, seseorang juga dapat menggunakan psuntuk menangkap lokasi data seperti:

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

Ini akan berhasil sebagian besar waktu. Ini akan mengembalikan sesuatu seperti /usr/local/pgsql/dataatau di mana pun itu ditentukan dalam parameter PostgreSQL saat diluncurkan.

Jacques
sumber
0

Berdasarkan jawaban oleh @Matthew Mark Miller, pada macOS 10.14 menggunakan Postgres 11 terletak di:

~/Library/Application Support/Postgres
Navid
sumber
0

Generalisasi dari 2 jawaban teratas:

Untuk menampilkan direktori data secara langsung di baris perintah:

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

Untuk juga melihat semua jalur yang ditentukan lainnya ke file dan direktori:

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

Output sampel:

          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)

(Di Windows, ganti LIKE '/%'dengan LIKE '%/%'karena jalur dimulai dengan huruf drive)

mivk
sumber