2012-02-12 8 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'] 

、私は実際にデータベース上の余分な鋳造作業を行う必要はありませんでした。上記のように変数を調整するだけで動作しました。

関連する問題