SQL/PostgreSQL - 在 QUERY 中观察到的错误未被存储过程中的 "EXCEPTION" block 捕获

标签 sql postgresql stored-procedures

我正在尝试创建一个用于 PostgreSQL DBMS 的存储过程。

此存储过程的目的是删除所有存在以下问题的记录...

查询:

my_database=# SELECT file INTO my_file_now FROM public.my_datatable WHERE my_id='2fdf5297-8d4a-38bc-bb26-b8a4b7ba47ec';
ERROR:  missing chunk number 0 for toast value 3483039 in pg_toast_3473493

基于上述行为,我创建了以下存储过程:

存储过程:

DO $f$
DECLARE
    my_file_now BYTEA;
    my_id_now UUID;
BEGIN
FOR my_id_now IN SELECT my_id FROM public.my_datatable LOOP
    BEGIN
        SELECT file
            INTO my_file_now
            FROM public.my_datatable WHERE my_id=my_id_now;
        EXCEPTION
            WHEN OTHERS THEN
            RAISE NOTICE 'CORRUPTED MY_ID - % ', my_id_now;
            DELETE FROM public.my_datatable WHERE my_id=my_id_now;
    END;
END LOOP;
END;
$f$;

问题:为什么查询中观察到的错误没有被存储过程中的“EXCEPTION” block 捕获?

谢谢! =D

最佳答案

我认为错误异常 block 捕获。

您观察到的错误来自异常处理程序中的 DELETE 语句。

关于SQL/PostgreSQL - 在 QUERY 中观察到的错误未被存储过程中的 "EXCEPTION" block 捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59754440/

相关文章:

sql - 如何在 SQLite 中计算不同利率的复利

sql - SSIS 批量插入到单个表中

sql - 其他工作脚本中的sqlite错误

postgresql - 在 postgresql jsonb 中存储外键是一个坏主意吗?

MySQL 更新查询成功但值根本没有改变

SQL Server Not(A=B 和 C=D)与(A<> B 或 C<> D)

postgresql - 从 Heroku Bash 中创建数据库备份

ruby-on-rails - Rails 4 - 如何在开发中使用 sqlite3 并在生产中使用 PostgreSQL w/Heroku

sql - 存储过程 VS。 F#

php - 为什么我的代码中的 MYSQL 存储过程调用不起作用