172 похожих чатов

Всем, привет. Есть таблица ALLCHANNELS со столбцом tariffs, в котором

данные JSON (со своими полями естественно, например "provider": "TTK", в другой записи например "provider":"ATT", они могут повторяться....).
Мне надо подсчитать, количество строк, в которых в JSON-е определенный провайдер..например "TTK".
Был предложен запрос вида -
SELECT COUNT(*) FROM ALLCHANNELS WHERE (tarriffs-»'provider')::jsonb ? 'TTK';
она работает, в PgAdmin даже без приведения типа
SELECT COUNT(*) FROM ALLCHANNELS WHERE (tarriffs-»'provider') ? 'TTK';
(выводит, количество строк совпадений), но не работает в интсрументе для тестирования API (SOAPUI если интересно), где я делаю запрос такой JDBC Request-ом.
Причем запрос SELECT COUNT(*) FROM ALLCHANNELS работает.

Вопрос: как можно заменить фильтр WHERE (tarriffs-»'provider') ? 'TTK'; ?

п.с. SOAPUI приложение написанное на Java, возможно ему пробелы не нравятся...

21 ответов

15 просмотров

SELECT COUNT(*) FROM ALLCHANNELS WHERE (tarriffs-»'provider')::text = 'TTK';

советую упаковывать тексты запросов в блочные/строчные кодблоки, во избежание автоматических преобразований текста

Pavel-Ten Автор вопроса
Егор miruzzy
SELECT COUNT(*) FROM ALLCHANNELS WHERE (tarriffs-»...

почему то выдает вот такое(

И дажэ понятно, почему ругается: ? в JDBC -- это placeholder для параметра, его нужно экранировать чтобы он передался в текст запроса как ?.

Pavel Ten
а как?

Почитайте документацыю на JDBC -- там должно быть.

Pavel Ten
а как?

В операторах, которые используют символ ?, этот символ необходимо задваивать.

Pavel Ten
can you show me please?)

"select my_json ?? 'mykey' from ..."

Pavel-Ten Автор вопроса
Pavel Ten
api tool :(

А какая версия используемого jdbc-драйвера?

Radist
А какая версия используемого jdbc-драйвера?

Суть такая: поддержка ?? появилась в драйвере версии 9.4 (очень давно). Либо у вас там реально древний драйвер (и он вряд ли работает с поддерживаемыми версиями postgresql), либо есть какой-то код, который до вызова prepareStatement заменяет ?? на ?

Pavel-Ten Автор вопроса
Pavel Ten
последняя - самая свежая

Ни "последняя" ни "самая свежая" -- это не версии.

Pavel Ten
последняя - самая свежая

В любом случае, у вас единственный путь - отловить запрос, который передаётся в prepareStatement. Далее уже разбираться, что не так. Кстати, проверьте, не встречается ли в тексте запроса $1 (это синтаксис для постановочных параметров для самого PostgreSQL). Могу лишь сказать, что и на 42.0.x/42.1.x, и на 42.2.10 (±2 минорные версии) у меня без проблем отрабатывали и запросы с параметрами (биндинг через ?), и запросы с операторами ?, ?& и т.п. (естественно, с удвоением символа ?).

Pavel-Ten Автор вопроса
Pavel Ten
а где? в какой системе? клиенте?

в java-приложении, которое, собственно, работает с БД через jdbc-драйвер, т.е., надо посмотреть, что за запрос передаётся в драйвер.

Pavel-Ten Автор вопроса
Radist
в java-приложении, которое, собственно, работает с...

то есть прям в исходном коде? у меня то тул ( возможно он косячит вендору писать? readyapi

Pavel Ten
то есть прям в исходном коде? у меня то тул ( во...

а у этой тулзы нет возможности настройки логирования? В любом случае, можно попытаться поиграться уровнем логгирования jdbc-драйвера (там прямо в строке подключения можно настроить), авось там запрос где-то выведится полностью. см. https://jdbc.postgresql.org/documentation/head/logging.html

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта