从另一个schema.table.column postgresql更新列的内容

时间:2017-10-24 11:50:35

标签: postgresql postgresql-9.3

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

schema1

schema2

每个架构都有表usersmail column

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

我试过了:

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

但没有用。

先谢谢

3 个答案:

答案 0 :(得分:0)

你可以加入这两张桌子。我加入了用户,但我不知道tablelayout是什么样的。

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

答案 1 :(得分:0)

你可以做一个UPDATE连接表,假设你的两个表都有匹配的ID,它看起来像这样:

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

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

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

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

答案 2 :(得分:0)

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

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"