gpt4 book ai didi

database - 重新启动 PostgreSQL 后,我所有的表都是空的(零行)

转载 作者:搜寻专家 更新时间:2023-10-30 19:48:09 25 4
gpt4 key购买 nike

使用 Mac OS X 10.10 (Yosemite) 和 Homebrew (0.9.5),我安装了 PostgreSQL 9.4.1。基本上截至发帖时的所有当前版本...

我已经成功地导入了一个极其庞大的数据库(5600 万条记录 - 导入需要 15 小时),并编写了一个应用程序在本地使用它。我找到了一个应用程序 pgAdmin3,它可以让我使用 GUI 执行各种管理任务。一切都很好。

每次我重新启动计算机时,一次是由于 USB 火线音频接口(interface)的内核崩溃,一次是电源故障,两次是用户启动的重新启动 - 每次重新启动后,数据库都是空的。数据库用户/角色仍然存在,表和关系仍然存在,但是,所有表都是空的。 0条记录。没有什么。 pgAdmin3 甚至显示该表有空间分配 用于数以百万计的记录,具有“未定义”计数。刷新计数,显示 0 条记录。浏览数据显示 0 条记录。我的 Mac 应用程序(使用 libpq)成功连接到数据库,并从其任何/所有 SELECT 语句中获得 0 个结果。提到每次重新导入数据库需要 15 个小时是否多余? (反问)

感谢任何和所有建议。

Mac OS X 10.0.2(优胜美地)自制软件 0.9.5x86_64-apple-darwin14.1.0 上的 PostgreSQL 9.4.1,由 Apple LLVM version 6.0 (clang-600.0.56) 编译(基于 LLVM 3.5svn),64 位

最佳答案

您描述的行为与您的表UNLOGGED 一致。

未记录的表介于普通表和临时表之间。它就像一张普通的 table :

  • 可在多个 session 中使用
  • session 退出时不清除
  • 它存储在主表空间,而不是临时表空间

但它就像一个临时表:

  • 它不是安全的。 UNLOGGED 表的内容在 PostgreSQL 关闭和重新启动时被保留,但前提是它完全关闭。在不正常关机时,UNLOGGED 表可能会被截断,因此它们仍然存在但包含零行。

  • 写入它不会在 pg_xlog

    中产生预写日志记录
  • 它不能通过流或基于日志的复制复制到其他节点

  • 写入未记录的表会导致大约一半的磁盘 I/O 作为常规表

参见 the manual .

据推测,您的表被定义为 UNLOGGED,并且当您的 Mac 关闭时您并没有完全关闭 PostgreSQL。因此它会截断未记录的表,因为它无法确定它们是否处于一致状态。

干净地关闭 PostgreSQL(例如,pg_ctl -m fast -w stop,或启动的配置要求这样做)。或者不要使用未记录的表。或者在您重新启动时愿意重新加载您的数据。

既然您想知道未记录的表的用途:

  • 它们非常适合数据加载和转换,您可以在其中加载一堆数据,然后提取并转换数据以加载到其他表中。

  • 报告表

  • 工作队列和任务队列,用于整个系统可以重新启动的任何地方,因此您无需制作正在进行的任务列表等崩溃安全

关于database - 重新启动 PostgreSQL 后,我所有的表都是空的(零行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29872546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com