PostgreSQL lưu trữ cơ sở dữ liệu ở đâu?


Câu trả lời:


355

Để xem thư mục dữ liệu ở đâu, hãy sử dụng truy vấn này.

show data_directory;

Để xem tất cả các tham số thời gian chạy, sử dụng

show all;

Bạn có thể tạo không gian bảng để lưu trữ các đối tượng cơ sở dữ liệu trong các phần khác của hệ thống tệp. Để xem các không gian bảng, có thể không có trong thư mục dữ liệu đó, hãy sử dụng truy vấn này.

SELECT * FROM pg_tablespace;

1
hiển thị data_directory; lệnh chỉ đến vị trí chính xác của dữ liệu. Tìm kiếm thư mục cụ thể là khó khăn vì người khác có thể đã cài đặt nó cho bạn và bây giờ bạn không biết cấu hình, vì vậy, theo sql giúp tiết kiệm thời gian. :) Cảm ơn Mike.
Vishal

3
Nó nói "phải superuser để kiểm tra thư mục dữ liệu" :(
temporary_user_name

5
Nếu bạn không phải là một DBA, bạn thực sự không cần phải biết.
Mike Sherrill 'Nhớ lại mèo'

8
BTW - nếu bất cứ ai đang tìm kiếm vị trí cơ sở dữ liệu cho Postgres.app trên máy Mac như tôi, thì nó nằm trong ~ / Library / Application Support / Postgres [ver] / var theo mặc định.
sstringer

1
Để chạy truy vấn, sử dụng PGAdmin III và sử dụng biểu tượng "chạy truy vấn" trong thanh menu.
Rutger Hofste

61

Trên Windows7, tất cả các cơ sở dữ liệu được gọi bằng một số trong tệp có tên pg_databasebên dưới C:\Program Files (x86)\PostgreSQL\8.2\data\global. Sau đó, bạn nên tìm kiếm tên thư mục theo số đó dưới C:\Program Files (x86)\PostgreSQL\8.2\data\base. Đó là nội dung của cơ sở dữ liệu.


3
Đừng trả lời theo cách cụ thể của HĐH trừ khi câu hỏi nêu rõ HĐH.
simonmenke

24
Tại sao không? Nếu bạn không đề cập đến HĐH và chỉ nói "điều này hoạt động", bất kỳ ai đang thử điều đó trên một HĐH khác sẽ bị nhầm lẫn. Nó có liên quan. EDIT: Ồ, có lẽ bạn có nghĩa là "không đưa ra câu trả lời cụ thể cho hệ điều hành." Tôi đoán điều đó có ý nghĩa, tôi không biết.
David Winiecki

34
@David, Câu hỏi đã bị đóng có lẽ vì nó không chỉ định HĐH nào. (Nếu nó đã chỉ định một HĐH, nó sẽ bị đóng vì quá cụ thể.) Câu trả lời của bạn rất hữu ích và nhiều thông tin - chỉ cần bỏ qua những người không tán thành và hạ cấp cho đến khi họ thành công trong việc tiêu diệt SO. Kẻ ghét sẽ ghét, và tất cả những thứ đó.
Samoody

@Samoody sẽ có một chút điểm cho những gì bạn đang nói, nếu câu trả lời này thực sự chính xác. (Điều này không hoàn toàn không chính xác, vì thư mục thể có trong Windows, nhưng chắc chắn nó không phải là nhất định). Cho dù đó là trường hợp hay không có thể dễ dàng tìm ra bằng cách làm theo câu trả lời đã được đưa ra.
Jon Hanna

@senthilkumari Tôi có postgresql 11 và windows 10. Như bạn đã đề cập, tôi đã cố gắng xem pg_database trong thư mục toàn cầu nhưng tôi không thể thấy bất kỳ. Tôi có thể thấy là bó _vms, _fsm, config_exec_params, pg_control, pg_filenode.map, pg_i INTERNal.init. Đối với windows 10, tập tin nào tôi nên tìm kiếm. Có khác không
Nachiket

29

Mở pgAdmin và đi đến Thuộc tính cho cơ sở dữ liệu cụ thể. Tìm OID và sau đó mở thư mục

<POSTGRESQL_DIRECTORY>/data/base/<OID>

Cần có các tệp DB của bạn.


14
SELECT oid from pg_database where datname = '<dbname>'
Charlie


27

Theo cài đặt Linux của tôi, nó ở đây: /var/lib/postgresql/8.x/

Bạn có thể thay đổi nó với initdb -D "c:/mydb/"


12
Phụ thuộc vào phân phối - cho Fedora 20, nó nằm dưới /var/lib/pgsql/data. Tốt hơn để tìm hiểu bằng cách sử dụng ps auxw|grep postgres|grep -- -D.
Skippy le Grand Gourou

17

Vị trí của các bảng / chỉ mục cụ thể có thể được điều chỉnh bằng TABLESPACEs:

CREATE TABLESPACE dbspace LOCATION '/data/dbs';
CREATE TABLE something (......) TABLESPACE dbspace;
CREATE TABLE otherthing (......) TABLESPACE dbspace;

15

Mọi người đã trả lời nhưng chỉ để cập nhật mới nhất. Nếu bạn muốn biết tất cả các tệp cấu hình nằm ở đâu thì hãy chạy lệnh này trong trình bao

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';

14

Tôi cá là bạn đang hỏi câu hỏi này vì bạn đã thử pg_ctl startvà nhận được lỗi sau:

pg_ctl: không có thư mục cơ sở dữ liệu được chỉ định và biến môi trường PGDATA không được đặt

Nói cách khác, bạn đang tìm thư mục để đặt sau lệnh -Dcủa bạn pg_ctl start.

Trong trường hợp này, thư mục bạn đang tìm có chứa các tệp này.

PG_VERSION      pg_dynshmem     pg_multixact
pg_snapshots    pg_tblspc       postgresql.conf
base            pg_hba.conf     pg_notify   
pg_stat         pg_twophase     postmaster.opts
global          pg_ident.conf   pg_replslot
pg_stat_tmp     pg_xlog         postmaster.pid
pg_clog         pg_logical      pg_serial
pg_subtrans     postgresql.auto.conf    server.log

Bạn có thể xác định vị trí của nó bằng cách định vị bất kỳ tệp và thư mục nào ở trên bằng cách sử dụng tìm kiếm được cung cấp với HĐH của bạn.

Ví dụ: trong trường hợp của tôi ( cài đặt HomeBrew trên Mac OS X ), các tệp này được đặt trong /usr/local/var/postgres. Để khởi động máy chủ, tôi gõ:

pg_ctl -D /usr/local/var/postgres -w start

... Và nó hoạt động.


1
Nếu bạn sử dụng homebrew, một cách dễ dàng hơn để xác định dữ liệu này chỉ đơn giản làbrew info postgres
Ben

Bạn nói đúng về lý do tôi tìm thư mục cơ sở dữ liệu. Nhưng điều tôi không thể tìm thấy bất kỳ tập tin nào ở trênlocate <filename>
aswin prabhakar

Tìm thấy chúng ... Phải sử dụngsudo locate <filename>
aswin prabhakar

14

Postgres lưu trữ dữ liệu trong các tệp trong thư mục dữ liệu của nó. Thực hiện theo các bước dưới đây để đi đến cơ sở dữ liệu và các tệp của nó:

Cơ sở dữ liệu tương ứng với tệp bảng postgresql là một thư mục. Vị trí của toàn bộ thư mục dữ liệu có thể được lấy bằng cách chạy SHOW data_directory. trong UNIX như HĐH (ví dụ: Mac) /Library/PostgreSQL/9.4/data Đi vào bên trong thư mục cơ sở trong thư mục dữ liệu có tất cả các thư mục cơ sở dữ liệu:/Library/PostgreSQL/9.4/data/base

Tìm tên thư mục cơ sở dữ liệu bằng cách chạy (Cung cấp một số nguyên. Đây là tên thư mục cơ sở dữ liệu):

SELECT oid from pg_database WHERE datname = <database_name>;

Tìm tên tệp bảng bằng cách chạy (Cung cấp một số nguyên. Đây là tên tệp):

SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

Đây là một tập tin nhị phân. Chi tiết tập tin như kích thước và thời gian ngày tạo có thể được lấy như bình thường. Để biết thêm thông tin đọc chủ đề SO này


11

Trên máy Mac: /Library/PostgreSQL/9.0/data/base

Không thể nhập thư mục, nhưng bạn có thể xem nội dung qua: sudo du -hc data


13
Nếu bạn đã cài đặt qua homebrew (và tại sao bạn lại không?), Đó sẽ là /usr/local/var/postgresnơi bạn có thể khám phá bằng show data_directory;mẹo của @ MikeSherrill
Chris Beck

/Library/PostgreSQL/9.0/data/basecó vẻ như một vị trí giống Mac hơn /usr/local/var/postgres. Bạn không thể duyệt đến cái sau trong Finder mà không bật các tính năng Finder ẩn.
Charlie

@Charlie Bạn có thể duyệt bằng Finder từ menu Go. Truy cập> Chuyển đến Thư mục ... hoặc ⇧⌘G
Jason S

@JasonS Có, bạn có thể sử dụng thủ thuật đó để mở thư mục không giống mac trong Finder.
Charlie

1
Trong trường hợp của tôi, đó là: / Users / bob / Library / Application Support / Postgres / var-9.5
Bwyss 18/03/2016

7

Trên Windows, thư mục PGDATA mà tài liệu PostgresSQL mô tả nằm ở đâu đó như thế nào C:\Program Files\PostgreSQL\8.1\data. Dữ liệu cho một cơ sở dữ liệu cụ thể nằm dưới (ví dụ) C:\Program Files\PostgreSQL\8.1\data\base\100929, trong đó tôi đoán 100929 là số cơ sở dữ liệu.


1
Chú ý: Nếu bạn muốn thực hiện sao lưu mức hệ thống tệp, đừng sao lưu các thư mục này, bởi vì, như tài liệu mô tả: "... bạn có thể cố gắng sao lưu hoặc khôi phục chỉ một số bảng hoặc cơ sở dữ liệu nhất định từ chúng tệp hoặc thư mục. Điều này sẽ không hoạt động vì thông tin chứa trong các tệp này không thể sử dụng được nếu không có tệp nhật ký cam kết, pg_clog / *, chứa trạng thái cam kết của tất cả các giao dịch. "
Janis Veinbergs

Điều này phụ thuộc. Bạn có thể đã cấu hình nó vào một thư mục khác khi cài đặt.
ANeves

đối với tôi, không có thư mục dữ liệu nào trong C: \ Program Files \ PostgreSQL \ 9.4 \ đây có phải là một cái gì đó cụ thể cho 9,4 hoặc đã làm gì đó sai?
LucyViolet

2

Câu trả lời của picmate là đúng. trên cửa sổ vị trí thư mục DB chính là (ít nhất là trên cài đặt của tôi)

C:\PostgreSQL\9.2\data\base\

và không có trong các tập tin chương trình.

2 tập lệnh của anh ấy, sẽ cung cấp cho bạn thư mục / tập tin chính xác mà bạn cần:

SELECT oid from pg_database WHERE datname = <database_name>;
SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

Của tôi là trong datname 16393 và relfilenode 41603

tập tin cơ sở dữ liệu trong postgresql


0

Tôi đang chạy postgres (9.5) trong thùng chứa docker (trên CentOS, như nó xảy ra), và như Skippy le Grand Gourou đề cập trong một nhận xét ở trên, các tệp được đặt trong /var/lib/postgresql/data/.

$ docker exec -it my-postgres-db-container bash
root@c7d61efe2a5d:/# cd /var/lib/postgresql/data/
root@c7d61efe2a5d:/var/lib/postgresql/data# ls -lh
total 56K
drwx------. 7 postgres postgres   71 Apr  5  2018 base
drwx------. 2 postgres postgres 4.0K Nov  2 02:42 global
drwx------. 2 postgres postgres   18 Dec 27  2017 pg_clog
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_commit_ts
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_dynshmem
-rw-------. 1 postgres postgres 4.4K Dec 27  2017 pg_hba.conf
-rw-------. 1 postgres postgres 1.6K Dec 27  2017 pg_ident.conf
drwx------. 4 postgres postgres   39 Dec 27  2017 pg_logical
drwx------. 4 postgres postgres   36 Dec 27  2017 pg_multixact
drwx------. 2 postgres postgres   18 Nov  2 02:42 pg_notify
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_replslot
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_serial
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_snapshots
drwx------. 2 postgres postgres    6 Sep 16 21:15 pg_stat
drwx------. 2 postgres postgres   63 Nov  8 02:41 pg_stat_tmp
drwx------. 2 postgres postgres   18 Oct 24  2018 pg_subtrans
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_tblspc
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_twophase
-rw-------. 1 postgres postgres    4 Dec 27  2017 PG_VERSION
drwx------. 3 postgres postgres   92 Dec 20  2018 pg_xlog
-rw-------. 1 postgres postgres   88 Dec 27  2017 postgresql.auto.conf
-rw-------. 1 postgres postgres  21K Dec 27  2017 postgresql.conf
-rw-------. 1 postgres postgres   37 Nov  2 02:42 postmaster.opts
-rw-------. 1 postgres postgres   85 Nov  2 02:42 postmaster.pid
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.