it-swarm.asia

Bagaimana cara menemukan direktori data PostgreSQL?

Saya lupa bagaimana saya memulai PostgreSQL terakhir kali (berbulan-bulan yang lalu) dan saya tidak ingat di mana direktori data berada. Perintah postgres tampaknya membutuhkan 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
134
randomguy

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.

168
Peter Eisentraut

Anda juga dapat menanyakannya

select setting from pg_settings where name = 'data_directory';
38
DrColossos

pg_config menunjukkan 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.

19
Dave Newton

Di Ubuntu\Debian, coba pg_lsclusters perintah.

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
17
Adam Matan

Jika Anda tidak dapat masuk (mis. Lupa kata sandi Anda) tetapi layanan sedang berjalan, karena MacOS X adalah varian posix, Anda selalu dapat memeriksa ps untuk 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
9
Joe

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.

enter image description here

4

Buka postgresql.conf, buka baris:

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

adalah jawaban anda.

4
Ronaldinho

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 path dimulai dengan huruf drive)

1
mivk

Pada Windows Server 2012, perintah pg_config tidak mengungkapkan direktori data karena alasan gila. Tapi saya menemukannya dengan melihat file C:\Program Files\PostgreSQL\9.4\pg_env.bat, yang berisi baris ini:

@SET PGDATA=E:\POSTGRESQL

Itulah jawaban yang saya butuhkan.

1
user3618269

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

1
Jason S

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

0
Jacques

Pada Fedora dan mungkin beberapa distro Linux lainnya, Anda dapat mengubah ke pengguna postgres dan membaca variabel lingkungan PGDATA. Misalnya.:

Sudo su - postgres
echo ${PGDATA}
/var/lib/pgsql/12/data
0
dbdemon

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

~/Library/Application Support/Postgres
0
Navid

Seperti yang ditunjukkan, orang juga dapat menggunakan ps untuk menangkap lokasi data seperti:

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

Ini akan bekerja sebagian besar waktu. Itu akan mengembalikan sesuatu seperti /usr/local/pgsql/data atau di mana pun itu ditentukan dalam parameter PostgreSQL saat peluncuran.

0
Jacques