Оператор jsonb пакета Golang SQL

В пакете sql для postgresql jsonb, как я могу использовать оператор @>, например, со строковым запросом

  • WHERE data @> '{"stringdata": $1}' or
  • WHERE data @> '{"stringdata": "$1"}' не работает

Альтернативой является data->>'string_data' = $1, который я не предпочитаю для нескольких операторов.

Ошибка:

    "Message": "invalid input syntax for type json",
    "Detail": "Token \"$\" is invalid.”,
    "Where": "JSON data, line 1: $...",
    "Routine": "report_invalid_token"

person Thellimist    schedule 18.09.2015    source источник
comment
Вы используете умные кавычки, которые не сработают. При написании запросов используйте обычный текстовый редактор, а не текстовый процессор. Также покажите точный текст сообщения об ошибке.   -  person Craig Ringer    schedule 19.09.2015
comment
@CraigRinger добавил сообщение об ошибке. Не могли бы вы показать пример обычного текстового редактора? А почему умные кавычки не работают?   -  person Thellimist    schedule 19.09.2015
comment
По-видимому, это был артефакт редактирования вопроса, а исходный текст имеет базовые двойные кавычки ASCII (").   -  person Craig Ringer    schedule 19.09.2015


Ответы (1)


Насколько я знаю, вы не можете интерполировать внутри строк, но вы можете создать объект JSON с помощью json_build_object или json_object:

SELECT data FROM test
WHERE data @> json_build_object('stringdata', $1::text, 'foo', $2::int)::jsonb;

Это в основном эквивалент

SELECT data FROM test
WHERE data @> '{"stringdata":"$1","foo":$2}';
person Ainar-G    schedule 19.09.2015
comment
Не могли бы вы предоставить пример объекта json с несколькими ключами? - person Thellimist; 19.09.2015