PostgreSQL 备份/恢复列

3

What I'd like to do is this

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服务升级模块。每个模块都可能插入/更新约束条件... 在我的情况下,我更改了同一列上的约束条件,以引用另一列。它运行良好,但当我们升级服务器时,它会尝试重新插入旧的外键,然后当我的模块加载时,它会添加我的外键... 然而,由于它指向不同的列,旧的外键会因约束错误而失败... 我想要在升级期间抑制约束检查或备份恢复数据。具有空值的字段不应该引发约束错误。
1个回答

3

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

第一步,将数据保存到文件中
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;


非常好,谢谢。最终我使用了临时表而不是转储到文件。但是从/到文件的复制基本上就是我想要的。 - Loïc Faure-Lacroix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接