함수를 사용하여 Postgres 9.6에서 복합 유형으로 변환 할 때 이상한 동작이 발생합니다.Postgres Cast 복합 유형
내가 X, Y, Z 등의 복합 형 "벡터"선언- 다음과 같이 배정 밀도의 각뿐만 아니라 캐스트 :
create or replace function vector_from_text(text, out result vector) strict immutable language plpgsql as $$
declare
d double precision[];
begin
result := null;
if ($1 is null) then
return;
end if;
begin
with c1 as (
select $1::jsonb src
)
select row((src->>'x')::double precision, (src->>'y')::double precision, (src->>'z')::double precision)::vector
**into result** -- see below
from c1;
exception
when others then
d := translate($1, '()', '{}')::double precision[];
result := row(d[1], d[2], d[3])::vector;
end;
end$$
;
:
create type vector as(
x double precision,
y double precision,
z double precision
);
create cast (text as vector)
with function vector_from_text(text) as implicit;
기능 vector_from_text은 다음과 같습니다
이 함수는 null에서 null을 반환하거나 '{ "x": 0, "y": 0, "z": 0}'과 같은 json-string 또는 ' (0,0,0) '이다.
문제점 :
를 들어 JSON과 같은 입력 기능은 선택 문이 결과에 선 을 포함하는 즉시 오류를
invalid input syntax for type double precision: "(0,0,0)"
를 반환합니다. 이 줄을 제거하거나 출력 변수를 으로 변경하면 함수가 예상대로 작동합니다.
벡터 벡터에 이미 입력 된 값을 벡터에 할당 할 수없는 이유는 무엇입니까? 그것을 얻지 마십시오!