Odoo 10没有备份PostgreSQL 9.5中的DB。显示“SQL状态:22008.账户\银行\对账单\行上的时间戳超出范围。”

Odoo 10没有备份PostgreSQL 9.5中的DB。显示“SQL状态:22008.账户\银行\对账单\行上的时间戳超出范围。”,postgresql,timestamp,odoo-10,postgresql-9.5,pg-dump,Postgresql,Timestamp,Odoo 10,Postgresql 9.5,Pg Dump,几天前,由于硬件原因,我们公司发生了一次数据库崩溃。我们从中恢复,但从那时起,每次尝试备份数据库时都会出现以下错误 pg_dump: ERROR: timestamp out of range pg_dump: SQL command to dump the contents of table "account_bank_statement_line" 错误出现在account\u bank\u statement\u line表中,我们创建了5行,其中只有“create\u date”列的

几天前,由于硬件原因,我们公司发生了一次数据库崩溃。我们从中恢复,但从那时起,每次尝试备份数据库时都会出现以下错误

pg_dump: ERROR:  timestamp out of range
pg_dump: SQL command to dump the contents of table "account_bank_statement_line"
错误出现在account\u bank\u statement\u line表中,我们创建了5行,其中只有“create\u date”列的日期为4855年!!!!,其余的列都有空值,甚至id主键也是空值。我们甚至不能使用pgAdmin 4或PostgreSQL终端删除或更新这些行


我们现在处于一个非常危险的阶段,没有几天零售销售的支持。如果有任何提示,我们将不胜感激。

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

其次,使用-exclude table=account\u bank\u statement\u行选项运行pg\u dump,这样至少可以备份数据库的其余部分

接下来要做的是停止数据库并对所有文件进行冷备份。这样,如果你搞砸了,你就可以回到过去

接下来的关键点是找出问题行的CTID物理地址。然后您可以使用它来删除行

您可以通过运行以下查询来实现这一点

SELECT create_date FROM account_bank_statement_line
WHERE ctid < '(42,0)';
您可以按ctid删除该行


完成后,对所有数据库集群进行pg_转储,创建一个新的并恢复转储。继续使用已发生损坏的群集是危险的,因为损坏可能会一直不可见并蔓延。

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

其次,使用-exclude table=account\u bank\u statement\u行选项运行pg\u dump,这样至少可以备份数据库的其余部分

接下来要做的是停止数据库并对所有文件进行冷备份。这样,如果你搞砸了,你就可以回到过去

接下来的关键点是找出问题行的CTID物理地址。然后您可以使用它来删除行

您可以通过运行以下查询来实现这一点

SELECT create_date FROM account_bank_statement_line
WHERE ctid < '(42,0)';
您可以按ctid删除该行


完成后,对所有数据库集群进行pg_转储,创建一个新的并恢复转储。继续与经历过腐败的集群合作是很危险的,因为腐败可能会一直看不见并蔓延。

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

将所有数据迁移到新表account\u bank\u statement\u line2,这将传输所有具有有效数据的行。 然后我们删除了账户、银行、对账单和行表

将新表重命名为账户\银行\对账单\行

然后我们可以放下桌子

然后,数据库备份像往常一样平稳运行


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

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

将所有数据迁移到新表account\u bank\u statement\u line2,这将传输所有具有有效数据的行。 然后我们删除了账户、银行、对账单和行表

将新表重命名为账户\银行\对账单\行

然后我们可以放下桌子

然后,数据库备份像往常一样平稳运行


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