我在数据库中创建了一个函数(取自 wiki.postgresql.org),用于获取近似行数。
CREATE FUNCTION ais_history.count_estimate(query text)
RETURNS integer
LANGUAGE plpgsql AS
$func$
DECLARE
rec record;
rows integer;
BEGIN
FOR rec IN EXECUTE 'EXPLAIN ' || query LOOP
rows := substring(rec."QUERY PLAN" FROM ' rows=([[:digit:]]+)');
EXIT WHEN rows IS NOT NULL;
END LOOP;
RETURN rows;
END
$func$;
当我使用 psql cli 中的函数时,它工作正常。
db=> SELECT count_estimate('SELECT * FROM schema.table_name');
count_estimate
----------------
4
(1 row)
但是,当我使用 SQLalchemy core 或 psycopg2 从 Python 运行它时,它会出现错误。
conn.autocommit = True
cursor = conn.cursor()
cursor.execute("SELECT count_estimate('SELECT * FROM schema.table_name');")
conn.commit()
conn.close()
错误输出
UndefinedFunction Traceback (most recent call last)
Input In [91], in <cell line: 8>()
5 conn.autocommit = True
6 cursor = conn.cursor()
----> 8 cursor.execute("SELECT count_estimate('SELECT * FROM schema.table_name');")
10 conn.commit()
11 conn.close()
UndefinedFunction: function count_estimate(unknown) does not exist
LINE 1: SELECT count_estimate('SELECT * FROM schema.table_name...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
如何运行原始 sql 来获取函数输出?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)