我正在使用用户定义的类型在PlPython中编写存储过程。我知道Plpython不支持用户定义的类型,因此,我为用户定义的类型创建了一个CAST。我打电话给plpy.prepare时仍然会收到错误。我不确定我是否错误地使用了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;
答案 0 :(得分:2)
更新:
Plpython接受查询时,如下所示,使用此格式为$ 1 ::的变量指定的用户定义类型,并停止抛出复合类型不支持的异常,
insert_qry = 'Insert into manager (mgr) values($1::person)'
value_type = ['text']
最后,我真的没有必要对数据库进行任何额外的转换操作。它只是通过调整变量如上所述。