校验和MD5在postgresql中生成行号

Checksum MD5 to generate row number in postgresql

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

当我们尝试 运行 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 服务器。某处可能有一个参数让它知道生成有效的 Postgres 代码。