Di mana PostgreSQL menyimpan database?

Jawaban:

355

Untuk melihat di mana direktori data, gunakan kueri ini.

show data_directory;

Untuk melihat semua parameter run-time, gunakan

show all;

Anda bisa membuat tablespace untuk menyimpan objek database di bagian lain dari sistem file. Untuk melihat tablespace, yang mungkin tidak ada di direktori data itu, gunakan kueri ini.

SELECT * FROM pg_tablespace;
Mike Sherrill 'Cat Recall'
sumber
1
tampilkan data_direktori; poin perintah ke lokasi data yang tepat. Mencari folder tertentu itu menyakitkan karena orang lain mungkin telah menginstalnya untuk Anda dan sekarang Anda tidak tahu konfigurasinya, jadi sql berikut membantu menghemat waktu. :) Terima kasih Mike.
Vishal
3
Ia mengatakan "harus superuser untuk memeriksa direktori data" :(
temporary_user_name
5
Jika Anda bukan DBA, Anda sebenarnya tidak perlu tahu.
Mike Sherrill 'Cat Recall'
8
BTW - jika ada yang mencari lokasi database untuk Postgres.app di mac seperti saya, ada di ~ / Library / Aplikasi Dukungan / Postgres [ver] / var secara default.
sstringer
1
Untuk menjalankan kueri, gunakan PGAdmin III dan gunakan ikon "jalankan kueri" di bilah menu.
Rutger Hofste
61

Pada Windows7, semua basis data dirujuk dengan nomor dalam file yang dinamai di pg_databasebawah C:\Program Files (x86)\PostgreSQL\8.2\data\global. Maka Anda harus mencari nama folder dengan nomor di bawah C:\Program Files (x86)\PostgreSQL\8.2\data\base. Itu adalah isi dari basis data.

senthilkumari
sumber
3
Jangan menjawab dengan cara yang spesifik OS kecuali pertanyaan secara eksplisit menyatakan OS.
simonmenke
24
Kenapa tidak? Jika Anda tidak menyebutkan OS dan hanya mengatakan "ini berhasil", siapa pun yang mencoba pada OS yang berbeda akan bingung. Itu relevan. EDIT: Oh, Anda mungkin berarti "tidak memberikan jawaban khusus OS sama sekali." Saya kira itu masuk akal, saya tidak tahu.
David Winiecki
34
@ David, Pertanyaan ditutup mungkin karena tidak menentukan OS mana. (Jika sudah menentukan OS, itu akan ditutup karena terlalu spesifik.) Jawaban Anda sangat membantu dan informatif - abaikan saja penentang dan downvoters sampai mereka berhasil akhirnya menghancurkan SO. Pembenci akan membenci, dan semua itu.
SamGoody
@ SamGoody akan ada sedikit poin untuk apa yang Anda katakan, jika jawaban ini benar. (Ini tidak sepenuhnya salah, karena folder itu mungkin ada di Windows, tetapi tentu saja tidak diberikan). Entah itu masalahnya atau tidak dapat dengan mudah ditemukan dengan mengikuti jawaban yang sudah diberikan.
Jon Hanna
@senthilkumari Saya punya postgresql 11 dan windows 10. Seperti yang Anda sebutkan, saya mencoba melihat pg_database di dalam folder global tetapi saya tidak bisa melihatnya. Saya bisa melihat sekelompok _vms, _fsm, config_exec_params, pg_control, pg_filenode.map, pg_internal.init. Untuk windows 10 file mana yang namanya harus saya cari. Apakah ini berbeda?
Nachiket
29

Buka pgAdmin dan pergi ke Properties untuk database tertentu. Temukan OID dan kemudian buka direktori

<POSTGRESQL_DIRECTORY>/data/base/<OID>

Seharusnya ada file DB Anda.

Almir Sarajčić
sumber
14
SELECT oid from pg_database where datname = '<dbname>'
Charlie
28

Seperti yang disarankan dalam " lokasi default database PostgreSQL di Linux ", di Linux Anda dapat mengetahuinya menggunakan perintah berikut:

ps aux | grep postgres | grep -- -D
Skippy le Grand Gourou
sumber
27

Di bawah instalasi Linux saya, ada di sini: /var/lib/postgresql/8.x/

Anda dapat mengubahnya dengan initdb -D "c:/mydb/"

Sadegh
sumber
12
Tergantung pada distribusi - untuk Fedora 20 di bawah /var/lib/pgsql/data. Lebih baik mencari tahu menggunakan ps auxw|grep postgres|grep -- -D.
Skippy le Grand Gourou
17

Lokasi tabel / indeks tertentu dapat disesuaikan dengan TABLESPACEs:

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

Semua orang sudah menjawab tetapi hanya untuk pembaruan terbaru. Jika Anda ingin tahu di mana semua file konfigurasi berada maka jalankan perintah ini di shell

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';
Saad Saadi
sumber
14

Saya yakin Anda mengajukan pertanyaan ini karena Anda sudah mencoba pg_ctl startdan menerima kesalahan berikut:

pg_ctl: tidak ada direktori database yang ditentukan dan variabel lingkungan PGDATA tidak disetel

Dengan kata lain, Anda sedang mencari direktori untuk dimasukkan -Ddalam pg_ctl startperintah Anda .

Dalam hal ini, direktori yang Anda cari berisi file-file ini.

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

Anda dapat menemukannya dengan mencari file dan direktori di atas menggunakan pencarian yang disediakan dengan OS Anda.

Sebagai contoh dalam kasus saya ( instalasi HomeBrew pada Mac OS X ), file-file ini terletak di /usr/local/var/postgres. Untuk memulai server saya ketik:

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

... dan berhasil.

xagg
sumber
1
Jika Anda menggunakan homebrew, cara yang lebih mudah untuk menemukan data ini cukupbrew info postgres
Ben
Anda benar tentang alasan saya mencari folder basis data. Tapi masalahnya saya tidak dapat menemukan file-file di atas denganlocate <filename>
aswin prabhakar
Menemukan mereka ... Harus menggunakansudo locate <filename>
aswin prabhakar
14

Postgres menyimpan data dalam file dalam direktori datanya. Ikuti langkah-langkah di bawah ini untuk menuju ke database dan file-file-nya:

Basis data yang terkait dengan file tabel postgresql adalah direktori. Lokasi seluruh direktori data dapat diperoleh dengan menjalankan SHOW data_directory. dalam UNIX like OS (eg: Mac) /Library/PostgreSQL/9.4/data Masuk ke dalam folder dasar di direktori data yang memiliki semua folder basis data:/Library/PostgreSQL/9.4/data/base

Temukan nama folder basis data dengan menjalankan (Memberikan bilangan bulat. Ini adalah nama folder basis data):

SELECT oid from pg_database WHERE datname = <database_name>;

Temukan nama file tabel dengan menjalankan (Memberikan bilangan bulat. Ini adalah nama file):

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

Ini adalah file biner. Detail file seperti ukuran dan waktu tanggal pembuatan dapat diperoleh seperti biasa. Untuk info lebih lanjut baca utas SO ini

teman satu 涅
sumber
11

Di Mac: /Library/PostgreSQL/9.0/data/base

Direktori tidak dapat dimasukkan, tetapi Anda dapat melihat konten melalui: sudo du -hc data

evgeni
sumber
13
Jika Anda menginstal melalui homebrew (dan mengapa tidak?), Itu adalah di /usr/local/var/postgresmana Anda dapat menemukan menggunakan show data_directory;tip @ MikeSherrill
Chris Beck
/Library/PostgreSQL/9.0/data/basesepertinya lebih mirip lokasi Mac daripada /usr/local/var/postgres. Anda tidak dapat menjelajah ke yang terakhir di Finder tanpa mengaktifkan fitur Finder yang tersembunyi.
Charlie
@Charlie Anda dapat menelusuri menggunakan Finder dari menu Go. Go> Go to Folder ..., atau --G
Jason S
@JasonS Ya, Anda bisa menggunakan trik itu untuk membuka folder yang tidak seperti mac di Finder.
Charlie
1
Dalam kasus saya ini ada di: / Pengguna / bob / Perpustakaan / Dukungan Aplikasi / Postgres / var-9.5
Bwyss
7

Pada Windows, direktori PGDATA yang dijelaskan oleh PostgresSQL di suatu tempat adalah seperti C:\Program Files\PostgreSQL\8.1\data. Data untuk database tertentu berada di bawah (misalnya) C:\Program Files\PostgreSQL\8.1\data\base\100929, di mana saya kira 100.929 adalah nomor basis data.

Ben Hoyt
sumber
1
Hati-hati: Jika Anda ingin melakukan backup level sistem file, jangan hanya membuat cadangan direktori ini, karena, seperti yang dijelaskan oleh docs : "... Anda mungkin tergoda untuk mencoba membuat cadangan atau mengembalikan hanya tabel atau basis data individual tertentu dari masing-masing direktori. file atau direktori. Ini tidak akan berfungsi karena informasi yang terkandung dalam file-file ini tidak dapat digunakan tanpa file log komit, pg_clog / *, yang berisi status komit dari semua transaksi. "
Janis Veinbergs
Ini tergantung. Anda dapat mengonfigurasinya ke folder lain saat diinstal.
ANeves
pada saya, tidak ada folder data di dalam C: \ Program Files \ PostgreSQL \ 9.4 \ apakah ini sesuatu yang spesifik untuk 9.4 atau telah melakukan sesuatu yang salah?
LucyViolet
2

jawaban picmate benar. pada windows lokasi folder DB utama adalah (setidaknya pada instalasi saya)

C:\PostgreSQL\9.2\data\base\

dan tidak dalam file program.

2 skripnya, akan memberi Anda direktori / file yang tepat yang Anda butuhkan:

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

milikku ada di datname 16393 dan relfilenode 41603

file basis data di postgresql

k3nn
sumber
0

Saya menjalankan postgres (9,5) dalam wadah buruh pelabuhan (pada CentOS, seperti yang terjadi), dan ketika Skippy le Grand Gourou menyebutkan dalam komentar di atas, file-file tersebut berada di /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
rotarydial
sumber