shell 如何检查PostgreSQL子表中的所有数据是否复制成功

ni65a41a  于 12个月前  发布在  Shell
关注(0)|答案(2)|浏览(95)

作为PostgreSQL的初学者,我正在编写一个shell脚本来验证是否所有数据都已复制到子表。然后,我将进行其他活动。如果没有复制所有数据,则应暂停剩余的代码执行。在我的脚本中,使用insert into命令将purchase_history_pre_partitioning表中的所有数据复制到新创建的purchase_history表中。
为了验证是否所有数据都已复制,我编写了以下DO语句来比较两个表中的行数。但是,有一个语法错误。请告诉我如何解决这个问题。
DO声明:

do $$
begin
  if (((select count(*) from purchase_history) !=
         (select count(*) from purchase_history_pre_partitioning)))
      then
          EXIT        
end
$$

错误代码:
错误:语法错误在或接近“结束”行7:结束^
SQL状态:42601字符:143

liwlm1x9

liwlm1x91#

你应该在每个SQL语句的末尾添加一个后缀。通过向EXIT添加一个扩展来修改脚本,并使用END IF结束if语句

DO $$
BEGIN
  IF ((SELECT COUNT(*) FROM purchase_history) !=
      (SELECT COUNT(*) FROM purchase_history_pre_partitioning)) THEN
    EXIT;
  END IF;
END
$$;
5hcedyr0

5hcedyr02#

试试这个代码。它将确保purchase_history_pre_partitioning表中的所有数据都正确地移动到PostgreSQL purchase_history表中:

DO $$
BEGIN
  IF (SELECT COUNT(*) FROM purchase_history) != (SELECT COUNT(*) FROM purchase_history_pre_partitioning) THEN
    RAISE EXCEPTION 'Data copy verification failed!';
  END IF;
END $$;

希望它能起作用:)

相关问题