pg_restore抱怨转储上的完整性错误。这甚至可能吗?

时间:2014-09-02 19:03:26

标签: postgresql pg-restore

我已经倾销了这样的OpenERP数据库:

pg_dump -Fc -xO -f o7db.dump o7db

源计算机具有:

$ pg_dump --version
pg_dump (PostgreSQL) 9.3.5

I scp转储到目标机器(OpenVZ容器),其中pg_restore是:

$ pg_restore --version
pg_restore (PostgreSQL) 9.3.5

我像这样运行pg_restore:

pg_restore -d o7db -xO -j3 o7db.dump

我能看到的唯一区别是postgres用户在两者中都不一样 机器(但应该由-O处理)。 pg_restore抱怨 约:

pg_restore: [archiver (db)] Error from TOC entry 8561; 0 1161831 TABLE DATA account_move_line manu
pg_restore: [archiver (db)] COPY failed for table "account_move_line": ERROR:  value too long for type character varying(64)
CONTEXT:  COPY account_move_line, line 172, column name: "<MASKED DATA HERE....>"

对于多个表,会多次发出此错误。在那之后,很多人如此 关于缺少元组的错误如下:

pg_restore: [archiver (db)] Error from TOC entry 6784; 2606 1182924 FK CONSTRAINT account_account_currency_id_fkey manu
pg_restore: [archiver (db)] could not execute query: ERROR:  insert or update on table "account_account" violates foreign key constraint "account_account_currency_id_fkey"
DETAIL:  Key (currency_id)=(1) is not present in table "res_currency".
     Command was: ALTER TABLE ONLY account_account
     ADD CONSTRAINT account_account_currency_id_fkey FOREIGN KEY (currency_id) REFERENCES re..

我不知道这是怎么可能的,因为源数据库似乎没问题。

恢复的数据库有许多空表(每个表失败都会导致太长时间 值):

 $ psql -d o7db -Ac "select * from account_move_line"  | tail -1
 (0 rows)

此外,我在同一个源机器上执行pg_restore:

pg_restore -d o7db_restore -xO -j3 o7db.dump

一切都按预期工作。没有一个警告。

我该怎么办?我做错了什么?

1 个答案:

答案 0 :(得分:2)

答案实际上是在Moving PostgreSQL database fails on non-ascii characters with 'value too long'

中给出的

目标服务器似乎使用不同的编码创建数据库,因此在恢复之前使用UTF8创建数据库可以解决问题。

归功于@habe(https://stackoverflow.com/users/216458/habe

所以,我已经将我的问题投票结束了。