问题: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 的 Web 服务升级模块。每个模块都可能插入/更新约束...就我而言,我更改了同一列上的约束以引用另一列。它工作得很好,但是当我们升级服务器时,它会尝试插入旧的外键然后当我的模块被加载时它会添加我的外键......但是由于它指向不同的列,旧的外键失败了约束错误...我想在升级期间抑制约束检查或备份恢复数据。具有空值不应引发约束错误。

解答

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

第一步,保存数据到文件

COPY res_partner(id, user_id) TO '/tmp/filename.txt';

第二步 - 将数据恢复到临时表

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;

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐