我毫不怀疑,我的数据库中有一个 oid 类型的字段我保存了文本文件,我想知道我是否能以某种方式检索保存文件的名称。不知道是否以某种方式成功地* lo_export *或其他方法。
提前感谢您的帮助。
答案 0 :(得分:2)
PostgreSQL不为存储在数据库中的每个大对象创建单独的文件;使用具有btree索引的相当正常的堆表。因此,大型对象被分成更小的部分,以便数据库更容易进行空间管理,并混合在该表使用的1GB段文件中。
快速查看pg_class表,我看到了pg_largeobject的一个条目,我认为这是存储“lo”大对象特征的所有对象的地方。在我的系统上,我看到一个11869的relfilenode,这意味着用于存储数据的初始文件将是11869,后续文件将是11869.1,11886.2等。我不知道是否有任何方法可以为relfilenode重新分配大型对象,但您应该检查您的pg_class条目以确定。
通常,除了通过提供的“lo”函数之外,不应访问存储在数据库中的大对象。如果您想要单独的文件并且能够直接访问它们,您应该将它们直接保存到磁盘并存储文件名或URI。您可以从PostgreSQL函数内部或外部将它们保存到磁盘。