Вам нужны кавычки, которых избегают, вокруг параметра:
execute 'UPDATE ' || tblname || ' SET ID = NULL WHERE surrogate = ''' || surrogate || '''';
предложение mu более чистое и более прочное:
execute 'UPDATE ' || tblname || ' SET ID = NULL WHERE surrogate = ' || quote_literal(surrogate);
Если это - более новая версия postgresql (9.0 +, я предполагаю), можно использовать формат
функция:
execute format('UPDATE %I SET ID = NULL WHERE surrogate = %L', tblname, surrogate);
%L
escapes it as a SQL literal.