Вставить оператор в базу данных функции greenpyp plpython - PullRequest
0 голосов
/ 29 июня 2018

Я создаю функцию plpython в greenplum. для plpy.prepare("INSERT INTO ....") не удается с ошибкой:
ERROR: plpy.SPIError: function cannot execute on segment because it issues a non-SELECT statement (plpython.c:4656) (seg4 slice1 den-gp5-seg03:40000 pid=119213) (cdbdisp.c:1322)
Разрешены ли вставки в функциях plpython? Я не вижу большой помощи со вставками в документации. greenplum plpython doc

Ответы [ 2 ]

0 голосов
/ 18 августа 2018

Вы можете использовать plpy.execute("INSERT INTO ....") вместо plpy.prepare("INSERT INTO ....").

plpy.prepare() используется для подготовленного оператора . Если вы хотите его использовать, обратитесь к следующему примеру.

postgres=# create table your_table (yourstr char(2), yournum int);
CREATE TABLE
postgres=# do $$
postgres$# plan = plpy.prepare("insert into your_table values($1,$2)", ["text", "int"]);
postgres$# plpy.execute(plan, ["Gx", 7]);
postgres$# $$ language plpython3u;
DO
postgres=# select * from your_table;
 yourstr | yournum 
---------+---------
 Gx      |       7
(1 row)
postgres=# 

Здесь доступны pypl функции ( Документ Greenplum 5.10 здесь )

0 голосов
/ 30 июня 2018

Я не уверен, будет ли работать здесь insert; поместите оператор вставки в функцию gp и запустите «select my_func (arg1, arg2)» из функции plpython

...