PostgreSQL在哪里存储数据库?

Tei*_*ion 326 postgresql

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

Mik*_*ll' 334

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

show data_directory;
Run Code Online (Sandbox Code Playgroud)

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

show all;
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM pg_tablespace;
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句 - 如果有人在像我这样的Mac上查找Postgres.app的数据库位置,默认情况下它位于〜/ Library/Application Support/Postgres [ver]/var中. (7认同)
  • 如果你不是DBA,你无论如何都不需要知道. (5认同)
  • 它说"必须是超级用户来检查数据目录":( (3认同)

小智 58

Windows7的上所有的数据库由指定的文件中的一些被称为pg_databaseC:\Program Files (x86)\PostgreSQL\8.2\data\global.然后你应该用下面的那个号码搜索文件夹名称C:\Program Files (x86)\PostgreSQL\8.2\data\base.那是数据库的内容.

  • @David,问题被关闭,大概是因为它没有指定哪个操作系统.(如果它已经指定了一个操作系统,它就会因为过于具体而被关闭.)你的答案很有帮助而且信息丰富 - 只要忽视反对者和挫折者,直到他们最终破坏了SO.仇恨会讨厌,等等. (31认同)
  • 为什么不?如果你没有提到操作系统,只是说"这个工作",任何在不同的操作系统上尝试的人都会感到困惑.这是相关的.编辑:哦,你可能意味着"根本不给操作系统特定的答案." 我想这是有道理的,我不知道. (19认同)
  • 除非问题明确说明操作系统,否则不要以特定于操作系统的方式回答. (3认同)

Alm*_*čić 28

打开pgAdmin并转到特定数据库的Properties.找到OID然后打开目录

<POSTGRESQL_DIRECTORY>/data/base/<OID>
Run Code Online (Sandbox Code Playgroud)

应该有你的DB文件.

  • `SELECT oid from pg_database where datname ='<dbname>'` (11认同)
  • 如何使用命令行工具获取OID? (2认同)

Ski*_*rou 27

正如" Linux上的PostgreSQL数据库默认位置 "所述,在Linux下,您可以使用以下命令找到:

ps aux | grep postgres | grep -- -D
Run Code Online (Sandbox Code Playgroud)


Sad*_*egh 25

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

你可以改变它 initdb -D "c:/mydb/"

  • 取决于分发 - 对于Fedora 20,它位于`/ var/lib/pgsql/data`下.最好找出使用`ps auxw | grep postgres | grep - -D`. (9认同)

ymv*_*ymv 17

TABLESPACEs可以调整特定表/索引的位置:

CREATE TABLESPACE dbspace LOCATION '/data/dbs';
CREATE TABLE something (......) TABLESPACE dbspace;
CREATE TABLE otherthing (......) TABLESPACE dbspace;
Run Code Online (Sandbox Code Playgroud)


pic*_*e 涅 14

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

对应于postgresql表文件的数据库是目录.可以通过运行获得整个数据目录的位置SHOW data_directory.在类似OS的UNIX中(例如:Mac)/Library/PostgreSQL/9.4/data 进入包含所有数据库文件夹的数据目录中的基本文件夹:/Library/PostgreSQL/9.4/data/base

通过运行查找数据库文件夹名称(给出一个整数.这是数据库文件夹名称):

SELECT oid from pg_database WHERE datname = <database_name>;
Run Code Online (Sandbox Code Playgroud)

通过运行查找表文件名(给出一个整数.这是文件名):

SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 
Run Code Online (Sandbox Code Playgroud)

这是一个二进制文件.可以像往常一样获取文件详细信息,例如大小和创建日期时间.有关更多信息,请阅读此SO线程


Saa*_*adi 13

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

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';
Run Code Online (Sandbox Code Playgroud)


evg*_*eni 11

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

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

  • 如果您通过自制软件安装(为什么不安装?),它将位于`/ usr/local/var/postgres`中,您可以使用@MikeSherrill的`show data_directory;`提示 (13认同)

xag*_*agg 11

我打赌你问这个问题,因为你已经尝试过pg_ctl start并收到以下错误:

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

换句话说,您正在寻找要-Dpg_ctl start命令中放置的目录.

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

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
Run Code Online (Sandbox Code Playgroud)

您可以使用操作系统提供的搜索找到上面的任何文件和目录,从而找到它.

例如在我的情况下(Mac OS X上的HomeBrew安装),这些文件位于.要启动服务器,我输入:/usr/local/var/postgres

pg_ctl -D /usr/local/var/postgres -w start
Run Code Online (Sandbox Code Playgroud)

......它有效.

  • 如果您使用自制软件,更简单的定位这些数据的方法就是`brew info postgres` (2认同)

k3n*_*3nn 10

picmate的答案是正确的。在 Windows 上,主数据库文件夹位置是(至少在我的安装上)

C:\PostgreSQL\9.2\data\base\
Run Code Online (Sandbox Code Playgroud)

而不是在程序文件中。

他的 2 个脚本将为您提供所需的确切目录/文件:

SELECT oid from pg_database WHERE datname = <database_name>;
SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 
Run Code Online (Sandbox Code Playgroud)

我的是 datname 16393 和 relfilenode 41603

postgresql 中的数据库文件


Ben*_*oyt 7

在Windows上,PostgresSQL文档描述的PGDATA目录就在某处C:\Program Files\PostgreSQL\8.1\data.特定数据库的数据在(例如)下C:\Program Files\PostgreSQL\8.1\data\base\100929,我猜100929是数据库编号.