Postgresql

如何使用對像數組參數化 Postgres JSON 包含查詢?

  • September 8, 2022

我有一個 JSON 包含查詢,如下所示。該查詢在數組中查找匹配的對象。這行得通。

Name 和 DataType 的值將被傳遞給一個 .Net 函式,並在 NpgSql 中建構查詢。我想參數化值(城市,字元串)以避免 SQL 注入。如何做到這一點?

根據這個 GitHub 問題,我嘗試使用 jsonb_build_object 建構 json,但我需要建構對像數組。我被告知不能在 WHERE 中使用聚合函式,所以這不起作用。

那麼,我可以建構一個對像數組來添加參數值,還是有更好的方法來避免這個查詢中的 SQL 注入?

我們目前正在使用 Postgres 10.18,因此理想情況下該解決方案應該可以使用。但是,我們將很快升級到 14,因此對於 14 的更好解決方案也將引起人們的興趣。

SELECT name FROM (SELECT name, fields -> 'dimensions' as dimensions
from data) x
WHERE dimensions @> '[{"Name": "city"}, {"DataType": "string"}]'

您可以在不使用聚合的情況下建構 JSON 數組和對象,只要它們的大小是固定的:

WHERE dimensions @> jsonb_build_array(jsonb_build_object(?,?),jsonb_build_object(?,?));

但也許你應該使用一些 C++ 庫來建構 JSON 並將它傳遞給 PostgreSQL。如果您不想在客戶端處理 JSON,那麼您可能也不應該在數據庫端使用它。

引用自:https://dba.stackexchange.com/questions/316613