2016-11-08 90 views
1

我想要做的就是這個PostgreSQL的轉儲/恢復柱

psql -d xxx -c "select user_id from res_partner;" > backup.txt 

然後

psql -d xxx -c "update res_partner set user_id = null"; 

最大的問題留在插入數據回表...有沒有在postgresql中轉儲特定表的特定列然後再插入所有內容的方法?

要添加更多的上下文,真正的問題是我從一個名爲Odoo的webservice升級模塊。每個模塊可能會插入/更新約束...在我的情況下,我改變了同一列上的約束來引用另一列。它工作的很好,但是當我們升級服務器時,它會嘗試插回舊的外鍵,然後當我的模塊被加載時它會添加我的外鍵......但由於它指向不同的列,因此舊外鍵失敗一個約束錯誤...我想在升級過程中抑制約束檢查或備份恢復數據。具有空值不應引發約束錯誤。

回答

2

對不起,沒有理解你的背景,但可以告訴你如何轉儲/恢復你的數據:)。我的解決方案非常簡單。

第1步,將數據保存到文件
COPY res_partner(id, user_id) TO '/tmp/filename.txt';
第2步 - 將數據恢復到臨時表
CREATE TABLE res_partner_tmp(id int, user_id int);
COPY res_partner_tmp(id, user_id) FROM '/tmp/filename.txt';

對於你的情況下,可能沒有必要轉儲到文件,只需創建副本表
CREATE TABLE res_partner_tmp AS SELECT id,user_id FROM res_partner;

最後一步 - 恢復您的數據
UPDATE res_partner o SET user_id=c.user_id FROM res_partner_tmp c WHERE o.id=c.id;

+0

非常感謝。我最終使用臨時表而不是轉儲文件。但是從/到文件的副本幾乎是我一直在尋找的東西。 –