HASHBYTES ('MD5', x) в MSSQL является эквивалентом MD5 (x) в Postgres. Обе функции принимают только одно значение в качестве входных данных.
На самом деле вы спрашиваете, как реплицировать поведение :: text, которое преобразует всю таблицу в массив текстовых значений. Одна из проблем заключается в том, что вывод преобразования строки в виде текста в Postgres очень специфичен для Postgres. Правила форматирования может быть трудно воспроизвести точно на другой платформе, и любые изменения в цитировании, например, приведут к другому хешу. Лучшим вариантом может быть преобразование ваших данных в более стандартный формат, такой как JSON, и последующее хеширование этого результата. Например:
MS SQL:
WITH p (ky,val) AS
(SELECT 1,'foo' UNION ALL SELECT 2,'bar')
SELECT j, HASHBYTES('MD5',CAST(j AS VARCHAR(MAX))) AS md5
FROM p AS p1
CROSS APPLY (SELECT * FROM p WHERE p.ky=p1.ky FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER) AS t(j);
{"ky":1,"val":"foo"} 84C700DA7093081E7A800D1790BE09CE
{"ky":2,"val":"bar"} A364B3F954F1A875540FE361CABFFD2A
PostgreSQL:
WITH p (ky,val) AS
(SELECT 1,'foo' UNION ALL SELECT 2,'bar'),
p1 AS
(SELECT row_to_json(p) as j
FROM p)
SELECT j,md5(j::text) as md5 from p1;
{"ky":1,"val":"foo"} 84c700da7093081e7a800d1790be09ce
{"ky":2,"val":"bar"} a364b3f954f1a875540fe361cabffd2a