Tôi nghĩ rằng bạn phải chỉ định các loại bên trong biểu thức VALUES trong trường hợp của bạn:
WITH t (f0, f1) as (
values
(1::bigint, 10::bigint),
(2, 20)
)...
Bạn chỉ cần các kiểu trên tập giá trị đầu tiên, PostgreSQL có thể suy ra phần còn lại.
Ví dụ:giả sử chúng ta có hai hàm:
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;
Sau đó
WITH t (f0, f1) as (
values
(1, 10),
(2, 20)
)
select f(f0, f1) from t;
sẽ cung cấp cho bạn hai int
thông báo trong khi đó
WITH t (f0, f1) as (
values
(1::bigint, 10::bigint),
(2, 20)
)
select f(f0, f1) from t;
sẽ cung cấp cho bạn hai bigint
thông báo.