我有一個PostgreSQL的轉儲問題新的主鍵值/恢復。我們有一個運行PostgresSQL 8.4的生產應用程序。我需要在測試環境中的數據庫中創建一些值,然後將這部分數據導入生產環境。數據是由應用程序生成的,我需要使用這種方法,因爲它在進入生產之前需要進行測試。現在恢復PostgreSQL的轉儲
,我描述的環境,這裏是我的問題:
測試數據庫中,我離開只是我需要移動到生產數據庫中的數據。數據分佈在多個與多級外鍵鏈接的表上(如樹)。然後我使用pg_dump將所需的表格導出爲二進制格式。
當我嘗試導入,數據庫將正確導入新的主鍵值根表項,但不從其他表導入任何數據。我相信問題是子表上的外鍵不再識別新的主鍵。
是否有辦法實現這樣的導入,它將更新樹中所有受影響表的所有主鍵值,以自動更正串行(自動增量)值,並根據這些新的主鍵值更新所有外鍵?
我並知道如何使用的編程語言,同時連接到這兩個數據庫的幫助做到這一點,但因爲我沒有爲客戶的生產服務器的直接訪問,這將是一個很大的問題實現了我。
在此先感謝!
感謝您的快速回答!差距可能是一個問題,因爲客戶在發票,優惠等中使用各種記錄的ID。但是我會研究PL/pgSQL語言。我對它並不是很有經驗,但我明白我能用它做什麼。 – j0hny 2014-10-22 10:05:22
您的測試數據將佔用序列值,因此無論如何都要準備好有差距。當然,您可以刪除測試數據並修改序列,但如果用戶在測試的時間範圍內使用生產環境,則無法執行此操作,因爲數據庫會變得混亂。 數據庫工具可以將數據導出爲插入語句,這可以作爲導出數據的起點。你可以使用INSERT INTO table(cols)VALUES(vals)RETURNING idcolumn來獲取ID的值。您也可以使用帶有子選擇的INSERT。 INSERT WITH也是一個方便的工具。 祝你好運:) – Peter 2014-10-22 10:17:47
感謝您的建議彼得。實際上,我想出了另一種可能性 - 它可以創造很小的差距,但是我有更多的控制權 - 我創建了一個腳本,用於在所有受影響的表中增加生產環境中的序列數,並增加我想要插入的行數+保留。然後,我生成的數據插入與開始序列在生產開始「差距」,然後只需插入:-)。 該解決方案的工作原理和創建的差距很小。自從這個想法出來後,我接受了你的答案。謝謝。 – j0hny 2014-10-23 10:16:55