Ваша проблема связана не с использованием функции MD5 в операторе INSERT, а с тем, что каждое выражение в предложении VALUES должно быть
- константой, ИЛИ
- выражение, которое может быть оценено как константа во время компиляции оператора SQL
Это поведение описано на этой странице Документов о снежинках
Ваша INSERT можетпереписать следующим образом:
INSERT INTO control_table (field1, field2, field3, field4, CHECKSUM_FIELD)
SELECT $1, $2, $3, $4, MD5($5) FROM VALUES ('VALUE1', 'VALUE2', 'VALUE3', 'VALUE4', 'VALUE1VALUE2VALUE3VALUE4');
И так как кажется, что вы хотите, чтобы значение, переданное в MD5 (), было конкатенацией других 4 выражений, вы можете использовать это вместо этого:
INSERT INTO control_table (field1, field2, field3, field4, CHECKSUM_FIELD)
SELECT $1, $2, $3, $4, MD5(CONCAT($1, $2, $3, $4)) FROM VALUES ('VALUE1', 'VALUE2', 'VALUE3', 'VALUE4');
Но будьте осторожны с простым объединением выражений, подобных этому, поскольку CONCAT (1,2,3,45) даст те же результаты, что и CONCAT (12,3,4,5). Как правило, вы можете захотеть вставить разделители между выражениями, чтобы избежать таких проблем. В таком случае это может быть более подходящим подходом:
INSERT INTO control_table (field1, field2, field3, field4, CHECKSUM_FIELD)
SELECT $1, $2, $3, $4, MD5(ARRAY_TO_STRING(ARRAY_CONSTRUCT($1, $2, $3, $4),':')) FROM VALUES ('VALUE1', 'VALUE2', 'VALUE3', 'VALUE4');