postgresql 无法在选择SQL中调用红移光谱过程

z5btuh9x  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(2)|浏览(115)

我目前正在迁移一个PostgreSQL过程,以便在Redshift Spectrum Serverless中工作。我能够有一个工作程序,工作作为预期的红移。然而,它最初是在SQL选择语句中使用的,我目前无法从Redshift中做同样的事情。你知道我该怎么做吗?
原始PostgreSQL过程:

CREATE OR REPLACE FUNCTION sp_test()
    RETURNS date AS
$$
SELECT test_date FROM test_table
$$ LANGUAGE sql;

原始用途:

insert into random_table
select sp_test()

红移的新方法

create or replace procedure sp_test(out v_test_date date)
as $$
BEGIN
    select test_date into v_test_date from test_table;
    end;
$$ language plpgsql;

已尝试新SQL,但无法正常工作:

insert into random_table
select sp_test()

ERROR: sp_test() is a procedure
Hint: To call a procedure, use CALL.

PS:我知道使用CALL sp_test()可以工作,但我想使用它与一个插入,这是不工作。所以任何帮助wrt如何使这项工作将是非常感激的。

fhity93d

fhity93d1#

谢谢@mp24的建议。我让我的代码工作如下:

create or replace procedure sp_test(inout v_test_date date) --have to make this INOUT to work with embedded SP
as $$
BEGIN
    select test_date into v_test_date from public_internal.test_table;
end;
$$ language plpgsql;

create or replace procedure sp_insert_in_random()
as $$
    declare
        v_test_date date;
BEGIN
    v_test_date = '20230101'; -- providing a dummy date to work with INOUT parameter
    call sp_test(v_test_date);
    insert into public_internal.random_table select v_test_date;
end;
$$ language plpgsql;

call sp_insert_in_random();

发布此消息后,我可以看到数据按预期插入到表中。

zaqlnxep

zaqlnxep2#

您需要将对存储过程的调用嵌入到另一个存储过程中,并在那里调用insert语句。不幸的是,Redshift在存储过程和(甚至更多)存储函数方面确实受到限制。

相关问题