PostgreSQL จัดเก็บฐานข้อมูลอยู่ที่ไหน


คำตอบ:


355

หากต้องการดูว่าไดเรกทอรีข้อมูลอยู่ที่ใดให้ใช้แบบสอบถามนี้

show data_directory;

หากต้องการดูพารามิเตอร์รันไทม์ทั้งหมดให้ใช้

show all;

คุณสามารถสร้างพื้นที่ตารางเพื่อจัดเก็บวัตถุฐานข้อมูลในส่วนอื่น ๆ ของระบบไฟล์ หากต้องการดูพื้นที่ตารางซึ่งอาจไม่อยู่ในไดเรกทอรีข้อมูลให้ใช้แบบสอบถามนี้

SELECT * FROM pg_tablespace;

1
แสดง data_directory; คำสั่งชี้ไปยังตำแหน่งที่แน่นอนของข้อมูล การค้นหาโฟลเดอร์ที่เฉพาะเจาะจงนั้นเป็นเรื่องที่เจ็บปวดเพราะมีคนอื่นติดตั้งให้คุณและตอนนี้คุณไม่รู้จักการกำหนดค่าดังนั้นการติดตาม sql ช่วยประหยัดเวลา :) ขอบคุณไมค์
Vishal

3
มีข้อความแจ้งว่า "ต้องเป็น superuser เพื่อตรวจสอบไดเรกทอรีข้อมูล" :(
temporary_user_name

5
หากคุณไม่ใช่ DBA คุณไม่จำเป็นต้องรู้จริงๆ
Mike Sherrill 'Cat Recall'

8
BTW - หากมีใครกำลังมองหาที่ตั้งฐานข้อมูลสำหรับ Postgres.app บน mac อย่างที่เป็นอยู่มันอยู่ใน ~ / Library / Application Support / Postgres [ver] / var โดยค่าเริ่มต้น
sstringer

1
หากต้องการเรียกใช้แบบสอบถามใช้ PGAdmin III และใช้ไอคอน "เรียกใช้แบบสอบถาม" ในแถบเมนู
Rutger Hofste

61

บน Windows7 ฐานข้อมูลทั้งหมดจะถูกเรียกโดยตัวเลขในไฟล์ชื่อภายใต้pg_database จากนั้นคุณควรค้นหาชื่อโฟลเดอร์โดยตัวเลขที่อยู่ภายใต้C:\Program Files (x86)\PostgreSQL\8.2\data\global C:\Program Files (x86)\PostgreSQL\8.2\data\baseนั่นคือเนื้อหาของฐานข้อมูล


3
อย่าตอบด้วยวิธีการเฉพาะระบบปฏิบัติการเว้นแต่คำถามจะระบุระบบปฏิบัติการอย่างชัดเจน
simonmenke

24
ทำไมจะไม่ล่ะ? หากคุณไม่ได้พูดถึงระบบปฏิบัติการและเพียงแค่พูดว่า "ใช้งานได้" ทุกคนที่พยายามทำเช่นนั้นกับระบบปฏิบัติการอื่นจะสับสน มันเกี่ยวข้องกัน แก้ไข: โอ้คุณอาจหมายถึง "อย่าให้คำตอบเฉพาะกับระบบปฏิบัติการเลย" ฉันคิดว่ามันสมเหตุสมผลนะฉันไม่รู้
David Winiecki

34
@ David, คำถามถูกปิดอย่างน่าจะเป็นเพราะไม่ได้ระบุระบบปฏิบัติการใด (หากมีการระบุระบบปฏิบัติการมันจะถูกปิดเพราะเฉพาะเจาะจงมากเกินไป) คำตอบของคุณมีประโยชน์และให้ข้อมูล - เพียงแค่ละเว้นผู้ปฏิบัติงานและผู้ลงคะแนนจนกว่าพวกเขาจะประสบความสำเร็จในการทำลาย SO ความเกลียดชังจะเกลียดและทั้งหมดนั้น
SamGoody

@ SamGoody มีจุดที่คุณกำลังพูดอยู่เล็กน้อยถ้าคำตอบนี้ถูกต้องจริง (มันไม่ถูกต้องอย่างเด็ดขาดเนื่องจากโฟลเดอร์อาจมีอยู่ใน Windows แต่ไม่ได้ระบุอย่างแน่นอน) ไม่ว่าจะเป็นกรณีหรือไม่สามารถหาได้ง่ายโดยทำตามคำตอบที่ได้รับแล้ว
Jon Hanna

@senthilkumari ฉันมี postgresql 11 และ windows 10 ดังที่คุณพูดไปแล้วฉันพยายามดู pg_database ในโฟลเดอร์ส่วนกลาง แต่ฉันไม่เห็นเลย ฉันเห็นว่าเป็นกลุ่มของ _vms, _fsm, config_exec_params, pg_control, pg_filenode.map, pg_internal.init สำหรับ windows 10 ฉันควรค้นหาไฟล์ชื่ออะไร มันแตกต่างกันอย่างไร
Nachiket

29

เปิด pgAdmin และไปที่คุณสมบัติสำหรับฐานข้อมูลเฉพาะ ค้นหา OID จากนั้นเปิดไดเรกทอรี

<POSTGRESQL_DIRECTORY>/data/base/<OID>

ควรมีไฟล์ DB ของคุณ


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


27

ภายใต้การติดตั้ง Linux ของฉันอยู่ที่นี่: /var/lib/postgresql/8.x/

คุณสามารถเปลี่ยนได้ด้วย initdb -D "c:/mydb/"


12
ขึ้นอยู่กับการกระจาย - สำหรับ Fedora 20 /var/lib/pgsql/dataมันภายใต้ ps auxw|grep postgres|grep -- -Dดีกว่าที่จะหาออกมาใช้
Skippy le Grand Gourou

17

ตำแหน่งของตาราง / ดัชนีที่เฉพาะเจาะจงสามารถปรับเปลี่ยนได้โดย TABLESPACEs:

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

15

ทุกคนตอบแล้ว แต่สำหรับการอัพเดทล่าสุด หากคุณต้องการทราบว่าไฟล์การตั้งค่าทั้งหมดอยู่ที่ไหนให้เรียกใช้คำสั่งนี้ในเปลือก

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

14

ฉันพนันว่าคุณกำลังถามคำถามนี้เพราะคุณลองpg_ctl startแล้วได้รับข้อผิดพลาดต่อไปนี้:

pg_ctl: ไม่ได้ระบุไดเรกทอรีฐานข้อมูลและตัวแปรสภาพแวดล้อม PGDATA ไม่ได้ตั้งค่า

คุณกำลังมองหาไดเรกทอรีที่จะใส่-Dเข้าไปpg_ctl startคำสั่ง

ในกรณีนี้ไดเรกทอรีที่คุณค้นหามีไฟล์เหล่านี้

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

คุณสามารถค้นหาได้โดยค้นหาไฟล์และไดเรกทอรีด้านบนโดยใช้การค้นหาที่มาพร้อมกับระบบปฏิบัติการของคุณ

ยกตัวอย่างเช่นในกรณีของฉัน (กHomebrewติดตั้งบนMac OS X ), /usr/local/var/postgresไฟล์เหล่านี้จะอยู่ใน ในการเริ่มต้นเซิร์ฟเวอร์ฉันพิมพ์:

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

... และมันใช้งานได้


1
หากคุณใช้ homebrew วิธีที่ง่ายกว่าในการค้นหาข้อมูลนี้ก็คือbrew info postgres
Ben

คุณพูดถูกเกี่ยวกับเหตุผลที่ฉันมองหาโฟลเดอร์ฐานข้อมูล แต่สิ่งที่ฉันไม่สามารถหาไฟล์ใด ๆ ข้างต้นด้วยlocate <filename>
aswin prabhakar

พบพวกเขา ... ต้องใช้sudo locate <filename>
aswin prabhakar

14

Postgres จัดเก็บข้อมูลในไฟล์ในไดเรกทอรีข้อมูล ทำตามขั้นตอนด้านล่างเพื่อไปที่ฐานข้อมูลและไฟล์:

ฐานข้อมูลที่สอดคล้องกับไฟล์ตาราง postgresql เป็นไดเรกทอรี SHOW data_directoryสถานที่ตั้งของไดเรกทอรีข้อมูลทั้งหมดจะได้รับจากการทำงาน ใน UNIX เช่น OS (เช่น: Mac) /Library/PostgreSQL/9.4/data เข้าไปในโฟลเดอร์ฐานในไดเรกทอรีข้อมูลที่มีโฟลเดอร์ฐานข้อมูลทั้งหมด:/Library/PostgreSQL/9.4/data/base

ค้นหาชื่อโฟลเดอร์ฐานข้อมูลโดยเรียกใช้ (ให้จำนวนเต็มนี่คือชื่อโฟลเดอร์ฐานข้อมูล):

SELECT oid from pg_database WHERE datname = <database_name>;

ค้นหาชื่อไฟล์ตารางโดยเรียกใช้ (ให้จำนวนเต็มนี่คือชื่อไฟล์):

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

นี่คือไฟล์ไบนารี รายละเอียดไฟล์เช่นขนาดและวันที่สร้างสามารถรับได้ตามปกติ สำหรับข้อมูลเพิ่มเติมอ่านหัวข้อนี้


11

บน Mac: /Library/PostgreSQL/9.0/data/base

ไม่สามารถป้อนไดเรกทอรี แต่คุณสามารถดูเนื้อหาผ่าน: sudo du -hc data


13
หากคุณติดตั้งผ่าน homebrew (และทำไมจะไม่เป็นเช่นนั้น) /usr/local/var/postgresคุณจะสามารถค้นพบได้โดยใช้show data_directory;ทิปของ @ MikeSherrill
Chris Beck

/Library/PostgreSQL/9.0/data/baseดูเหมือนว่าสถานที่อื่น ๆ Mac /usr/local/var/postgresเหมือนกว่า คุณไม่สามารถเรียกดูส่วนหลังใน Finder โดยไม่ได้เปิดใช้งานคุณสมบัติ Finder ที่ซ่อนอยู่
Charlie

@Charlie คุณสามารถเรียกดูโดยใช้ Finder จากเมนูไป ไป> ไปที่โฟลเดอร์ ... หรือ⇧⌘G
Jason S

@JasonS ใช่คุณสามารถใช้เคล็ดลับนั้นเพื่อเปิดโฟลเดอร์ที่ไม่เหมือน Mac ใน Finder
Charlie

1
ในกรณีของฉันมันอยู่ใน: / Users / bob / Library / Application Support / Postgres / var-9.5
Bwyss

7

บน Windows, ไดเรกทอรี PGDATA ที่เอกสาร PostgresSQL อธิบายC:\Program Files\PostgreSQL\8.1\dataที่บางแห่งเช่น ข้อมูลสำหรับฐานข้อมูลเฉพาะอยู่ภายใต้ (ตัวอย่าง) C:\Program Files\PostgreSQL\8.1\data\base\100929โดยที่ฉันเดาว่า 100929 คือหมายเลขฐานข้อมูล


1
ระวัง: หากคุณต้องการสำรองข้อมูลในระดับระบบไฟล์อย่าเพิ่งสำรองข้อมูลไดเรกทอรีเหล่านี้เพราะอย่างที่เอกสารอธิบาย: "... คุณอาจถูกล่อลวงให้พยายามสำรองข้อมูลหรือกู้คืนเฉพาะตารางหรือฐานข้อมูลบางอย่างเท่านั้น ไฟล์หรือไดเรกทอรีสิ่งนี้จะไม่ทำงานเนื่องจากข้อมูลที่มีอยู่ในไฟล์เหล่านี้ไม่สามารถใช้งานได้หากไม่มีไฟล์บันทึกการกระทำ pg_clog / * ซึ่งมีสถานะการส่งมอบของธุรกรรมทั้งหมด "
Janis Veinbergs

ขึ้นอยู่กับว่า คุณสามารถกำหนดค่าให้กับโฟลเดอร์อื่นในการติดตั้ง
Aneves

ในเหมืองไม่มีโฟลเดอร์ข้อมูลใน C: \ Program Files \ PostgreSQL \ 9.4 \ นี่เป็นสิ่งที่เฉพาะเจาะจงถึง 9.4 หรือทำสิ่งผิดปกติหรือไม่?
LucyViolet

2

คำตอบของ picmate นั้นถูกต้อง บน windows ที่ตั้งโฟลเดอร์ DB หลักคือ (อย่างน้อยในการติดตั้งของฉัน)

C:\PostgreSQL\9.2\data\base\

และไม่อยู่ในไฟล์โปรแกรม

2 สคริปต์ของเขาจะให้ไดเรกทอรีที่แน่นอน / ไฟล์ที่คุณต้องการ:

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

ฉันอยู่ในชื่อ 16393 และ relfilenode 41603

ไฟล์ฐานข้อมูลใน postgresql


0

ฉันทำงาน postgres (9.5) ในภาชนะนักเทียบท่า (หรือตามความ CentOS ที่มันเกิดขึ้น) และเป็นSkippy le Grand gourou/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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.