Eu tenho uma consulta de contenção JSON como abaixo. A consulta procura objetos correspondentes dentro de matrizes. Isso funciona.
Os valores de Name e DataType serão passados para uma função .Net, e a consulta será construída em NpgSql. Quero parametrizar os valores (cidade, string) para evitar injeção de SQL. Como conseguir isso?
De acordo com este problema do GitHub , tentei construir o json usando jsonb_build_object, mas preciso construir arrays de objetos. Me disseram que funções agregadas não podem ser usadas em WHERE, então isso não funciona.
Então, posso construir uma matriz de objetos para adicionar os valores dos parâmetros ou existe uma maneira melhor de evitar a injeção de SQL nesta consulta?
No momento, estamos usando o Postgres 10.18, então, idealmente, a solução deve funcionar nisso. No entanto, em breve atualizaremos para 14, portanto, soluções melhores para 14 também seriam de interesse.
SELECT name FROM (SELECT name, fields -> 'dimensions' as dimensions
from data) x
WHERE dimensions @> '[{"Name": "city"}, {"DataType": "string"}]'
você pode criar arrays e objetos JSON sem usar agregados, desde que o tamanho de cada um seja fixo:
Mas talvez você deva usar alguma biblioteca C++ para construir o JSON e passá-lo já formado para o PostgreSQL. Se você não quiser lidar com JSON no lado do cliente, provavelmente também não deve usá-lo no lado do banco de dados.