我对 Postgres 相当陌生,已经使用 MySQL/MariaDB 多年了。我有一个用于开发的 Postgres 14.9 数据库,其中有两个模式。当我断电时,这两个模式仍然存在于数据库中,但其中一个模式的数据消失了。日志说:
[1199] LOG: database system was not properly shut down; automatic recovery in progress
[1199] LOG: redo starts at 0/3094A290
[1199] LOG: invalid record length at 0/3094A378: wanted 24, got 0
[1199] LOG: redo done at 0/3094A340 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
[1050] LOG: database system is ready to accept connections
由于这是为了开发,因此丢失数据并不是什么大问题;我只是不断导入转储,但我想知道为什么会发生这种情况以及我可以采取什么措施来防止它,特别是当我将此系统投入生产时。我没有更改 Postgres 或操作系统中有关磁盘缓存的任何设置。我在虚拟机中使用 Ubuntu 22.04,主机是 SSD 上的 Windows 10。
另外,有没有一种方法可以在不导入转储的情况下恢复数据?我做了一些研究,这促使我尝试pg_resetxlog
and pg_resetwal
,但两者都说command not found
。
我想到了。我将表创建为
UNLOGGED
,但忘记运行将它们设置为 的其他文件LOGGED
。这似乎是预期的行为。来自https://www.postgresql.org/docs/current/sql-createtable.html