2013-03-05 3 views
2

저는 파이썬에 익숙하지 않습니다. pl/python으로 서버 프로그래밍을하려고합니다. (더 신속한 처리를 위해) 많은 리소스를 사용하기로 결정했습니다. 이 목록은 도움을 요청합니다.plpython 함수 사이에 실제 [] 인수 전달

st = "SELECT dummy(($1,ARRAY[$2])::vessel_speed)" 
pst = plpy.prepare(st, ["integer", "real[]"]) 
rv = plpy.execute(pst, [112, (1.2,3.1)]) 
:

는 나는이 방법으로 다른 PL/파이썬에서 더미 함수를 호출하는 것을 시도하고있다

CREATE TYPE vessel_speed AS (
    mmsi integer, 
    sog real[] 
); 

CREATE OR REPLACE FUNCTION dummy(c_vessel vessel_speed) 
    RETURNS real[] 
AS $$ 
    return c_vessel["sog"] 

$$ LANGUAGE plpython3u; 

vessel_speed 생성 유형을 전달하여 다른에서 PL/파이썬 함수를 호출 할 ?

ERROR: spiexceptions.FeatureNotSupported: cannot convert multidimensional array to Python list 
Estado SQL:0A000 
Detalle:PL/Python only supports one-dimensional arrays. 

누구나 어떤 알이 문제를 해결 ... 또는 방법을 알고 :

오류를 반환 ternative 솔루션? 고마워요, 후안

답변

1

내가 올바르게 이해하는 경우 튜플 및 PL/파이썬의 구성원으로 파이썬에 배열을 전달하려고하는 것은 이것을 지원하지 않습니다. 이 문제는 dummy() 함수에 존재합니다. SQL 래퍼 함수를 ​​사용하여 더미 함수에 배열 만 전달할 수 있습니다. 예 :

CREATE OR REPLACE FUNCTION dummy(c_vessel vessel_speed) 
    RETURNS real[] 
AS $$ 
     SELECT dummy(c_vessal.sog); 
$$ language sql; 

CREATE OR REPLACE FUNCTION dummy(sog real[]) returns real[] LANGUAGE plpython3u AS 
$$ 
    return sog; 
$$; 

다른 옵션은 sog를 문자로 구분 된 값으로 저장할 수 있다는 것입니다. 다음과 같음 :

CREATE TABLE c_vessal (
    id serial primary key, 
    sog text not null, 
    check(array_upper(string_to_array(sog, ':')::real[], 1) > 0) 
);