ฉันจะค้นหาไดเรกทอรีข้อมูลของ PostgreSQL ได้อย่างไร


123

ฉันลืมวิธีที่ฉันเริ่ม PostgreSQL ครั้งล่าสุด (เป็นเดือนที่ผ่านมา) และฉันจำไม่ได้ว่าไดเรกทอรีข้อมูลตั้งอยู่ที่ใด postgresคำสั่งดูเหมือนว่าจะต้องสถานที่ตั้งของไดเรกทอรีข้อมูล

ฉันใช้ MacOsX ถ้าช่วยได้

/usr/local/postgres ไม่มีอยู่ใน Mac ของฉัน

จากการใช้คำตอบที่ให้ไว้ด้านล่างฉันพบว่ามันอยู่ที่นี่:

/usr/local/var/postgres

เมื่อคุณใช้ในการติดตั้ง Homebrew Postgres แล้วdataเป็น/usr/local/var/postgres
andrerpena

คำตอบ:


152

หากคุณสามารถเชื่อมต่อกับฐานข้อมูลด้วยการเข้าถึง superuser แล้ว

SHOW data_directory;

เป็นวิธีที่สั้นที่สุด

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


7
หากไม่ได้ทำงานอยู่ให้ลองรัน find สำหรับ postgresql.conf ซึ่งโดยปกติจะอยู่ในไดเรกทอรีข้อมูลหรือจะมีข้อมูลเกี่ยวกับไดเรกทอรีข้อมูล
xzilla


18

pg_config แสดงข้อมูลจำนวนมากรวมถึงไดเรกทอรีข้อมูล:

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'

นี่อาจเป็นสิ่งที่เฉพาะเจาะจงสำหรับการชง ฉันไม่รู้ว่ามันแสดงอะไร


1
ฉันใช้ชงด้วย ณ ตอนนี้ข้อมูลที่ระบุไว้ในpg_config --configureนั้นไม่เหมือนกับที่brew info postgresqlแนะนำ (ซึ่งเป็น$(brew --prefix)/var/postgresและไม่ใช่ symlink ไปยังที่อยู่ในรายการ) ดูเหมือนว่าสูตรจะค่อนข้างหละหลวมในการใช้การตั้งค่าสถานะอย่างถูกต้อง
Vaz

หมายเหตุสำหรับ Ubuntu / Debain: pg_config ไม่ได้ติดตั้งด้วยpostgresql-<ver>แพ็คเกจ apt แต่ต้องใช้ด้วยpostgresql-server-dev-<ver>
pscl

@PSCL True แต่ OP อยู่ภายใต้ OS X.
Dave Newton

เข้าใจ เพียงบันทึกสำหรับการอ้างอิงในอนาคตของผู้ใช้ Debian (เช่นตัวเอง) สะดุดกับคำถามนี้ตามชื่อสามัญ
pscl

1
@Tom ฉันไม่คิดว่าสูตรตั้งใจจริง ๆ ที่จะใช้ datadir ผ่านการกำหนดค่า ... คาดว่าจะถูกส่งผ่าน datadir เป็น commandline ARG คุณสามารถดูสิ่งที่ได้รับผ่านเมื่อทำงานโดยอัตโนมัติเป็นบริการใน$(brew --prefix postgresql)/homebrew.mxcl.postgresql.plistดู สำหรับเส้นทางที่ตามมา-D( /usr/local/var/postgresอยู่ที่ฉัน)
Vaz

16

บน Ubuntu \ Debian ให้ลองpg_lsclustersคำสั่ง

บนเครื่องของฉัน:

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

หากคุณไม่สามารถเข้าสู่ระบบ (เช่นลืมรหัสผ่านของคุณ) แต่บริการกำลังทำงานเนื่องจาก MacOS X เป็น posix varient คุณสามารถตรวจสอบpsเพื่อดูว่ามันถูกส่งเป็นอาร์กิวเมนต์:

บนกล่อง linux ที่มีสองอินสแตนซ์ postgres ทำงานอยู่:

-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

เปิด postgresql.conf ไปที่บรรทัด:

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

คือคำตอบของคุณ


คุณจะหาpostgresql.conf
ที่ไหน

@ user5359531 คุณสามารถfind / -iname "postgresql.conf" 2>/dev/nullหาคำตอบได้
Tom

ของฉันpostgresql.confไม่ได้data_directoryกำหนดไว้ มันมีการอ้างอิงในความคิดเห็นเท่านั้น:#data_directory = 'ConfigDir' # use data in another directory
SimpleJ

2

เดสก์ท็อปไคลเอนต์ PostgreSQL รุ่นทันสมัยสำหรับ OSX มีกล่องโต้ตอบ "การตั้งค่าเซิร์ฟเวอร์" ที่สะดวกที่จะช่วยให้คุณไม่เพียงแค่แสดงรายการไดเรกทอรีข้อมูล แต่เปิดโดยตรง

มีประโยชน์มากถ้าคุณพบว่าเครื่องขัดข้องแบบสุ่มซึ่งทิ้งไฟล์ล็อคไว้

ป้อนคำอธิบายรูปภาพที่นี่


กล่องโต้ตอบนี้อยู่ที่ไหน ฉันลาดเทพบอะไรเช่นนี้ในการติดตั้งโดยตรง (ไม่ชง) 9.5 ผ่านpostgresql.org/download/macosx มันมาพร้อมกับ pgadmin III แต่ดูเหมือนว่าจะไม่มีกล่องโต้ตอบนี้ ฉันไม่พบลูกค้าเดสก์ทอปใด ๆ
John Little

1

ใน OS X 10.8 และ 10.9 (ไม่ใช่ 10.10) เมื่อติดตั้งแอปเซิร์ฟเวอร์ในหน้าต่างเทอร์มินัลให้พิมพ์

sudo serveradmin settings postgres

บน OS X 10.9 Mavericks นี่คือผลลัพธ์ที่ฉันได้รับจากสิ่งนั้นซึ่งรวมถึงไดเรกทอรีข้อมูล

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"

ฉันเพิ่งลองสิ่งนี้ใน Yosemite (OS X 10.10) และ postgres ไม่ได้อยู่ในรายการเป็นบริการภายใต้ serveradmin (แม้ว่าจะติดตั้ง postgres แล้ว)

sudo serveradmin list

ไม่แสดงรายการ postgres


1

บน Windows Server 2012 คำสั่งpg_configไม่เปิดเผยไดเรกทอรีข้อมูลด้วยเหตุผลบางอย่างที่บ้าคลั่ง แต่ฉันพบโดยดูที่ไฟล์C:\Program Files\PostgreSQL\9.4\pg_env.batซึ่งมีบรรทัดนี้:

@SET PGDATA=E:\POSTGRESQL

นั่นคือคำตอบที่ฉันต้องการ


0

วิธีการใช้ยูทิลิตีมาตรฐาน pg_config เช่นpg_config --bindirOne อาจได้รับพารามิเตอร์การกำหนดค่าที่ใช้ในการคอมไพล์ PostgreSQL และแยกวิเคราะห์ด้วยpg_config --configure


--bindirแสดงที่ตั้งของไฟล์เรียกทำงานไม่ใช่ไดเร็กทอรีข้อมูล --configureก็โอเคแม้ว่าจะมีการแยกเอาท์พุทเล็กน้อย
dezso

ใช่ว่าเป็นจริงและน่าเสียดายที่ pg_config ไม่มีพารามิเตอร์ที่จะเปิดเผยข้อมูล เมื่อฉันเขียนสิ่งนี้ฉันคิดว่าอย่างน้อยมันก็ให้อะไรบางอย่างที่ใกล้เคียงโดยสมมติว่าดาต้าดีร์ไม่ได้อยู่ในตำแหน่งพิเศษ datadir จะสัมพันธ์กับ bindir เช่น ../data
Jacques

0

ตามที่ระบุไว้เราสามารถใช้psเพื่อจับตำแหน่งข้อมูลเช่น:

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

นี้จะทำงานได้ตลอดเวลา มันจะส่งคืนสิ่งที่ชอบ/usr/local/pgsql/dataหรือที่ใดก็ตามที่ระบุไว้ในพารามิเตอร์ของ PostgreSQL เมื่อเปิดตัว


0

จากคำตอบของ @Matthew Mark Miller บน macOS 10.14 โดยใช้ Postgres 11 ตั้งอยู่ที่:

~/Library/Application Support/Postgres

0

การสรุปจาก 2 คำตอบยอดนิยม:

หากต้องการแสดงไดเรกทอรีข้อมูลโดยตรงที่บรรทัดคำสั่ง:

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

หากต้องการดูเส้นทางและไฟล์ที่กำหนดอื่น ๆ ทั้งหมด:

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

ตัวอย่างผลลัพธ์:

          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)

(บน Windows ให้แทนที่LIKE '/%'ด้วยLIKE '%/%'เพราะเส้นทางเริ่มต้นด้วยตัวอักษรชื่อไดรฟ์)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.