PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Rails ActiveRecord:Как да използвате свързващи променливи с двойни кавички на jsonb

Не можете да поставяте заместители на параметри в низове в кавички.

Фактът, че Rails ви позволява да направите това и замества низ с единични кавички вътре в низа с единични кавички, показва, че Rails не е успял (както обикновено) да разбере правилата на SQL.

Но можете да поставите заместител на параметър в израз с други низове. Не съм редовен потребител на PostgreSQL, но предполагам, че можете да свържете низове заедно, за да образувате пълен JSON литерал:

Blog.where("upload_data @> '[ { \"name\": \"' || ? || '\"}]'", name)

Може да откриете, че прави кода ви по-ясен, ако параметризирате цялата JSON стойност. Използвайте %Q() за да избегнете необходимостта от обратна наклонена черта на буквалните двойни кавички.

Blog.where("upload_data @> ?", %Q([ { "name": "#{name}" } ]))

Или за да се уверя, че генерирам валиден JSON, бих поставил израза в синтаксиса на Ruby и след това бих конвертирал в JSON:

Blog.where("upload_data @> ?", JSON.generate( [{name: name}] ))



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pg nodejs пакетът води до „невалиден входен синтаксис за тип json“

  2. Актуализиране на активен запис Всички JSON полета

  3. Присвояване на същия идентификатор на редове с една и съща комбинация от данни

  4. TypeORM FindOperators с трансформатор

  5. Използвайте нещо като TOP с GROUP BY