Postgresql dump/restore 专栏

Postgresql dump/restore column

我想做的是这个

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

然后

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

最大的问题仍然是将数据插入回 table... 有没有办法在 postgresql 中转储特定 table 的特定列,然后将所有内容插入回来?

要添加更多上下文,真正的问题是我正在从名为 Odoo 的 Web 服务升级模块。每个模块可能 insert/update 约束...在我的例子中,我更改了同一列上的约束以引用另一列。它工作得很好,但是当我们升级服务器时,它会尝试插入旧的外键然后当我的模块被加载时它会添加我的外键......但是由于它指向不同的列,旧的外键失败了约束错误...我想在升级或备份恢复数据期间抑制约束检查。具有空值不应引发约束错误。

抱歉,不了解您的上下文,但可以告诉您如何 dump/restore 您的数据 :)。我的解决方案非常简单。

第一步,保存数据到文件
COPY res_partner(id, user_id) TO '/tmp/filename.txt';
第 2 步 - 将数据恢复到临时 table
CREATE TABLE res_partner_tmp(id int, user_id int);
COPY res_partner_tmp(id, user_id) FROM '/tmp/filename.txt';

对于您的情况,可能不需要转储到文件,只需创建 table
的副本 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;