如何使用Postgres/NpgSQL动态查询列名

Mr *_*ubs 7 sql postgresql data-access-layer npgsql

我有一个过滤器对象来查询具有许多列的表,而不是写一个覆盖所有列的条件(允许可选的过滤),如下所示:

WHERE ((:value0 IS NULL) OR (column_name0 = :value0)) AND ((:value1 IS NULL) OR (column_name1 = :value1)) AND... etc
Run Code Online (Sandbox Code Playgroud)

对于每一列.相反,我理想情况下我希望能够将字段名称作为参数传递:

WHERE :column_name0 = :value0 AND column_name1 = :value1 AND... etc
Run Code Online (Sandbox Code Playgroud)

这是不可能的,因为在解析时需要列(类似于此处给出的答案).

你怎么克服这个? - 我真的不想在添加或删除新列时维护SQL(正如我在第一个例子中所做的那样),我认为将列名直接构造到命令字符串中会很危险因为这可能允许sql注入.

请注意,此代码位于Web服务之后.

Eel*_*lke 23

只是确保最终用户不能直接提供列名,并且在手动构建查询时应该是安全的.如果需要在运行时找出哪些列名有效,可以使用以下查询:

SELECT column_name
FROM information_schema.columns
WHERE table_schema='public' AND table_name='yourtablename'
Run Code Online (Sandbox Code Playgroud)