【发布时间】:2014-07-20 08:59:42
【问题描述】:
OSX 10.9.3 psql 9.3.4
我有几个正在处理的数据库,我们整晚都停电了。现在不存在我的数据库(包括默认数据库(用户名))。
为什么所有的数据库都从 psql 中消失了?他们不是已经得救了吗?有没有可能它们仍然存在但没有被 \dt 列出?
任何有关如何恢复这些数据库的帮助将不胜感激!
【问题讨论】:
-
感谢您提供您的版本。有帮助和赞赏。
OSX 10.9.3 psql 9.3.4
我有几个正在处理的数据库,我们整晚都停电了。现在不存在我的数据库(包括默认数据库(用户名))。
为什么所有的数据库都从 psql 中消失了?他们不是已经得救了吗?有没有可能它们仍然存在但没有被 \dt 列出?
任何有关如何恢复这些数据库的帮助将不胜感激!
【问题讨论】:
只有在底层存储不安全的情况下,断电才会导致数据库损坏或丢失 - 例如,一些廉价的消费级 SSD 无法正确刷新写入。但是,这个问题不太可能导致整个数据库消失,如果发生这种情况,您的数据库服务器成功启动的可能性就更小了。
由于您使用的是 OS X,因此很可能您实际上安装了多个 PostgreSQL 版本。我会说您在断电之前正在安装一个 PostgreSQL,而在断电(并导致重新启动)之后,您正在安装另一个 PostgreSQL。
事实上,既然您已经安装了 9.3.4,那么您的计算机上至少还有一个其他 PostgreSQL:Apple 捆绑的内置版本。
如果您只是连接到错误的 PostgreSQL 实例,数据应该仍然存在,只需连接到正确的 PostgreSQL 实例 - 如有必要,请先启动它。
首先,尝试:
SELECT version()
并确保您连接的服务器版本是您所期望的。
关于如何找到包含您的数据的 PostgreSQL 安装,我真的无法给出更具体的说明,因为 Mac 用户倾向于以多种不同的方式安装 PostgreSQL,并且通常安装了多个副本。它们也都以不同的方式启动——通过launchd、使用pg_ctl手动、通过postgres.app启动器等。所以为了帮助你,我需要你安装的PostgreSQL版本、方式和位置的详细信息。
我可以给您的一个提示是,您可以使用终端命令搜索 PostgreSQL 数据目录:
sudo find / -name PG_VERSION 2>/dev/null
这将为您显示每个安装的数据目录的一堆PG_VERSION 文件。您还可以列出 PostgreSQL 进程正在侦听的端口:
sudo netstat -ltnp | grep postgres
(假设可以在 OS X 上运行;我无法访问 OS X 机器进行测试)。
【讨论】:
find 命令甚至可以在 OS X 上运行。