为表中的所有行基于列A更新列B

问题描述

我需要基于列a的值将哈希值插入列b,但是我需要对表中的每一行执行此操作。

无论尝试什么,我总是会收到此错误

ERROR: more than one row returned by a subquery used as an expression

我一直在尝试以下不同版本:

UPDATE table
SET column b = md5((SELECT column a FROM table))
WHERE column a IS NOT NULL;

关于如何执行此操作的任何建议?

解决方法

这里不需要子查询。据我了解,您想将column_a的校验和存储在column_b中。正如人们所期望的那样,Postgres的md5()函数期望一个字符串数据类型的单个标量参数,因此:

UPDATE table
SET column_b = md5(column_a)
WHERE column_a IS NOT NULL;

请注意,使用计算列(在Postgres 12中可用)存储此派生信息可能会更简单。