Для PostgreSQL триггер не нужен. Делается через генерируемое поле как-то так:
CREATE TABLE "table" (
field1 VARCHAR(16),
field2 INT GENERATED ALWAYS AS (
ARRAY_POSITION(ARRAY['value1', 'value2', 'value3', 'value4'], field1::TEXT)
) STORED
);
Или, если значения идут не по порядку, то
CREATE TABLE "table" (
field1 VARCHAR(16),
field2 INT GENERATED ALWAYS AS (
(ARRAY[0, 11, 22, 44])[ARRAY_POSITION(ARRAY['value1', 'value2', 'value3', 'value4'], field1::TEXT)]
) STORED
);
В самом запущенном случае можно так:
CREATE TABLE "table" (
field1 VARCHAR(16),
field2 INT GENERATED ALWAYS AS (
CASE field1
WHEN 'value1' THEN 0
WHEN 'value2' THEN 11
WHEN 'value3' THEN 22
ELSE 44
END
) STORED
);