Làm cách nào để tìm thư mục dữ liệu của PostgreSQL?


124

Tôi đã quên cách tôi khởi động PostgreSQL lần trước (cách đây vài tháng) và tôi không nhớ thư mục dữ liệu nằm ở đâu. Các postgreslệnh dường như đòi hỏi vị trí của thư mục dữ liệu.

Tôi đang dùng MacOsX nếu điều đó có ích.

/usr/local/postgres không tồn tại trên máy Mac của tôi.

Sử dụng các câu trả lời được cung cấp dưới đây, tôi thấy rằng nó ở đây:

/usr/local/var/postgres

Khi bạn sử dụng để cài đặt Homebrew Postgres, sau đó data/usr/local/var/postgres
andrerpena

Câu trả lời:


154

Nếu bạn có thể kết nối với cơ sở dữ liệu với quyền truy cập siêu người dùng, thì

SHOW data_directory;

là con đường ngắn nhất

Nếu máy chủ không chạy và bạn quên thư mục dữ liệu ở đâu, thì bạn thực sự phải tự đoán. Một quy ước cụ thể của hệ điều hành hoặc lịch sử shell có thể cung cấp gợi ý.


7
nếu nó không chạy, hãy thử chạy find for postgresql.conf, thường nằm trong thư mục dữ liệu hoặc sẽ có thông tin về thư mục dữ liệu.
xzilla

35

Bạn cũng có thể truy vấn nó

select setting from pg_settings where name = 'data_directory';

18

pg_config hiển thị rất nhiều thông tin bao gồm cả thư mục dữ liệu:

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'

Điều này có thể là một điều cụ thể bia, mặc dù; không có bia tôi không biết những gì nó thể hiện.


1
Tôi cũng đang sử dụng bia. Cho đến nay, datadir được liệt kê trong pg_config --configurekhông giống như dữ liệu được brew info postgresqlđề xuất (đó là $(brew --prefix)/var/postgresvà không phải là một liên kết tượng trưng đến cái được liệt kê). Có vẻ như công thức hơi lỏng lẻo khi sử dụng cờ cấu hình đúng cách.
Vaz

Lưu ý cho Ubuntu / Debain: pg_config không được cài đặt với postgresql-<ver>gói apt, nhưng cũng yêu cầupostgresql-server-dev-<ver>
pscl

@PSCL Đúng, nhưng OP đã ở trong OS X.
Dave Newton

Hiểu. Chỉ cần một lưu ý cho tài liệu tham khảo trong tương lai của người dùng Debian (chẳng hạn như bản thân tôi) tình cờ gặp câu hỏi này dựa trên tiêu đề chung của nó.
pscl

1
@Tom Tôi không nghĩ rằng công thức thực sự có ý định sử dụng datadir được truyền để định cấu hình ... nó dự kiến ​​sẽ được truyền datadir dưới dạng một dòng lệnh, bạn có thể thấy những gì được truyền vào khi nó chạy tự động như một dịch vụ $(brew --prefix postgresql)/homebrew.mxcl.postgresql.plist. cho con đường theo sau -D(nó là của /usr/local/var/postgrestôi).
Vaz

16

Trên Ubuntu \ Debian, hãy thử pg_lsclusterslệnh.

Trên máy của tôi:

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

Nếu bạn không thể đăng nhập (ví dụ: quên mật khẩu) nhưng dịch vụ đang chạy, vì MacOS X là một biến số tạm thời, bạn luôn có thể kiểm tra psxem liệu nó có được truyền vào như một đối số không:

Trên một hộp linux có hai phiên bản postgres đang chạy:

-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

Mở postgresql.conf, đi đến dòng:

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

là câu trả lời của bạn


bạn tìm ở đâupostgresql.conf
user5359531

@ user5359531 Bạn có thể làm find / -iname "postgresql.conf" 2>/dev/nullđể tìm hiểu
Tom

Của tôi postgresql.confkhông có data_directoryđịnh nghĩa. Nó chỉ được tham chiếu trong một bình luận:#data_directory = 'ConfigDir' # use data in another directory
SimpleJ

2

Các phiên bản hiện đại của máy khách máy tính để bàn PostgreSQL cho OSX có hộp thoại "Cài đặt máy chủ" thuận tiện cho phép bạn không chỉ liệt kê thư mục dữ liệu mà còn mở trực tiếp.

Rất hữu ích nếu bạn gặp sự cố máy ngẫu nhiên để lại tệp khóa.

nhập mô tả hình ảnh ở đây


Hộp thoại này ở đâu? Tôi không thể tìm thấy bất cứ điều gì như thế này trên bản cài đặt trực tiếp (không phải pha) là 9,5 qua postgresql.org/doad/macosx . Nó đi kèm với pgadmin III, nhưng điều này dường như không có hộp thoại này. Tôi không thể tìm thấy bất kỳ khách hàng máy tính để bàn?
John Little

1

Trên OS X 10.8 và 10.9 (không phải 10.10) với ứng dụng máy chủ được cài đặt, trong cửa sổ đầu cuối, nhập

sudo serveradmin settings postgres

Trên OS X 10.9 Mavericks, đây là đầu ra tôi nhận được từ đó, bao gồm thư mục dữ liệu.

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"

Tôi mới thử điều này trong Yosemite (OS X 10.10) và postgres không còn được liệt kê dưới dạng dịch vụ trong serveradmin (mặc dù postgres đã được cài đặt).

sudo serveradmin list

không liệt kê postgres


1

Trên Windows Server 2012, lệnh pg_configkhông tiết lộ thư mục dữ liệu vì một số lý do điên rồ. Nhưng tôi đã tìm thấy nó bằng cách xem tập tin C:\Program Files\PostgreSQL\9.4\pg_env.batchứa dòng này:

@SET PGDATA=E:\POSTGRESQL

Đó là câu trả lời tôi cần.


0

Làm thế nào về việc sử dụng tiện ích tiêu chuẩn pg_config như pg_config --bindirOne cũng có thể nhận được các tham số cấu hình được sử dụng để biên dịch PostgreQuery và phân tích chúng vớipg_config --configure


--bindirhiển thị vị trí của các tệp thực thi, không phải thư mục dữ liệu. --configurevẫn ổn, mặc dù người ta phải phân tích đầu ra một chút.
dezso

Vâng, đó là sự thật và thật không may, pg_config không có tham số nào sẽ tiết lộ datadir. Khi tôi viết điều này, tôi nghĩ rằng ít nhất nó mang lại một cái gì đó gần gũi, giả sử datadir không ở một vị trí đặc biệt. datadir sau đó sẽ tương đối với các bindir như ../data
Jacques

0

Như đã chỉ ra, người ta cũng có thể sử dụng psđể chụp vị trí dữ liệu, chẳng hạn như:

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

Điều này sẽ làm việc hầu hết thời gian. Nó sẽ trả về một cái gì đó giống như /usr/local/pgsql/datahoặc bất cứ nơi nào khác được chỉ định trong các tham số của PostgreSQL khi khởi chạy.


0

Dựa trên câu trả lời của @Matthew Mark Miller, trên macOS 10.14 bằng Postgres 11, nó được đặt tại:

~/Library/Application Support/Postgres

0

Tổng quát hóa từ 2 câu trả lời hàng đầu:

Để hiển thị thư mục dữ liệu trực tiếp tại dòng lệnh:

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

Để xem tất cả các đường dẫn được xác định khác đến tệp và thư mục:

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

Đầu ra mẫu:

          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)

(Trên Windows, thay thế LIKE '/%'bằng LIKE '%/%'vì đường dẫn bắt đầu bằng ký tự ổ đĩa)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.