我有一个使用游标方法返回记录集的过程:
CREATE OR REPLACE PROCEDURE myschema.permissions_sp(rs_out INOUT refcursor)
LANGUAGE plpgsql
SECURITY DEFINER
AS $$
BEGIN
OPEN rs_out FOR select schema_name,schema_owner,grantee_type,grantee,p_usage,p_create,object_name,perms,p_select,p_update,p_insert,p_delete,p_truncate,p_references,p_trigger,p_rule from xxxx.myview;
END;
$$
/
GRANT EXECUTE on PROCEDURE myschema.permissions_sp(INOUT refcursor) TO xxxx_user
/
我可以使用我的管理员登录从工作台完美地调用它。
BEGIN;
CALL meta.permissions_sp('apples');
COMMIT;
结果是一个数据集,包含16个列和超过7k行
(说实话,我甚至不需要执行事务部分,只用CALL就可以正常运行)
然而,当我通过psycopg2调用它时,会发生以下情况:
cur = conn.cursor()
cur.execute("CALL meta.permissions_sp('apples');")
conn.commit()
rows = cur.fetchall()
print('rows:%s' % (rows))
输出:
> rows:[('apples',)]
我已经尝试过使用提交和不使用提交,但仍然很难理解发生了什么。目前不确定是在Python端调用的问题还是Redshift方面的问题。
非常感谢任何指导!