Linux 上 PostgreSQL 数据库的默认位置

PostgreSQL 在 Linux 上保存所有数据库的默认目录是什么?

334140 次浏览
/var/lib/postgresql/[version]/data/

至少在 Gentoo Linux 和 Ubuntu 14.04中是默认的。

您可以找到 postgresql.conf并查看参数 data_directory。如果它被注释,那么数据库目录与这个配置文件目录相同。

Postgreql 保存所有数据库的目录”(和配置)被称为“数据目录”,对应于 PostgreSQL 所称的“ 数据库集群”(有点令人困惑) ,它与分布式计算无关,它只是指由 PostgreSQL 服务器管理的一组数据库和相关对象。

数据目录的位置取决于发行版。如果从源安装,默认值是 /usr/local/pgsql/data:

在文件系统术语中,数据库 集群将是一个单一目录 存储所有数据的地方。 我们称之为数据目录 这完全取决于你 存储数据的位置。 尽管没有违约 地点,例如: /usr/local/pgsql/data 或 /var/lib/pgsql/data 很流行。 (裁判)

此外,一个正在运行的 PostgreSQL 服务器的实例与一个集群相关联,其数据目录的位置可以在 -D命令行选项中传递给服务器守护进程(“ 邮政局长”或“ Postgres”) ,或者通过 PGDATA环境变量(通常在运行用户的范围内,通常是 postgres)。您通常可以看到运行中的服务器是这样的:

[root@server1 ~]# ps auxw |  grep postgres | grep -- -D
postgres  1535  0.0  0.1  39768  1584 ?        S    May17   0:23 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data

请注意,可以运行同一 PostgreSQL 服务器的两个实例(相同的二进制文件,不同的进程)来服务不同的“集群”(数据目录) ,尽管这种情况并不常见。当然,每个实例都会在自己的 TCP/IP 端口上侦听。

在 Centos 6.5/PostgreSQL 9.3上:

"PGDATA=/var/lib/pgsql/data"的值更改为初始脚本文件 /etc/init.d/postgresql中您想要的任何位置。

记住 chmod 700chown postgres:postgres到新地点,你是老板。

Debian 8.1和 PostgreSQL 9.4中的默认值是在使用包管理器 轻而易举安装之后

ps auxw |  grep postgres | grep -- -D
postgres 17340  0.0  0.5 226700 21756 ?        S    09:50   0:00 /usr/lib/postgresql/9.4/bin/postgres -D /var/lib/postgresql/9.4/main -c config_file=/etc/postgresql/9.4/main/postgresql.conf

显然是 /var/lib/postgresql/9.4/main

我认为最好的方法是查询 pg_setting视图:

 select s.name, s.setting, s.short_desc from pg_settings s where s.name='data_directory';

产出:

      name      |        setting         |            short_desc
----------------+------------------------+-----------------------------------
data_directory | /var/lib/pgsql/10/data | Sets the server's data directory.
(1 row)

命令 pg_lsclusters(至少在 Linux/Ubuntu 下)可以用来列出现有的集群和数据目录:

Ver Cluster Port Status Owner    Data directory               Log file
9.5 main    5433 down   postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
10  main    5432 down   postgres /var/lib/postgresql/10/main  /var/log/postgresql/postgresql-10-main.log

下面的查询将帮助查找 postgres 配置文件。

postgres=# SHOW config_file;
config_file
-------------------------------------
/var/lib/pgsql/data/postgresql.conf
(1 row)


[root@node1 usr]# cd /var/lib/pgsql/data/
[root@node1 data]# ls -lrth
total 48K
-rw------- 1 postgres postgres    4 Nov 25 13:58 PG_VERSION
drwx------ 2 postgres postgres    6 Nov 25 13:58 pg_twophase
drwx------ 2 postgres postgres    6 Nov 25 13:58 pg_tblspc
drwx------ 2 postgres postgres    6 Nov 25 13:58 pg_snapshots
drwx------ 2 postgres postgres    6 Nov 25 13:58 pg_serial
drwx------ 4 postgres postgres   36 Nov 25 13:58 pg_multixact
-rw------- 1 postgres postgres  20K Nov 25 13:58 postgresql.conf
-rw------- 1 postgres postgres 1.6K Nov 25 13:58 pg_ident.conf
-rw------- 1 postgres postgres 4.2K Nov 25 13:58 pg_hba.conf
drwx------ 3 postgres postgres   60 Nov 25 13:58 pg_xlog
drwx------ 2 postgres postgres   18 Nov 25 13:58 pg_subtrans
drwx------ 2 postgres postgres   18 Nov 25 13:58 pg_clog
drwx------ 5 postgres postgres   41 Nov 25 13:58 base
-rw------- 1 postgres postgres   92 Nov 25 14:00 postmaster.pid
drwx------ 2 postgres postgres   18 Nov 25 14:00 pg_notify
-rw------- 1 postgres postgres   57 Nov 25 14:00 postmaster.opts
drwx------ 2 postgres postgres   32 Nov 25 14:00 pg_log
drwx------ 2 postgres postgres 4.0K Nov 25 14:00 global
drwx------ 2 postgres postgres   25 Nov 25 14:20 pg_stat_tmp