SET search_path TO "prepared statements"; -- test function evaluation with parameters in an expression PREPARE prepared_function_evaluation_insert(int) AS INSERT INTO prepare_func_table (key, value1) VALUES ($1+1, 0*random()); -- execute 7 times to trigger prepared statement usage EXECUTE prepared_function_evaluation_insert(1); EXECUTE prepared_function_evaluation_insert(2); EXECUTE prepared_function_evaluation_insert(3); EXECUTE prepared_function_evaluation_insert(4); EXECUTE prepared_function_evaluation_insert(5); EXECUTE prepared_function_evaluation_insert(6); EXECUTE prepared_function_evaluation_insert(7); SELECT key, value1 FROM prepare_func_table ORDER BY key, value1; key | value1 --------------------------------------------------------------------- 2 | 0 3 | 0 4 | 0 5 | 0 6 | 0 7 | 0 8 | 0 (7 rows) TRUNCATE prepare_func_table; -- make it a bit harder: parameter wrapped in a function call PREPARE wrapped_parameter_evaluation(text,text[]) AS INSERT INTO prepare_func_table (key,value2) VALUES ($1,array_to_string($2,'')); EXECUTE wrapped_parameter_evaluation('key', ARRAY['value']); EXECUTE wrapped_parameter_evaluation('key', ARRAY['value']); EXECUTE wrapped_parameter_evaluation('key', ARRAY['value']); EXECUTE wrapped_parameter_evaluation('key', ARRAY['value']); EXECUTE wrapped_parameter_evaluation('key', ARRAY['value']); EXECUTE wrapped_parameter_evaluation('key', ARRAY['value']); EXECUTE wrapped_parameter_evaluation('key', ARRAY['value']); SELECT key, value2 FROM prepare_func_table ORDER BY key, value2; key | value2 --------------------------------------------------------------------- key | value key | value key | value key | value key | value key | value key | value (7 rows)