Je pense que vous devriez spécifier les types à l'intérieur de l'expression VALUES dans votre cas :
WITH t (f0, f1) as (
values
(1::bigint, 10::bigint),
(2, 20)
)...
Vous n'avez besoin que des types sur le premier ensemble de valeurs, PostgreSQL peut déduire le reste.
Par exemple, supposons que nous ayons deux fonctions :
create function f(bigint, bigint) returns bigint as $$
begin
raise notice 'bigint';
return $1 * $2;
end;
$$ language plpgsql;
create function f(int, int) returns int as $$
begin
raise notice 'int';
return $1 * $2;
end;
$$ language plpgsql;
Alors
WITH t (f0, f1) as (
values
(1, 10),
(2, 20)
)
select f(f0, f1) from t;
vous donnera deux int
remarque alors que
WITH t (f0, f1) as (
values
(1::bigint, 10::bigint),
(2, 20)
)
select f(f0, f1) from t;
vous donnerait deux bigint
avis.