У меня есть эта функция pl / pgsql:
CREATE OR REPLACE FUNCTION get_result(id integer) RETURNS SETOF my_table AS $
DECLARE
result_set my_table%ROWTYPE;
BEGIN
IF id=0 THEN
SELECT INTO result_set my_table_id, my_table_value FROM my_table;
ELSE
SELECT INTO result_set my_table_id, my_table_value FROM my_table WHERE my_table_id=id;
END IF;
RETURN;
END;
$ LANGUAGE plpgsql;
Я пытаюсь использовать это с библиотекой Python's psycopg2. Вот код Python:
import psycopg2 as pg
conn = pg.connect(host='myhost', database='mydatabase', user='user', password='passwd')
cur = conn.cursor()
return cur.execute("SELECT * FROM get_result(0);") # returns NoneType
Однако, если я просто делаю обычный запрос, я получаю правильный набор строк назад:
...
return cur.execute("SELECT my_table_id, my_table_value FROM mytable;") # returns iterable result set
Очевидно, что с моей функцией pl / pgsql что-то не так, но я не могу понять, что это правильно.
Я также пытался использовать
RETURN result_set;
вместо
RETURN
в 10-й строке моей функции plpgsql, но получил ошибку от postgres.