Odoo 10不在PostgreSQL 9.5中备份数据库。显示“ SQL状态:22008。时间戳超出account_bank_statement_line的范围。”

由于硬件原因,几天前在我们公司发生数据库崩溃。我们从中恢复过来,但是从那以后,每次尝试备份数据库时都会遇到以下错误。

pg_dump: ERROR:  timestamp out of range
pg_dump: SQL command to dump the contents of table "account_bank_statement_line"

错误出现在“ account_bank_statement_line”表中,其中我们创建了5行,其中只有“ create_date”列的日期为4855年(!!!!),其余列的值为空,甚至ID (首要的关键)。我们甚至无法使用pgAdmin 4或PostgreSQL终端删除或更新这些行。

我们目前处于非常危险的阶段,没有几天的零售额支持。至少任何提示都将受到高度赞赏。

gehui19890302 回答:Odoo 10不在PostgreSQL 9.5中备份数据库。显示“ SQL状态:22008。时间戳超出account_bank_statement_line的范围。”

首先,如果数据很重要,请聘请专家。

第二,运行带有选项pg_dump的{​​{1}},以便至少拥有数据库其余部分的备份。

您下一步应该做的是停止数据库并对所有文件进行冷备份。这样一来,如果您搞砸了,就可以回去。

要进行的关键是找出有问题的行的--exclude-table=account_bank_statement_line(物理地址)。然后,您可以使用它来删除行。

您可以通过运行类似的查询来解决该问题

ctid

,然后尝试找到错误所在的SELECT create_date FROM account_bank_statement_line WHERE ctid < '(42,0)'; 。找到一行后,就会出现以下情况:

ctid

您可以通过其SELECT * FROM account_bank_statement_line WHERE ctid = '(42,14)'; 删除该行。

完成后,获取数据库集群的ctid,创建一个新集群并还原转储。继续与遭受损坏的集群一起工作是危险的,因为腐败可能无法发现并扩散。

,

我知道我们所做的可能不是技术上最先进的,但是它解决了我们的问题。我们咨询了一些专家,然后做的是:

  • 将所有数据迁移到一个新表(account_bank_statement_line2),这将传输所有具有有效数据的行。
  • 然后我们删除了“ account_bank_statement_line”表和

  • 将新表重命名为“ account_bank_statement_line”。

  • 之后,我们可以删除表。

然后数据库备份像往常一样顺利运行。

希望这可以帮助像我们这样陷入困境的人。干杯!

本文链接:https://www.f2er.com/2929541.html

大家都在问