PostgreSQL 相当于 SQL 服务器的 TVP
PostgreSQL equivalent to SQL Server's TVP
SQL 服务器有 Table 个值参数,允许您将值数组作为参数传递。
实现类似于 PostgreSQL 查询的合适方法是什么,这样我就可以做类似的事情:
select * from product where id in ()
我正在使用 Npgsql .NET 库。
在 Postgres 中,您可以通过两种方式使用 IN 运算符:
expression IN (value [, ...])
expression IN (subquery)
阅读文档:
first variant, second variant or this overview.
在 PostgreSQL 中,您可以使用数组而不是 ID 列表,例如:
... where id = any('{1, 2, 3}'::int[])
或
... where id = any(array[1, 2, 3])
这意味着 id
是数组的一项。
Read more about arrays operators and functions.
要从第三方语言将数组作为参数传递,您至少可以使用第一个变体:
... where id = any( ::int[])
其中 $1 是一个字符串参数,类似于 {1, 2, 3}
。请注意 </code> 和 <code>::int[]
之间的 space - 某些客户可能需要它。
不确定 C# 是否直接支持数组参数。
这是一个使用 Dapper 和 Npgsql 在 C# 中插入的示例 - 它将 1、2、3 插入临时 table 并按降序选择它们,因此它将在控制台打印 3 2 1 .这里的技巧是 Postgres unnest()
函数,它将数组扩展为一组行:
var results = await conn.QueryAsync<int>(@"
CREATE TEMPORARY TABLE DapperNpgsqlArrayParameterDemo (id int not null primary key);
INSERT INTO DapperNpgsqlArrayParameterDemo (id) SELECT unnest(@numbers);
SELECT id from DapperNpgsqlArrayParameterDemo order by id desc;",
new { numbers = new int[] { 1, 2, 3 } });
foreach(var item in results)
{
Console.WriteLine($"found {item}.");
}
SQL 服务器有 Table 个值参数,允许您将值数组作为参数传递。
实现类似于 PostgreSQL 查询的合适方法是什么,这样我就可以做类似的事情:
select * from product where id in ()
我正在使用 Npgsql .NET 库。
在 Postgres 中,您可以通过两种方式使用 IN 运算符:
expression IN (value [, ...])
expression IN (subquery)
阅读文档: first variant, second variant or this overview.
在 PostgreSQL 中,您可以使用数组而不是 ID 列表,例如:
... where id = any('{1, 2, 3}'::int[])
或
... where id = any(array[1, 2, 3])
这意味着 id
是数组的一项。
Read more about arrays operators and functions.
要从第三方语言将数组作为参数传递,您至少可以使用第一个变体:
... where id = any( ::int[])
其中 $1 是一个字符串参数,类似于 {1, 2, 3}
。请注意 </code> 和 <code>::int[]
之间的 space - 某些客户可能需要它。
不确定 C# 是否直接支持数组参数。
这是一个使用 Dapper 和 Npgsql 在 C# 中插入的示例 - 它将 1、2、3 插入临时 table 并按降序选择它们,因此它将在控制台打印 3 2 1 .这里的技巧是 Postgres unnest()
函数,它将数组扩展为一组行:
var results = await conn.QueryAsync<int>(@"
CREATE TEMPORARY TABLE DapperNpgsqlArrayParameterDemo (id int not null primary key);
INSERT INTO DapperNpgsqlArrayParameterDemo (id) SELECT unnest(@numbers);
SELECT id from DapperNpgsqlArrayParameterDemo order by id desc;",
new { numbers = new int[] { 1, 2, 3 } });
foreach(var item in results)
{
Console.WriteLine($"found {item}.");
}