Вставка COALESCE (NULL, по умолчанию)
У меня есть таблицы, которые используют UUID. Я хочу иметь возможность вставить новую строку с UUID или без него, так как иногда клиент будет генерировать UUID, а иногда - нет.
Каждая таблица имеет это в своей основе:
CREATE TABLE IF NOT EXISTS person (
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
);
Я пытаюсь использовать функцию для вставки строк. Я хотел бы иметь возможность передать идентификатор NULL и получить значение по умолчанию (сгенерированный UUID). У меня есть что-то вроде этого:
CREATE OR REPLACE FUNCTION create_person(
id UUID
) RETURNS BOOLEAN LANGUAGE plpgsql SECURITY DEFINER AS $
BEGIN
INSERT INTO person( id )
VALUES (
COALESCE(id,default)
);
RETURN FOUND;
END;
$;
Я пробовал это:
INSERT INTO person ( id ) VALUES (
COALESCE(id, default),
);
и это:
INSERT INTO person ( id ) VALUES (
CASE WHEN id IS NULL THEN default ELSE id END
);
Это работает, но повторяет код gen_random_uuid ():
INSERT INTO person ( id ) VALUES (
COALESCE(id, gen_random_uuid()),
);
Точно так же это работает, но имеет те же проблемы:
INSERT INTO person ( id ) VALUES (
CASE WHEN id IS NULL THEN gen_random_uuid() ELSE id END
);
Есть ли способ сделать это, где мне не нужно повторятьgen_random_uuid()
код?
Будет ли это лучше сделать сplpgsql
?