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

问题描述 投票:1回答:2

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

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终端删除或更新这些行。

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

postgresql timestamp odoo-10 postgresql-9.5 pg-dump
2个回答
2
投票

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

其次,使用选项pg_dump运行--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删除该行。

完成后,获取数据库集群的pg_dumpall,创建一个新集群,然后还原转储。继续与遭受损坏的群集一起工作是危险的,因为损坏可能保持不可见和扩散状态。


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.