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 ответов

7 просмотров

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

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

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

type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
А чем вам питонисты не угодили?😂
.
79
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
А дин типизация это хорошо или плохо?
Alexey
12
Исходники плюс документация? Вы гоните)) демок хватит всем
zamtmn
11
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
77
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Hello. Could you please help me with finding all coordinates within a radius using a spatial index, given that I have a table with coordinates? SET @lng = 37.57925; SET @lat ...
Rinchin G
7
Карта сайта