sql >> Databáze >  >> RDS >> PostgreSQL

Jak určit typy sloupců pro CTE (Common Table Expressions) v PostgreSQL?

Myslím, že byste ve vašem případě museli specifikovat typy uvnitř výrazu VALUES:

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

Potřebujete pouze typy na první sadě hodnot, PostgreSQL dokáže odvodit zbytek.

Předpokládejme například, že máme dvě funkce:

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;

Potom

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

vám dá dva int upozornění, zatímco

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

by vám dalo dva bigint upozornění.



  1. Provádění více dotazů v codeigniter, které nelze provést jeden po druhém

  2. Vzdálený přístup k serveru MySQL přes tunel SSH

  3. mysql2sqlite.sh Auto_Increment

  4. protokolování podrobností mysql 5.7