PostgreSQL veritabanını nerede saklar?


Yanıtlar:


355

Veri dizininin nerede olduğunu görmek için bu sorguyu kullanın.

show data_directory;

Tüm çalışma zamanı parametrelerini görmek için şunu kullanın:

show all;

Veritabanı nesnelerini dosya sisteminin diğer bölümlerinde depolamak için tablo alanları oluşturabilirsiniz. Bu veri dizininde bulunmayan tablo alanlarını görmek için bu sorguyu kullanın.

SELECT * FROM pg_tablespace;

1
veri_dizini göster; komutu verinin tam yerini gösterir. Başka bir klasör sizin için kurmuş olabilir ve şimdi yapılandırmayı bilmediğiniz için belirli bir klasörü aramak acı vericidir, bu nedenle sql'yi takip etmek zaman kazanmanıza yardımcı olur. :) Teşekkürler Mike.
Vishal

3
Bu :( "süper veri dizinini incelemek olmalı" diyor
temporary_user_name

5
Eğer bir DBA değilseniz, gerçekten bilmeniz gerekmez.
Mike Sherrill 'Cat Recall'

8
BTW - Herkes benim gibi bir Mac'te Postgres.app için veritabanı konumunu arıyorsa, varsayılan olarak ~ / Library / Application Support / Postgres [ver] / var'dadır.
sstringer

1
Bir sorguyu çalıştırmak için PGAdmin III'ü kullanın ve menü çubuğundaki "bir sorguyu çalıştır" simgesini kullanın.
Rutger Hofste

61

Windows7'de tüm veritabanları pg_databasealtında dosyadaki bir sayı ile belirtilir C:\Program Files (x86)\PostgreSQL\8.2\data\global. Ardından, klasör adını aşağıdaki numaraya göre aramalısınız C:\Program Files (x86)\PostgreSQL\8.2\data\base. Veritabanının içeriği budur.


3
Soru işletim sistemini açıkça belirtmedikçe işletim sistemine özgü bir şekilde yanıt vermeyin.
simonmenke

24
Neden olmasın? İşletim sisteminden bahsetmez ve sadece "bu işe yarar" derseniz, farklı bir işletim sisteminde bunu deneyen herkes karışacaktır. Alakalı. EDIT: Oh, muhtemelen "hiç bir işletim sistemine özel cevap verme" demek istiyorsun. Sanırım bu mantıklı, bilmiyorum.
David Winiecki

34
@David, Soru muhtemelen hangi işletim sistemini belirtmediği için kapatıldı. (Bir işletim sistemi belirtmiş olsaydı, çok spesifik olduğu için kapatılmış olurdu.) Cevabınız yararlı ve bilgilendirici idi - sadece SO'yu yok etmeyi başarana kadar naysayers ve downvoters'ı göz ardı edin. Nefret edenler nefret edecek ve tüm bunlar.
SamGoody

@SamGoody, eğer bu cevap gerçekten doğru olsaydı, söylediklerinize biraz bir nokta olurdu. (Klasör Windows'ta orada olabileceğinden kesinlikle yanlış değildir , ancak kesinlikle verilmez). Durumun böyle olup olmadığı, zaten verilen cevabı takip ederek kolayca bulunabilir.
Jon Hanna

@senthilkumari 11 ve Windows 10 postgresql var. Daha önce de belirttiğim gibi, global klasör içinde pg_database'i görmeye çalıştım ama göremedim. Bir sürü _vms, _fsm, config_exec_params, pg_control, pg_filenode.map, pg_internal.init olduğunu görebiliyordum. Windows 10 için hangi dosyayı aramalıyım. Farklı mı?
Nachiket

29

PgAdmin'i açın ve belirli bir veritabanı için Özellikler'e gidin. OID'yi bulun ve ardından dizini açın

<POSTGRESQL_DIRECTORY>/data/base/<OID>

DB dosyalarınız olmalıdır.


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


27

Linux kurulumum altında, burada: /var/lib/postgresql/8.x/

İle değiştirebilirsiniz initdb -D "c:/mydb/"


12
Dağıtımına bağlıdır - Fedora 20 için altında /var/lib/pgsql/data. Kullanarak bulmak daha iyi ps auxw|grep postgres|grep -- -D.
Skippy le Grand Gourou

17

Belirli tabloların / dizinlerin konumu TABLESPACE'ler tarafından ayarlanabilir:

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

15

Herkes zaten cevap verdi ama sadece en son güncellemeler için. Tüm yapılandırma dosyalarının nerede olduğunu bilmek istiyorsanız, bu komutu kabukta çalıştırın

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

14

Bahse girerim bu soruyu soruyorsunuz çünkü pg_ctl startşu hatayı denediniz ve aldınız:

pg_ctl: veritabanı dizini belirtilmedi ve ortam değişkeni PGDATA ayarlanmadı

Başka bir deyişle, sonra hisse satış dizine arıyorsanız -Dsizin de pg_ctl startkomuta.

Bu durumda, aradığınız dizin bu dosyaları içerir.

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

İşletim sisteminizle sağlanan aramayı kullanarak yukarıdaki dosya ve dizinlerden herhangi birini bularak bulabilirsiniz.

Örneğin benim durumumda ( Mac OS X'te bir HomeBrew kurulumu ), bu dosyalar içinde bulunur . Sunucuyu başlatmak için şunu yazıyorum:/usr/local/var/postgres

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

... ve çalışıyor.


1
Homebrew kullanıyorsanız, bu verileri bulmanın daha kolay bir yolu basittirbrew info postgres
Ben

Veritabanı klasörünü arama nedenim konusunda haklısın. Ama şey şu ki, yukarıdaki dosyalardan hiçbirini bulamıyorumlocate <filename>
aswin prabhakar

Bulundu ... sudo locate <filename>
Kullanmak

14

Postgres, verileri veri dizinindeki dosyalarda saklar. Bir veritabanına ve dosyalarına gitmek için aşağıdaki adımları izleyin:

Bir postgresql tablo dosyasına karşılık gelen veritabanı bir dizindir. Tüm veri dizininin konumu çalıştırılarak elde edilebilir SHOW data_directory. UNIX gibi bir işletim sisteminde (örneğin: Mac) /Library/PostgreSQL/9.4/data Veri dizinindeki tüm veritabanı klasörlerinin bulunduğu temel klasörün içine gidin:/Library/PostgreSQL/9.4/data/base

Çalıştırarak veritabanı klasörü adını bulun (Bir tamsayı verir. Bu veritabanı klasörü adıdır):

SELECT oid from pg_database WHERE datname = <database_name>;

Tablo dosya adını çalıştırarak bulun (Tamsayı verir. Bu dosya adıdır):

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

Bu bir ikili dosyadır. Boyut ve oluşturma tarihi gibi dosya ayrıntıları her zamanki gibi elde edilebilir. Daha fazla bilgi için bu SO dizisini okuyun


11

Mac'te: /Library/PostgreSQL/9.0/data/base

Dizin girilemez, ancak içeriğe şu yolla bakabilirsiniz: sudo du -hc data


13
Homebrew ile kurduysanız (ve neden olmasın?), /usr/local/var/postgres@ MikeSherrill'in show data_directory;ipucunu kullanarak keşfedebileceğiniz şey olabilir
Chris Beck

/Library/PostgreSQL/9.0/data/basedaha Mac benzeri bir yere benziyor /usr/local/var/postgres. Gizli Finder özelliklerini etkinleştirmeden Finder'da ikincisine göz atamazsınız.
Charlie

@Charlie Git menüsünden Finder'ı kullanarak göz atabilirsiniz. Git> Klasöre Git ... veya ⇧⌘G
Jason S

@JasonS Evet, bu hileyi Finder'da mac benzeri olmayan klasörü açmak için kullanabilirsiniz.
Charlie

1
Benim durumumda: / Kullanıcılar / bob / Kütüphane / Uygulama Desteği / Postgres / var-9.5
Bwyss 18:16

7

Windows'ta PostgresSQL belgelerinin tanımladığı PGDATA dizini benzer bir yerdedir C:\Program Files\PostgreSQL\8.1\data. Belirli bir veritabanı için veri (örneğin) altındadır C:\Program Files\PostgreSQL\8.1\data\base\100929, burada sanırım 100929 veritabanı numarasıdır.


1
Dikkat: Dosya sistemi düzeyinde yedekleme yapmak istiyorsanız, yalnızca bu dizinleri yedeklemeyin, çünkü dokümanlar açıkladığı gibi: "... yalnızca belirli tabloları veya veritabanlarını ilgili alanlarından yedeklemeye veya geri yüklemeye çalışabilirsiniz. Bu dosyalar içinde yer alan bilgiler, tüm işlemlerin taahhüt durumunu içeren pg_clog / * işlem günlüğü dosyaları olmadan kullanılamayacağından bu çalışmaz. "
Janis Veinbergs

Bu bağlıdır. Yükleme sırasında farklı bir klasöre yapılandırmış olabilirsiniz.
ANeves

benimki, C: \ Program Files \ PostgreSQL \ 9.4 \ içinde veri klasörü yok. Bu 9.4'e özgü bir şey mi yoksa yanlış bir şey mi yapmış?
LucyViolet

2

picmate'in cevabı doğru. Windows'ta ana DB klasörü konumu (en azından yüklememde)

C:\PostgreSQL\9.2\data\base\

ve program dosyalarında değil.

2 komut dosyası size tam olarak ihtiyacınız olan dizin / dosyaları verecektir:

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

benimki 16393 datname ve relfilenode 41603

postgresql veritabanı dosyaları


0

Bir docker kapsayıcısında (olduğu gibi CentOS üzerinde) postgres (9.5) çalıştırıyorum ve Skippy le Grand Gourou yukarıdaki bir açıklamada bahsedildiği gibi dosyalar yer alıyor /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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.