我試圖使用SQL腳本來恢復數據庫SQL腳本來恢復數據庫,但事情外鍵約束的方式從外鍵約束
我正在一個MySQL數據庫,並把它交給PostgreSQL的獲得。 由於MySQL創建表語法結束了很大的不同,我帶了另一個PostgreSQL數據庫具有相同的模式,但不同的數據,並從中恢復模式。 換句話說,我現在有一個數據庫,其中包含表格,約束,序列以及所有那些內部沒有數據的數據庫。
因此,現在是恢復數據的時候了。 我使用phpMyAdmin(僅數據)作爲SQL腳本備份MySQL數據庫(由於某種原因,pgAdmin似乎不接受zip或gzip文件)並運行SQL腳本。 現在,這就是問題開始發生的地方,從MySQL到PostgreSQL是很自然的,所以語法錯誤一定會發生。
但是,也有其他非語法有關的問題,像這樣的:
ERROR: insert or update on table "_account" violates foreign key constraint "fk_1_account"
DETAIL: Key (accountid)=(2) is not present in table "_entity".
所以,是的,基本上,一個外國約束存在,查詢嘗試將數據插入到_account
表,但尚未將相應的數據插入_entity
表中。 我該如何解決這個問題?有沒有辦法讓pgAdmin3/PostgreSQL禁用所有的約束,插入數據,然後重新啓用約束?
我遇到語法有關的錯誤,是這樣的一個:
INSERT INTO _accounttype_seq (id) VALUES (11);
PostgreSQL的相當於該聲明(如果我是正確的)是
ALTER SEQUENCE _accounttype_seq INCREMENT BY 11;
但是,這是一個有點痛運行整個腳本並更改所有200多個序列插入語句。所以,我在這裏很懶,但是有沒有更簡單的方法來處理序列呢?
或者,你們對不同的工具有什麼建議可以使這更簡單嗎?
感謝您的時間,祝您有美好的一天。
mysql有一個'foreign_key_checks'設置,您可以爲導入目的禁用 - 不禁用它們就不可能導入任何帶有循環引用的表,或者以非常特定的順序列出表。 PG應該有類似的東西。 –
這些可能有所幫助: 1. http://stackoverflow.com/questions/2679854/postgresql-disabling-constraints,2. http://www.postgresql.org/docs/8.2/static/sql-set-constraints。 html – Abhay