含COPY语句的PostgreSQL存储过程调用后持续运行问题求助
存储过程执行卡死问题排查
我正在编写一个用于刷新数据库两张表的存储过程:detail_report表带有触发器,会将插入的行同步到summary_report表。这是课程作业,要求复用之前将数据导入第一张表的语句。相关查询单独执行均正常,但调用存储过程时会一直运行,肯定存在疏漏。
最初的COPY版本代码
CREATE OR REPLACE PROCEDURE refresh_tables() LANGUAGE plpgsql AS $$ BEGIN DELETE FROM detail_report; DELETE FROM summary_report; COPY (SELECT title, rating, convert_to_money(amount) AS rental_amount, name AS genre FROM film f INNER JOIN inventory i ON f.film_id = i.film_id INNER JOIN rental r ON i.inventory_id = r.inventory_id INNER JOIN payment p ON p.rental_id = r.rental_id INNER JOIN film_category f_c ON f_c.film_id = f.film_id INNER JOIN category c ON c.category_id = f_c.category_id ORDER BY title) TO 'D:\CodingAndSoftware.detail_report.csv' WITH CSV HEADER; COPY detail_report FROM 'D:\CodingAndSoftware.detail_report.csv' DELIMITER ',' CSV HEADER; RETURN; END; $$;
convert_to_money是他人协助添加的函数,但我认为这不是问题根源——我尝试移除该函数仅保留列名,问题依旧存在,因此怀疑和COPY命令有关。
改用INSERT的版本代码
之后我移除了COPY命令,改用课程资料中讲师推荐的INSERT INTO ... SELECT方式,但调用存储过程时仍会一直运行。问题应该很简单,但我暂时无法发现。
CREATE OR REPLACE PROCEDURE refresh_tables() LANGUAGE plpgsql AS $$ BEGIN DELETE FROM detail_report; DELETE FROM summary_report; INSERT INTO detail_report SELECT title, rating, convert_to_money(amount) AS rental_amount, name AS genre FROM film f INNER JOIN inventory i ON f.film_id = i.film_id INNER JOIN rental r ON i.inventory_id = r.inventory_id INNER JOIN payment p ON p.rental_id = r.rental_id INNER JOIN film_category f_c ON f_c.film_id = f.film_id INNER JOIN category c ON c.category_id = f_c.category_id ORDER BY title; RETURN; END; $$;
内容的提问来源于stack exchange,提问作者Alexandra Williams
相关产品推荐
相关产品推荐

