如何验证表更新和从另一个表迁移数据-postgresql



在我的potgres数据库中,每种类型都有以下两个表。

用户

userid       | bigint (PK) NOT NULL
username     | character varying(255)
businessname | character varying(255)

收件箱

messageid    | bigint (PK) NOT NULL
username     | character varying(255)
businessname | character varying(255)

我想在这里实现的是,我想在inbox表中添加一个名为userRefId的新字段,并将user表的userid数据迁移到两个表中每个usernamebusinessname都匹配的数据中。

这些是我用来做这件事的查询。

ALTER TABLE inbox ADD userRefId bigint;
UPDATE inbox 
SET userRefId = u.userid
from "user" u
WHERE u.username = inbox.username 
AND u.businessname = inbox.businessname;

现在我想验证数据是否已正确迁移。我可以采取什么方法来实现这一点?(注意:inbox上的username可以为空(

这是否足以进行验证?

select count(*) from inbox where username is not null;等于的结果

select count(userRefId) from inbox;

数据传输是否正确?首先,更新看起来是正确的,所以你真的不需要担心。

您可以获取consumer_inbox中用户名与不匹配的所有行

select ci.*. -- or count(*)
from consumer_inbox ci
where not exists (select 1
from user u
where ci.userRefId = u.userId
);

这并不意味着update不起作用。只是consumer_inbox中的值没有匹配项。

在您的代码的情况下,这相当于:

select ci.*
from consumer_inbox ci
where userId is null;

尽管这不会使userId成为不匹配的记录(宇宙射线,有人吗?(。

您还可以验证用于匹配的其他字段:

select ci.*. -- or count(*)
from consumer_inbox ci
where not exists (select 1
from user u
where ci.userRefId = u.userId and
ci.username = u.username and
ci.businessname = u.businessname
);

然而,所有这些检查似乎都是不必要的,除非您在表或已知的不匹配记录上有触发器。

最新更新