我已经倾销了这样的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
一切都按预期工作。没有一个警告。
我该怎么办?我做错了什么?
答案 0 :(得分:2)
答案实际上是在Moving PostgreSQL database fails on non-ascii characters with 'value too long'
中给出的目标服务器似乎使用不同的编码创建数据库,因此在恢复之前使用UTF8创建数据库可以解决问题。
归功于@habe(https://stackoverflow.com/users/216458/habe)
所以,我已经将我的问题投票结束了。