我需要能够针对根据各种输入参数的值而变化的 Redshift 数据库编写和执行复杂的 SQL
SELECT
语句。这里的潜在驱动力是我有许多使用不同编程语言的不同消费者都执行相似但不相同的 SQL 查询,我不想创建一堆客户端库来编写 SQL 语句或有几十个类似的 VIEW
s 在我的数据库中——我真正想要的是客户端能够只调用数据库服务器上的一个函数,传递一些输入参数,并让它为组合的 SQL 查询返回一个结果表。
如果您使用游标,
INSERT
/ UPDATE
语句和 SELECT
语句似乎是可能的 - 我不想这样做,因为我的查询将返回数百万行以供 Pandas 数据框使用。有什么办法可以实现我在这里的目标,或者它是否超出了 Redshift 的能力?一个简化的例子看起来像下面的(非工作)代码:
CREATE PROCEDURE my_procedure(IN region_id VARCHAR) AS $$
BEGIN
RETURN EXECUTE 'SELECT * FROM my_table WHERE region_id = ''' || region_id || ''';';
END;
$$ LANGUAGE plpgsql;
注意:我还应该提到,我知道可以在存储过程中创建一个临时表并将其名称作为
OUT
参数返回。我不想使用这种方法——消费在使用时需要高效和简单,所以我不希望消费者需要调用过程、捕获输出然后调用单独的 SQL 查询。