我正在尝试执行在错误报告中发现的以下查询。
当我们尝试运行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并不支持Checksum
和MD5
这样的所有函数。
我得到以下错误
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代码。