Давайте поясню. Триггер в вашем случае вызывается перед вставкой данных. Ему автоматически передаётся переменная NEW, в которой содержатся значения, которые должны вставиться: NEW.id, NEW.guid, NEW.name.
Так вот этот триггер может просто поменять вставляемые значения. Например, в триггерной функции вы подменяете значение uuid на то, что вам нужно:
NEW.uuid = md5(random()::text || clock_timestamp()::text)::uuid;
после этого триггер должен вернуть изменённые значения NEW:
return NEW;
Для вставки в таблицу будет испрользовано то, что вернул триггер, т.е. NEW, в том числе и NEW.guid, который вы указали в триггерной функции.
Возможно, устроит более простое решение: объявить в таблице значение поля uuid по умолчанию:
CREATE TABLE public."USERS"
(
id integer,
guid uuid default md5(random()::text || clock_timestamp()::text)::uuid,
name text
)
в таком случае можно обойтись без триггеров.