我有一个postgres 9. 3数据库在windows安装。完整的安装是在一个raid安装。
我们想用新的驱动器替换那个RAID,因为旧的驱动器开始失效。我们用文件资源管理器(不是我......)将所有数据从RAID复制到一个新的驱动器,然后替换所有驱动器并创建一个新的RAID,放回所有旧的数据,并将驱动器号改回旧的。认为一切都会正常工作。
遗憾的是没有使用postgres。用文件资源管理器复制破坏了pg_tblspc文件夹中的所有符号链接。它们不再是符号链接了,它们只是空文件夹。所以我现在有147个损坏的符号链接...
我检查了符号链接是如何工作的,并与一个工作的postgres安装进行了比较。我发现每个表都有一个OID。对于每个OID,在该文件夹中有2个符号链接。符号链接的数量会增加。例如,一个表的OID是17530,然后我有两个符号链接17538和17541。2它们指向数据库名称的数据文件夹。3在数据库名称的文件夹中我又有两个文件夹。其中一个符号链接指向其中一个文件夹。
增加的数字总是如此相同。所以它总是OID +8和+11(在其他工作安装上它总是+4和+7)。
所有的表管理都是由一个程序(FTK)完成的。所以如果你在里面做什么,它会为你创建/删除/更新数据库和表。我认为它总是有2个文件夹,因为FTK是这样做的。
我现在的问题是:我可以直接手动创建这些符号链接吗?然后一切就都正常了吗?或者可能有一个来自postgres的函数,在那里我可以指向“new”文件夹,它会重新创建符号链接吗?看起来符号链接是由postgres自己管理的。但是到目前为止,我还没有找到任何关于修复函数的信息
1条答案
按热度按时间gcuhipw91#
第一个错误是没有进行备份。第二个错误是创建了147个表空间。但我们不要再讨论这个问题了。您能做些什么呢?
首先是事实。在目录
pg_tblspc
中,* 每个表空间 (而不是每个表) 有 * 一个 * 符号链接。符号链接的名称是表空间的对象ID。您可以使用然后,您必须确定哪个目录属于哪个表空间。这没有帮助,因为这是丢失的信息。一旦您知道了表空间的路径:
pg_tblspc
目录其中12345是表空间的OID。
不用说,当你这样做的时候,PostgreSQL必须关闭。一旦你为所有的表空间重新创建了符号链接,你就应该做好了。