Where does PostgreSQL store the database?

后端 未结 13 1700
忘了有多久
忘了有多久 2020-11-27 09:14

Where are the files for a PostgreSQL database stored?

相关标签:
13条回答
  • 2020-11-27 09:34

    I'd bet you're asking this question because you've tried pg_ctl start and received the following error:

    pg_ctl: no database directory specified and environment variable PGDATA unset

    In other words, you're looking for the directory to put after -D in your pg_ctl start command.

    In this case, the directory you're looking for contains these files.

    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
    

    You can locate it by locating any of the files and directories above using the search provided with your OS.

    For example in my case (a HomeBrew install on Mac OS X), these files are located in /usr/local/var/postgres. To start the server I type:

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

    ... and it works.

    0 讨论(0)
  • 2020-11-27 09:38

    I'm running postgres (9.5) in a docker container (on CentOS, as it happens), and as Skippy le Grand Gourou mentions in a comment above, the files are located in /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
    
    0 讨论(0)
  • 2020-11-27 09:39

    Everyone already answered but just for the latest updates. If you want to know where all the configuration files reside then run this command in the shell

    SELECT name, setting FROM pg_settings WHERE category = 'File Locations';
    
    0 讨论(0)
  • 2020-11-27 09:41

    The location of specific tables/indexes can be adjusted by TABLESPACEs:

    CREATE TABLESPACE dbspace LOCATION '/data/dbs';
    CREATE TABLE something (......) TABLESPACE dbspace;
    CREATE TABLE otherthing (......) TABLESPACE dbspace;
    
    0 讨论(0)
  • 2020-11-27 09:43

    picmate's answer is right. on windows the main DB folder location is (at least on my installation)

    C:\PostgreSQL\9.2\data\base\
    

    and not in program files.

    his 2 scripts, will give you the exact directory/file(s) you need:

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

    mine is in datname 16393 and relfilenode 41603

    0 讨论(0)
  • 2020-11-27 09:47

    Open pgAdmin and go to Properties for specific database. Find OID and then open directory

    <POSTGRESQL_DIRECTORY>/data/base/<OID>
    

    There should be your DB files.

    0 讨论(0)
提交回复
热议问题