我明白,在Postgres pure中,您可以将整数数组传递给一个函数,但.NET数据提供者Npgsql中不支持该数组。
我目前有一个DbCommand,我将一个调用加载到一个存储的proc中,添加一个参数并执行标量来获取一个Id来填充一个对象。
现在需要以n个整数作为参数。这些用于创建将新创建的记录链接到整数参数的子记录。
理想情况下,我宁可不必在每个整数的DbCommand上进行多个ExecuteNonQuery调用,所以我要构建一个csv字符串作为在数据库端分割的参数。
我通常生活在LINQ 2 sql中,享受Db抽象,通过手工数据访问来处理这个项目,人们通常会将这些参数传递给postgres?
见:
http://www.postgresql.org/docs/9.1/static/arrays.html
如果您的非本机驱动程序仍然不允许您传递数组,那么您可以:
传递数组的字符串表示(您的存储过程可以解析为数组 – 请参阅string_to_array
)
CREATE FUNCTION my_method(TEXT) RETURNS VOID AS $$ DECLARE ids INT[]; BEGIN ids = string_to_array($1,','); ... END $$ LANGUAGE plpgsql;
然后
SELECT my_method(:1)
与:1 =’1,2,3,4′
>依靠Postgres本身将一个字符串转换为一个数组
CREATE FUNCTION my_method(INT[]) RETURNS VOID AS $$ ... END $$ LANGUAGE plpgsql;
然后
SELECT my_method('{1,4}')
>选择不使用绑定变量并发出明确的命令字符串,并将所有参数拼写出来(请确保验证或转义来自外部的所有参数,以避免sql注入攻击。)
CREATE FUNCTION my_method(INT[]) RETURNS VOID AS $$ ... END $$ LANGUAGE plpgsql;
然后
SELECT my_method(ARRAY [1,4])