Составной тип данных PLPython & CAST в Postgresql - PullRequest
0 голосов
/ 12 февраля 2012

Я пишу хранимую процедуру в 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;

1 Ответ

2 голосов
/ 12 февраля 2012

Обновление:

Plpython принимает запрос, когда он написан следующим образом с определенным пользователем типом, указанным с переменной в этом формате $ 1 ::, и прекращает генерировать составной тип, не поддерживаемые исключения,

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

В конце концов, мне действительно не нужно было выполнять никаких дополнительных операций приведения к базе данных. Это сработало просто путем настройки переменной, как указано выше.

...