我有傾倒的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
一切正常如預期。沒有一個警告。
我該怎麼辦?我究竟做錯了什麼?
什麼PostgreSQL版本是從創建的轉儲?服務器版本('SELECT version()'),而不是客戶端版本,以及目標服務器版本是什麼?另外,兩種文本的編碼方式都是相同的 - 它們無關緊要,但我們來檢查一下。 'SHOW server_encoding;'都是。 – 2014-09-03 07:30:35
另外,請檢查發生錯誤的輸入塊的第172行的實際數據值。 – 2014-09-03 07:31:48
[移動PostgreSQL數據庫失敗,非ascii字符值'太長'](http://stackoverflow.com/questions/1842564/moving-postgresql-database-fails-on-non-ascii-characters-與價值太長) – manu 2014-09-03 14:03:01