我有兴趣获取Linux OS中PostgreSQL表中可用的表,视图,函数,数据/内容的物理位置。我有一个场景,PostgreSQL可以安装在SD卡设备和硬盘上。如果我在SD中有表格,视图,功能,数据,我希望获得相同的物理位置,并在我希望更换存储空间时合并/复制到我的硬盘中。我希望数据库的存储应该是普通文件架构。
此外,是否可以查看文件的内容?我的意思是,我可以访问它们吗?
答案 0 :(得分:6)
Kevin和Mike已经提供了查找数据目录的指针。对于文件系统中表的物理位置,请使用:
SELECT pg_relation_filepath('my_table');
除非你确切知道自己在做什么,否则不要直接弄乱文件。
数据库作为一个整体由PGDATA/base
中的子目录表示:
如果使用表空间,则会变得更复杂。请阅读Database File Layout in the manual一章中的详细信息:
对于群集中的每个数据库,其中都有一个子目录 PGDATA / base,以
pg_database
中数据库的OID命名。这个 子目录是数据库文件的默认位置;在 特别是,它的系统目录存储在那里。
...
每个表和索引都存储在一个单独的文件中。对于平凡 关系,这些文件以表或索引的 filenode 命名 号码,可在
pg_class.relfilenode
中找到。
...
pg_relation_filepath()
函数显示整个路径(相对于 PGDATA)任何关系。
答案 1 :(得分:5)
查询show data_directory;
将显示主数据目录。但这并不一定能告诉你存储的位置。
PostgreSQL允许您定义新的tablespaces。表空间是文件系统中的命名目录。 PostgreSQL允许您在任何允许的表空间中存储单个表,索引和整个数据库。因此,如果在特定的表空间中创建了数据库,我相信它的任何对象都不会出现在数据目录中。
有关磁盘上存储内容的可靠运行时信息,您可能需要从系统目录中查询pg_database,pg_tablespace或pg_tables。表空间信息也可能在information_schema视图中可用。
但是对于合并或复制到您的硬盘,使用这些文件几乎肯定是一件坏事。对于那种工作,pg_dump是你的朋友。
答案 2 :(得分:3)
如果您正在讨论将磁盘文件复制为备份形式,您应该阅读此内容,尤其是有关连续存档和时间点恢复(PITR)的部分:
http://www.postgresql.org/docs/current/interactive/backup.html
如果您正在考虑尝试直接访问和解释磁盘文件中的数据,绕过数据库管理系统,出于很多原因,这是一个非常糟糕的主意。首先,存储方案非常复杂。另一方面,它往往会在每个新的主要版本中发生变化(每年发布一次)。第三,E.F. Codd的幽灵可能会困扰你;见Codd's 12 rules的规则8,9,11和12。