Контрольная сумма MD5 для генерации номера строки в postgresql - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь выполнить приведенный ниже запрос, который был найден в моем отчете об ошибке.

Отчет об ошибке генерируется, когда мы пытаемся запустить пакет 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?

1 Ответ

1 голос
/ 04 марта 2020

В 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.

...