我有一个似乎因某种原因而被破坏的数据库。它是rails的开发数据库,因此我没有备份,但我确实需要继续开发。我试图放弃它,但那不起作用。
$ dropdb "database-name"
dropdb: database removal failed: ERROR: could not open file "global/2964": No such file or directory
提前感谢您的帮助!
答案 0 :(得分:1)
这里的错误比“破损”的数据库更多。你的PostgreSQL数据目录有些严重错误。
global/9264
看起来像是pg_catalog.pg_db_role_setting
,它存储ALTER DATABASE ... SET ...
和ALTER ROLE ... SET ...
设置。这不是特定于数据库的,它是一个全局表。
如果您的数据目录中缺少文件,则整个PostgreSQL数据目录可能已损坏。你应该备份你可以做的事情,如果你有什么关心的事情,那么重命名或删除损坏的数据目录,initdb
新的空白目录。
您将无法DROP
此数据库(或执行其他操作),因为PostgreSQL无法加载pg_db_role_setting
表的文件,但它需要删除引用丢弃的条目那里的数据库。
至于如何发生这种情况:
您是否曾与fsync = off
中的postgresql.conf
合作?
你有SSD存储吗?如果是这样,你最近有突然断电吗?
你有没有在PostgreSQL数据目录中做过任何直接修改?
外部存储上的PostgreSQL数据目录是否已被突然删除?
您有没有删除postmaster.pid
?