PostgreSQL数据库中对象的物理位置?

siv*_*iva 8 postgresql database-design data-storage

我有兴趣获得Linux OS中PostgreSQL表中可用的表,视图,函数,数据/内容的物理位置.我有一个场景,PostgreSQL可以安装在SD卡设备和硬盘上.如果我在SD中有表格,视图,功能,数据,我希望获得相同的物理位置,并在我希望更换存储空间时合并/复制到我的硬盘中.我希望数据库的存储应该是普通文件架构.

此外,是否可以查看文件的内容?我的意思是,我可以访问它们吗?

Erw*_*ter 6

@Kevin和@Catcall已经提供了查找数据目录的指针.如果您对光盘上桌子的物理位置感兴趣,可以使用:

SELECT pg_relation_filepath('my_table');
Run Code Online (Sandbox Code Playgroud)

除非你确切知道自己在做什么,否则不要直接弄乱文件!

数据库作为一个整体通过在一个子目录中表示PGDATA/base:

如果使用表空间,它会变得更复杂.阅读手册中" 数据库文件布局 "一章中的所有详细信息:

每个表和索引都存储在一个单独的文件中.对于普通关系,这些文件以表或索引的filenode编号命名,该编号可以在pg_class.relfilenode中找到.

...

对于集群中的每个数据库,PGDATA/base中都有一个子目录,以pg_database中数据库的OID命名.该子目录是数据库文件的默认位置; 特别是,它的系统目录存储在那里.

...

所述pg_relation_filepath()函数表示的任何关系的整个路径(相对于PGD​​ATA).

大胆强调我的.
关于功能的手册pg_database.


Mik*_*ll' 5

该查询show data_directory;将向您显示主数据目录。但这并不一定告诉您事物的存储位置。

PostgreSQL允许您定义新的表空间。表空间是文件系统中的命名目录。PostgreSQL使您可以在任何允许的表空间中存储单个表,索引和整个数据库。因此,如果数据库是在特定的表空间中创建的,那么我相信它的任何对象都不会出现在数据目录中。

要获得有关事物在磁盘上存储位置的可靠运行时信息,您可能需要从系统目录中查询pg_databasepg_tablespacepg_tables。表空间信息也可能在information_schema视图中可用。

但是对于合并或复制到硬盘,使用这些文件几乎可以肯定是一件坏事。对于这种工作,pg_dump是您的朋友。