【问题标题】:Passing parameter to SQL Function in plpgsql在plpgsql中将参数传递给SQL函数
【发布时间】:2021-03-08 10:18:18
【问题描述】:

我已经编写了以下函数,它可以在 Postgres 12.5 中运行:

CREATE OR REPLACE FUNCTION export_to_s3()
        RETURNS TRIGGER
AS $export_to_s3$
BEGIN
        PERFORM aws_s3.query_export_to_s3(
                'select * from test.allowed_object_status',
                aws_commons.create_s3_uri(
                        'test-db-dumps',
                        'allowed_object_status.csv',
                        'eu-west-2'),
                options :='format csv, delimiter $$,$$'
        );
        RETURN NEW;
END;
$export_to_s3$ LANGUAGE plpgsql;

现在我想将test.allowed_object_statusallowed_object_status.csv 参数传递给export_to_s3()。

我尝试了一些方法,但都失败了,所以任何帮助都会很棒。
我的问题的第二部分,不太重要的是函数可能不返回任何内容/无效。我将此函数设为触发器,但这只是因为我不知道如何声明一个执行后不返回任何内容的函数

解决方案
感谢下面@404 的 cmets,这是我提出的解决方案。

CREATE OR REPLACE FUNCTION export_to_s3(query_cmd text, bucket_prefix text)
RETURNS VOID
AS $export_to_s3$
BEGIN
PERFORM
    aws_s3.query_export_to_s3(
        query_cmd,
        aws_commons.create_s3_uri(
            'test-db-dumps',
            bucket_prefix,
            'eu-west-2'),
        options :='format csv, delimiter $$,$$'
    );
END;
$export_to_s3$ LANGUAGE plpgsql;

我确信有更好的方法来做这件事,但对 plpgsql 来说很新

【问题讨论】:

  • 要明确一点,您实际上是在寻找触发功能还是只是常规功能?如果它需要是触发器,那么也许您可以通过在触发器函数读取的某处设置环境变量来获取这些值......如果它不需要是触发器函数,那么它更容易,只是一个标准函数参数。 “函数是否可以不返回任何内容”-“函数”,当然可以,将其定义为RETURNS VOID;但不清楚是否需要触发函数。
  • 嘿@404,为糟糕的写作和混乱道歉。是的,它应该是一个什么都不返回的函数,所以我会使用你建议的RETURNS VOID。我将如何将参数传递给它?
  • 好吧,如果它只是一个常规函数,那么请参阅postgresql.org/docs/current/sql-createfunction.html了解如何使用参数等。触发函数有点不同,常规函数不能用作触发器。跨度>
  • @404 这足以让我想出一个解决方案......如果你愿意提供它作为答案,我很乐意接受它。谢谢

标签: sql postgresql plpgsql


【解决方案1】:

您可以将参数传递给触发器函数,但这与您想象的不同。

  • 不带参数地声明触发函数

  • CREATE TRIGGER 语句中,您将字符串文字指定为函数参数。

  • 这些参数可以通过TG_ARGV[]在PL/pgSQL函数体中访问,参数计数在TG_NARGS中。

详情请见the documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 2013-01-27
    • 2019-03-30
    • 1970-01-01
    相关资源
    最近更新 更多