Я создаю функцию 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
Вставить оператор в базу данных greenplum функции plpython
Ответы (2)
Вы можете использовать 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 здесь)
person
C.C. Hsu
schedule
18.08.2018
Я не уверен, что здесь сработает вставка; поместите оператор вставки в функцию gp и запустите «выберите my_func (arg1, arg2)» из plpython func
person
Gurupreet Singh Bhatia
schedule
30.06.2018