【问题标题】:update content of column from another schema.table.column postgresql从另一个 schema.table.column postgresql 更新列的内容
【发布时间】:2021-07-14 14:50:03
【问题描述】:

我在同一个数据库 (postgresql) 中有 2 个模式。

schema1

schema2

每个架构都有表 usersmail column

如何将 schema1.users 中邮件列的内容复制到所有行的邮件列到 schema2.users

我试过了:

update schema1.users
set mail=(select mail from schema2.users);

但没用。

【问题讨论】:

    标签: postgresql postgresql-9.3


    【解决方案1】:

    您可以执行 UPDATE 加入表,假设您的两个表都有匹配的 ID,它看起来像这样:

    UPDATE schema1.users a
    SET mail=b.mail
    FROM schema2.users b
    WHERE a.id=b.id
    

    我正在做的是加入表并更新 schema1.users 上每个匹配 id 的邮件。

    编辑: 我刚刚读到您实际上想要更新 schema2.users 邮件。查询将是这个:

    UPDATE schema2.users a
    SET mail=b.mail
    FROM schema1.users b
    WHERE a.id=b.id
    

    【讨论】:

      【解决方案2】:

      您可以加入这两个表。我加入了用户,但我不知道表格布局是什么样的。

      update schema2.users 
      set mail=s1.mail
      from schema1.mail as s1
      where users.user = s1.user
      

      【讨论】:

        【解决方案3】:

        这不是一个优雅的解决方案,但这是我在脚本中从命令行将特定表从一个模式复制到不同模式中的特定表的操作

        set search_path to schema1;   
        
        \copy (select field1, nextfield, morefields from table_in_schema1 ) TO export.sql delimiter ',' ;
        
        set search_path to schema2; 
        
        \copy table_name_in_schema2(matchingfield1, field_that_matches_next, another_field_forPosition2, ) FROM 'export.sql' DELIMITER ',' ;
        

        我有几个表需要导出到新模式中的单个表中,所以我编写了这个脚本,所以我有一个循环,读取包含表名的文件以导入模式二,然后将它们发送到数据库通过使用下面的命令 - 这会将大约 30 个表加载到第二个模式中的表中。

        psql -d alltg -c "\i bulk_import.sql"
        

        【讨论】:

        • 这很愚蠢。现有答案中显示的简单update 即可。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-04
        • 2012-11-08
        • 2023-03-08
        • 2020-11-04
        • 1970-01-01
        • 2016-07-14
        相关资源
        最近更新 更多