2012-02-12 3 views
0

사용자 정의 유형으로 PlPython에 저장 프로 시저를 작성했습니다. Plpython은 사용자 정의 유형을 지원하지 않으므로 사용자 정의 유형에 대한 CAST를 작성했습니다. 여전히 plpy.prepare를 호출하면 오류가 계속 발생합니다. 내가 잘못 CAST를 사용하고 있는지 확실하지 않다 - 예제 코드는 다음과 같습니다 :PostgreSQL의 PLPython 및 CAST 복합 데이터 유형

#User Defined Type - person 
CREATE TYPE person As(name character varying(50), state character(2)); 

#Table definition using 'person' 
CREATE TABLE manager As(id integer, mgr person) 

#CAST for person 
CREATE OR REPLACE FUNCTION person_to_text(person) RETURNS text AS 'SELECT ROW($1.*)::text' LANGUAGE SQL; 
CREATE CAST (cv_person as text) WITH FUNCTION person_to_text(person) 

#PlPython procedure 

CREATE OR REPLACE FUNCTION load_portfolio_assoc (name text, state text) RETURNS integer AS $$ 

    mgr_str ="('"+name+"','"+state+"')" 

    insert_qry = 'Insert into manager (mgr) values($1)' 
    value_type = ['text'] 

    qry = plpy.prepare(insert_qry,value_type) 
    rv = plpy.execute(qry, [mgr_str]) 

    return 1 


    $$ LANGUAGE plpython3u; 

답변

2

업데이트 :

Plpython이 지정된 사용자 정의 유형을 다음과 같이 기록 된 쿼리를 받아 들인다 이 형식 $ (1) ::에 변수가 마지막에 예외가 지원되지 않는 복합 형을 던지는

insert_qry = 'Insert into manager (mgr) values($1::person)' 
value_type = ['text'] 

중지, 난 정말 데이터베이스에 여분의 주조 작업을 수행 할 필요가 없습니다 않았다. 위와 같이 변수를 조정하면됩니다.