2014-09-02 57 views
3

我有傾倒的OpenERP的DB這樣的:pg_restore抱怨轉儲中的完整性錯誤。這甚至有可能嗎?

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.. 

我看不出這是可能的,因爲源DB看來都很正常。

恢復的數據庫有許多空表(每個失敗的原因太長 值):

$ 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

什麼PostgreSQL版本是從創建的轉儲?服務器版本('SELECT version()'),而不是客戶端版本,以及目標服務器版本是什麼?另外,兩種文本的編碼方式都是相同的 - 它們無關緊要,但我們來檢查一下。 'SHOW server_encoding;'都是。 – 2014-09-03 07:30:35

+0

另外,請檢查發生錯誤的輸入塊的第172行的實際數據值。 – 2014-09-03 07:31:48

+0

[移動PostgreSQL數據庫失敗,非ascii字符值'太長'](http://stackoverflow.com/questions/1842564/moving-postgresql-database-fails-on-non-ascii-characters-與價值太長) – manu 2014-09-03 14:03:01

回答

相關問題