sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo especificar tipos de columna para CTE (expresiones de tabla comunes) en PostgreSQL?

Creo que tendrías que especificar los tipos dentro de la expresión VALUES en tu caso:

WITH t (f0, f1) as (
  values 
     (1::bigint, 10::bigint),
     (2, 20)
)...

Solo necesita los tipos en el primer conjunto de valores, PostgreSQL puede inferir el resto.

Por ejemplo, supongamos que tenemos dos funciones:

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;

Entonces

WITH t (f0, f1) as (
    values
        (1, 10),
        (2, 20)
)
select f(f0, f1) from t;

te dará dos int avisos mientras que

WITH t (f0, f1) as (
    values
        (1::bigint, 10::bigint),
        (2, 20)
)
select f(f0, f1) from t;

te daría dos bigint avisos.