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,因此您在找到那些错误时遇到错误。
我正尝试通过 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,因此您在找到那些错误时遇到错误。