PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment spécifier les types de colonnes pour CTE (Common Table Expressions) dans PostgreSQL ?

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.