pg-promise 创建函数包含带有 $ 参数的执行

pg-promise create function containing execute with $ parameter

我正尝试通过 pg-promise 运行 数据库创建脚本。 在nodeJS中执行命令的位如下:

        this.db.any(sql, [])
            .then((data: any) => {
                resolve(data);
            })
            .catch((error: any) => {
                console.log(sql);
                reject(error);
            });

函数代码可能包含直接在函数内部使用的一个或多个 $variables(这就是为什么我在上面的任何一个中传递一个空数组的原因)。 execute 语句中的参数有几种不同的类型。一个例子如下:


    CREATE OR REPLACE FUNCTION ze_function(i_a_parameter TEXT, i_a_value INTEGER, i_another_value TEXT) 
    RETURNS integer
    AS $function$
    DECLARE
        v_rows_saved integer := 0;
    BEGIN
        EXECUTE format('UPDATE %I_table
            SET
            the_field = 
            the_other_field = ', i_a_parameter)
            USING i_a_value, i_another_value;
        GET DIAGNOSTICS v_rows_saved = ROW_COUNT;
        RETURN v_rows_saved;
    END;
    $function$
    LANGUAGE plpgsql;

它生成的错误如下: RangeError: Variable out of range. Parameters array length: 0

我试图找到逃避美元符号的方法,但到目前为止没有成功。 是完全不行,还是有一些我还不知道的方法?

pg-promise中,为了像那样执行pre-formattedSQL,您需要确保查询方法不会尝试格式化它。

这意味着要么传入 undefined 作为值,要么什么都不传入:

this.db.any(sql)

传入 [] 导致方法尝试使用 , , ... 格式格式化 SQL,因此您在找到那些错误时遇到错误。