在postgresql中生成行号的校验和MD5



我正在尝试执行在错误报告中发现的以下查询。

当我们尝试运行R包时,会生成错误报告。这个错误报告帮助我们知道错误在哪里以及如何复制。经过调查,我能够看到它是下面的查询,这导致了R包执行时的问题。

select co.*, p.*,
row_number() over (order by ABS(CHECKSUM(MD5(RANDOM()::TEXT || CLOCK_TIMESTAMP()::TEXT))) % 123456789) rn
from s1.depat co
join s2.person p
on co.subject_id = p.person_id

我知道row_number函数是用来生成行号的,但看起来Postgresql并不支持ChecksumMD5这样的所有函数。

我得到以下错误

ERROR:  function checksum(text) does not exist
LINE 2:    row_number() over (order by ABS(CHECKSUM(MD5(RANDOM()::TE...
^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Character: 54

我如何避免上述错误并在postgresql中实现这一点?

在Postgres中,您将使用random():

select co.*, p.*,
row_number() over (order by random()) as rn
from s1.depat co join
s2.person p
on co.subject_id = p.person_id;

checksum()的使用表明查询生成器认为您已连接到SQL Server。可能有一个参数可以让它知道生成有效的Postgres代码。

最新更新