sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan specificeres kolonnetyper for CTE (Common Table Expressions) i PostgreSQL?

Jeg tror, ​​du skal angive typerne i VALUES-udtrykket i dit tilfælde:

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

Du behøver kun typerne på det første sæt værdier, PostgreSQL kan udlede resten.

Antag for eksempel, at vi har to funktioner:

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;

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

vil give dig to int meddelelser, hvorimod

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

ville give dig to bigint meddelelser.



  1. Begræns antallet af poster i en model, der kan have en værdi pr. bruger

  2. Sådan forhindrer du automatiske AJAX-angreb

  3. MySQL samtidighed, hvordan virker det og skal jeg håndtere det i min ansøgning

  4. Oprettelse af en DDL for en baseline for flyway