Postgresql 转储/恢复列

标签 postgresql restore dump

我想做的是这个

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';
第二步 - 恢复数据到临时表
创建表 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;

关于Postgresql 转储/恢复列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40496987/

相关文章:

python - 带有 Pony ORM 的 Postgres 模式

sql - PostgreSQL - 将 JSON 字符串转换为 INTERVAL 返回不正确的值

更新后 PostgreSQL 似乎使用的是旧版本

postgresql - pgbackups 错误 : backup url is invalid?

oracle - 是否有相当于 mysqldump 的 Oracle

postgresql - Spring数据原生查询不允许Postgres jsonb字符串存在操作符(问号)

database - 在 Windows 安全模式下运行 SQL Server 2005

linux - 如何找回被 Subversion 删除的未版本化文件夹

linux - Windows 和 Linux 的 postgres 转储是否不同?

java - 如何按转储文件中的值过滤变量?