ChatGPT解决这个技术问题 Extra ChatGPT

PostgreSQL 将数据库存储在哪里?

PostgreSQL 数据库的文件存储在哪里?

sudo -u postgres psql -c "show data_directory;" 将显示标准 PostgreSQL 安装上的当前存储位置。

S
SukiCZ

要查看数据目录的位置,请使用此查询。

show data_directory;

要查看所有运行时参数,请使用

show all;

您可以创建表空间来将数据库对象存储在文件系统的其他部分。要查看可能不在该数据目录中的表空间,请使用此查询。

SELECT *, pg_tablespace_location(oid) FROM pg_tablespace;

显示数据目录;命令指向数据的确切位置。搜索特定文件夹很痛苦,因为其他人可能已经为您安装了它,现在您不知道配置,因此遵循 sql 有助于节省时间。 :) 谢谢迈克。
它说“必须是超级用户才能检查数据目录”:(
如果您不是 DBA,那么您实际上并不需要知道。
顺便说一句 - 如果有人像我一样在 Mac 上寻找 Postgres.app 的数据库位置,默认情况下它在 ~/Library/Application Support/Postgres[ver]/var 中。
要运行查询,请使用 PGAdmin III 并使用菜单栏中的“运行查询”图标。
t
the Tin Man

在 Windows7 上,所有数据库都由 C:\Program Files (x86)\PostgreSQL\8.2\data\global 下名为 pg_database 的文件中的数字引用。然后您应该在 C:\Program Files (x86)\PostgreSQL\8.2\data\base 下按该编号搜索文件夹名称。那是数据库的内容。


除非问题明确说明了操作系统,否则不要以特定于操作系统的方式回答。
为什么不?如果您不提及操作系统而只说“这有效”,那么任何在不同操作系统上尝试的人都会感到困惑。这是相关的。编辑:哦,你可能的意思是“根本不给出操作系统特定的答案”。我想这是有道理的,我不知道。
@SamGoody 如果这个答案实际上是正确的,那么您所说的会有点道理。 (这并非完全不正确,因为该文件夹可能存在于 Windows 中,但它肯定不是给定的)。通过遵循已经给出的答案,可以很容易地找出是否是这种情况。
@senthilkumari我有postgresql 11和windows 10。正如你提到的,我试图查看全局文件夹中的pg_database,但我看不到任何内容。我可以看到一堆 _vms、_fsm、config_exec_params、pg_control、pg_filenode.map、pg_internal.init。对于 Windows 10,我应该搜索哪个文件名。有什么不同吗?
C
Community

正如“PostgreSQL database default location on Linux”中所建议的,在 Linux 下,您可以使用以下命令查找:

ps aux | grep postgres | grep -- -D

简单,无需对数据库进行身份验证!
A
Almir Sarajčić

打开 pgAdmin 并转到特定数据库的属性。找到 OID 然后打开目录

<POSTGRESQL_DIRECTORY>/data/base/<OID>

应该有你的数据库文件。


SELECT oid from pg_database where datname = '<dbname>'
t
trinth

在我的 Linux 安装下,它在这里:/var/lib/postgresql/8.x/

您可以使用 initdb -D "c:/mydb/" 更改它


取决于发行版 — 对于 Fedora 20,它在 /var/lib/pgsql/data 之下。最好使用 ps auxw|grep postgres|grep -- -D 找出答案。
(直到 F34 它仍然在同一个目录中,顺便说一句)
S
Saad Saadi

每个人都已经回答了,但只是为了最新的更新。如果您想知道所有配置文件所在的位置,请在 shell 中运行此命令

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

x
xagg

我敢打赌,您之所以问这个问题,是因为您尝试了 pg_ctl start 并收到以下错误:

pg_ctl: 没有指定数据库目录并且环境变量 PGDATA 未设置

换句话说,您正在寻找放置在 pg_ctl start 命令中 -D 之后的目录。

在这种情况下,您要查找的目录包含这些文件。

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

...它的工作原理。


如果您使用自制软件,查找此数据的更简单方法是 brew info postgres
您对我正在寻找数据库文件夹的原因是正确的。但问题是我找不到上述任何带有 locate <filename> 的文件
找到它们...必须使用 sudo locate <filename>
t
the Tin Man

特定表/索引的位置可以通过 TABLESPACE 调整:

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

C
Community

Postgres 将数据存储在其数据目录中的文件中。按照以下步骤转到数据库及其文件:

一个postgresql表文件对应的数据库是一个目录。运行 SHOW data_directory 可以获得整个数据目录的位置。在类似 UNIX 的操作系统中(例如: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>; 

这是一个二进制文件。可以照常获取文件详细信息,例如大小和创建日期时间。欲了解更多信息read this SO thread


e
evgeni

在 Mac 上:/Library/PostgreSQL/9.0/data/base

无法进入目录,但可以通过以下方式查看内容:sudo du -hc data


如果您通过自制软件安装(为什么不安装?),它会在 /usr/local/var/postgres 中,您可以使用 @MikeSherrill 的 show data_directory; 提示找到它
/Library/PostgreSQL/9.0/data/base 似乎比 /usr/local/var/postgres 更像 Mac 的位置。如果不启用隐藏的 Finder 功能,您将无法在 Finder 中浏览到后者。
@Charlie 您可以使用“前往”菜单中的 Finder 进行浏览。前往 > 前往文件夹...,或 ⇧⌘G
@JasonS是的,您可以使用该技巧在Finder中打开类似mac的文件夹。
就我而言,它位于:/Users/bob/Library/Application Support/Postgres/var-9.5
B
Ben Hoyt

在 Windows 上,PostgresSQL docs describe 所在的 PGDATA 目录类似于 C:\Program Files\PostgreSQL\8.1\data。特定数据库的数据位于(例如)C:\Program Files\PostgreSQL\8.1\data\base\100929 下,我猜 100929 是数据库编号。


注意:如果您想进行文件系统级备份,请不要只备份这些目录,因为如 docs 所述:“...您可能会尝试仅备份或恢复某些单独的表或数据库它们各自的文件或目录。这将不起作用,因为如果没有提交日志文件 pg_clog/*,这些文件中包含的信息将无法使用,其中包含所有事务的提交状态。
这取决于。您可以在安装时将其配置到不同的文件夹。
在我的 C:\Program Files\PostgreSQL\9.4\ 中没有数据文件夹,这是 9.4 特有的还是做错了什么?
k
k3nn

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>; 

我的在 datname 16393 和 relfilenode 41603

https://i.stack.imgur.com/1rz1q.png


r
rotarydial

我在 docker 容器中运行 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

R
Roko

单个终端命令:pg_lsclusters,(使用 Ubuntu

您需要的是在数据目录下:

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