使用Mac OS X 10.10(Yosemite)和Homebrew(0.9.5),我安装了PostgreSQL 9.4.1。基本上所有当前版本的发布时间......
我已经成功导入了一个残酷的大型数据库(56M记录 - 导入15个小时),并编写了一个应用程序以便在本地使用它。我发现了一个应用程序pgAdmin3,它允许我使用GUI执行各种管理任务。一切都很好。
每次重新启动计算机时,一旦由于来自USB火线音频接口的内核恐慌,一旦发生电源故障,两次来自用户启动的重启 - 每次重启后,数据库都是空的。数据库用户/角色仍然存在,表和关系存在,但是,所有表都是空的。 0记录。没有。 pgAdmin3甚至表明该表具有分配的空间,用于数百万条记录,具有“未定义”计数。刷新计数,显示0条记录。浏览数据显示0条记录。我的Mac应用程序(使用libpq)成功连接到数据库,并从其任何/所有SELECT语句获得0结果。是否有必要提到每次重新导入数据库需要15个小时? (修辞问题)
赞赏任何建议。
Mac OS X 10.0.2(约塞米蒂) 自制语0.9.5 在x86_64-apple-darwin14.1.0上的PostgreSQL 9.4.1,由Apple LLVM 6.0版(clang-600.0.56)编译(基于LLVM 3.5svn),64位
答案 0 :(得分:2)
您描述的行为与您的表格UNLOGGED
一致。
未记录的表位于普通表和临时表之间。它就像一张普通的表:
但它就像一个临时表:
它不是安全的。当PostgreSQL关闭并重新启动时,UNLOGGED
表的内容将被保留,但前提是它干净地关闭。在不干净的关闭时,UNLOGGED
表可能会被截断,因此它们仍然存在但包含零行。
写入它不会在pg_xlog
无法通过流式传输或基于日志的复制将其复制到其他节点
写入未记录的表会导致大约一半的磁盘I / O作为常规表
请参阅the manual。
猜测一下,你的表被定义为UNLOGGED
,当你的Mac关闭时你并没有干净地关闭PostgreSQL。因此,它会截断未记录的表,因为它无法确定它们是否处于一致状态。
干净地关闭PostgreSQL(例如pg_ctl -m fast -w stop
,或启动配置,让sue这样做)。或者不要使用未记录的表。或者在重新启动时愿意重新加载数据。
由于您想知道未记录的表的用途:
它们非常适合数据加载和转换,您希望加载一堆数据,然后提取并转换它以加载到其他表中。
报告表
可以重新启动整个系统的任何工作队列和任务队列,因此您无需制作正在进行的任务列表等崩溃安全
答案 1 :(得分:0)
Craig Ringer关于UNLOGGED表的建议很棒,另外要检查的是你已经提交了加载数据的任何操作。