Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / postgreSQL Json / 16 сообщений из 16, страница 1 из 1
02.10.2021, 19:46
    #40101544
pavel1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
Здравствуйте, помогите с проблемой. Пытаюсь развернуть Jsonb массив в строку для сравнения с другим таким же массивом на различие элементов.
characteristic_values - Json массив.
cfg_group_char_attributes- исходная таблица
SELECT * FROM jsonb_array_elements_text(SELECT characteristic_values FROM cfg_group_char_attributes);

Postgres выдает след ошибку: ошибка синтаксиса (примерное положение: "SELECT")
...
Рейтинг: 0 / 0
03.10.2021, 02:42
    #40101573
Ы2
Ы2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
pavel1307, попробуйте переписать запрос так:
Код: sql
1.
SELECT jsonb_array_elements_text(a.b) FROM (SELECT characteristic_values AS b FROM cfg_group_char_attributes) AS a;
...
Рейтинг: 0 / 0
03.10.2021, 09:41
    #40101577
pavel1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
Ы2, не выходит
ERROR: ОШИБКА: функция jsonb_array_elements_text(character varying) не существует
LINE 559: SELECT jsonb_array_elements_text(a.b) FROM (SELECT character...
^
HINT: Функция с данными именем и типами аргументов не найдена. Возможно, вам следует добавить явные приведения типов.
Возможно еще из за вида jsob, который выглядит след образом:
"[{""id"": ""512b68da-b4e5-450c-832f-dc9f1f05e009"", ""name"": ""1 1/2\"", 300 lb, RF, 316/316L, Max +250°C / 480°F, all adaptors except H""}]"
"[{""id"": ""017b11a8-228a-4410-b820-b31088b368ee"", ""name"": ""Стандарт (кабель PUR)""}]"
"[{""id"": ""7b446092-d510-47a8-b014-850dcdfd7919""}, {""id"": ""e72a348b-a647-4869-849f-618908e70803""}]"
...
Рейтинг: 0 / 0
03.10.2021, 10:14
    #40101579
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
pavel1307,

Так функция jsonb_array_elements_text на вход jsonb требует а вы ей varchar подсовываете.
Вот оно и ругается.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
03.10.2021, 10:44
    #40101581
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
pavel1307
Возможно еще из за вида jsob, который выглядит след образом:
"[{""id"": ""512b68da-b4e5-450c-832f-dc9f1f05e009"", ""name"": ""1 1/2\"", 300 lb, RF, 316/316L, Max +250°C / 480°F, all adaptors except H""}]"
"[{""id"": ""017b11a8-228a-4410-b820-b31088b368ee"", ""name"": ""Стандарт (кабель PUR)""}]"
"[{""id"": ""7b446092-d510-47a8-b014-850dcdfd7919""}, {""id"": ""e72a348b-a647-4869-849f-618908e70803""}]"

какой же это "массив" ??

эта функция для такого "варианта"
Код: sql
1.
2.
3.
4.
5.
6.
select * from json_array_elements_text('["foo", "bar"]')

   value
-----------
 foo
 bar


ходи-четай ) - https://www.postgresql.org/docs/9.5/functions-json.html
...
Рейтинг: 0 / 0
03.10.2021, 10:51
    #40101582
pavel1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
court, это я понимаю. Но я не понимаю как мне эти данные в строку разобрать (P.S. функции для массива PosgreSQL выдают аналогичную ошибку). Мне нужно оттуда получить строку id
...
Рейтинг: 0 / 0
03.10.2021, 11:11
    #40101583
Ы2
Ы2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
pavel1307, у вас не json как тип данных и, тем более не jsonb, а простой текст (varchar), имеющий структуру json. Начните, например, с явного приведения типов (ваше_поле::jsonb), как вам база предлагает.
...
Рейтинг: 0 / 0
03.10.2021, 11:19
    #40101585
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
pavel1307
court, это я понимаю. Но я не понимаю как мне эти данные в строку разобрать (P.S. функции для массива PosgreSQL выдают аналогичную ошибку). Мне нужно оттуда получить строку id

что, вообще, в "твоей вселенной", обозначает эта фраза - "данные в строку разобрать" ?
что это ??

то, что ты выше привёл, это данные из 3-х строк таб.cfg_group_char_attributes или из одной ?
какой тип поля characteristic_values ?
...
Рейтинг: 0 / 0
03.10.2021, 11:25
    #40101586
pavel1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
court, у меня есть одна табличка cfg_group_char_attributes, в ней поле characteristic_values - набор значений характеристик, jsonb (в котором массив объектов, каждый из которых имеет хотя бы одно свойство - id значения характеристики); Из этого поля мне нужно выбрать все id, чтобы потом получить такие же строки из 2 похожей таблицы и сравнить наличие тех или иных id в обоих табличках. Но для начала меня интересует все таки как получить все id из одной таблички
...
Рейтинг: 0 / 0
03.10.2021, 11:46
    #40101587
pavel1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
Ы2, попробовал
SELECT jsonb_array_elements_text((SELECT characteristic_values FROM cfg_group_char_attributes)::jsonb) as t;
ERROR: ОШИБКА: подзапрос в выражении вернул больше одной строки
Из за его вида наверное:
"[{""id"": ""512b68da-b4e5-450c-832f-dc9f1f05e009"", ""name"": ""1 1/2\"", 300 lb, RF, 316/316L, Max +250°C / 480°F, all adaptors except H""}]"
"[{""id"": ""017b11a8-228a-4410-b820-b31088b368ee"", ""name"": ""Стандарт (кабель PUR)""}]"
"[{""id"": ""7b446092-d510-47a8-b014-850dcdfd7919""}, {""id"": ""e72a348b-a647-4869-849f-618908e70803""}]"
...
Рейтинг: 0 / 0
03.10.2021, 12:18
    #40101592
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
pavel1307
court, у меня есть одна табличка cfg_group_char_attributes, в ней поле characteristic_values - набор значений характеристик, jsonb (в котором массив объектов, каждый из которых имеет хотя бы одно свойство - id значения характеристики); Из этого поля мне нужно выбрать все id, чтобы потом получить такие же строки из 2 похожей таблицы и сравнить наличие тех или иных id в обоих табличках. Но для начала меня интересует все таки как получить все id из одной таблички
ндаа ...
ты понимаешь, что ты не ответил ни на один из вопросов, которые я тебе задавал ?

ладно, может угадаю )
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with cte as (
  select '[{"id": "512b68da-b4e5-450c-832f-dc9f1f05e009", "name": "1 1/2\", 300 lb, RF, 316/316L, Max +250°C / 480°F, all adaptors except H"}]' as x
  union all select '[{"id": "017b11a8-228a-4410-b820-b31088b368ee", "name": "Стандарт (кабель PUR)"}]'
  union all select '[{"id": "7b446092-d510-47a8-b014-850dcdfd7919"}, {"id": "e72a348b-a647-4869-849f-618908e70803"}]'
),
cte1 as (
  select json_array_elements(cte.x::json) as x 
  from cte
)   
select a.id
from cte1 
cross join lateral json_to_record(cte1.x) as a (id varchar(40))


Код: sql
1.
2.
3.
4.
5.
"id"
"512b68da-b4e5-450c-832f-dc9f1f05e009"
"017b11a8-228a-4410-b820-b31088b368ee"
"7b446092-d510-47a8-b014-850dcdfd7919"
"e72a348b-a647-4869-849f-618908e70803"
...
Рейтинг: 0 / 0
03.10.2021, 13:04
    #40101598
pavel1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
court, проще приложить файл
https://github.com/pavelstruchkov1307/PostgreSQL/blob/main/task.sql
...
Рейтинг: 0 / 0
03.10.2021, 13:41
    #40101607
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
pavel1307
court, проще приложить файл
https://github.com/pavelstruchkov1307/PostgreSQL/blob/main/task.sql

дык, угадал же ! :)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TABLE cfg_group_char_attributes (
	id VARCHAR(50),
	cfg_item_group VARCHAR(50),
	characteristics VARCHAR(200),
	characteristic_values VARCHAR(200),
	char_code VARCHAR(50),
	char_code_start_position VARCHAR(50),
	char_code_end_position VARCHAR(50),
	char_value_name VARCHAR(200),
	char_value_name_group_position VARCHAR(50),
	comment VARCHAR(50)
);

INSERT INTO public.cfg_group_char_attributes (id, cfg_item_group, characteristics, characteristic_values, char_code, char_code_start_position, char_code_end_position, char_value_name, char_value_name_group_position, comment) VALUES ('569f6414-825f-4bd6-bf06-902f16152fc2', '9998b5ec-2722-4d75-bb21-34a297f04490', '[{"id": "0a47d8b6-14fd-4618-9d6b-75e55a3ecc59", "name": "Технологическое соединение прибора"}]', '[{"id": "512b68da-b4e5-450c-832f-dc9f1f05e009", "name": "1 1/2\", 300 lb, RF, 316/316L,  Max +250°C / 480°F, all adaptors except H"}]', 'RT', null, 1, '1 1/2", 300 lb, RF, 316/316L,  Max +250°C / 480°F, all adaptors except H', 6, null);
INSERT INTO public.cfg_group_char_attributes (id, cfg_item_group, characteristics, characteristic_values, char_code, char_code_start_position, char_code_end_position, char_value_name, char_value_name_group_position, comment) VALUES ('f7bf4717-76af-4451-be40-8035b6938b39', '9998b5ec-2722-4d75-bb21-34a297f04490', '[{"id": "a7e7d951-c948-4824-ad2f-53d337a469e5", "name": "Версия прибора"}]', '[{"id": "017b11a8-228a-4410-b820-b31088b368ee", "name": "Стандарт (кабель PUR)"}]', 'CN', null, 1, 'Стандарт (кабель PUR)', 5, null);
INSERT INTO public.cfg_group_char_attributes (id, cfg_item_group, characteristics, characteristic_values, char_code, char_code_start_position, char_code_end_position, char_value_name, char_value_name_group_position, comment) VALUES ('a8dbcd82-5119-411d-829a-9bab58943c27', 'c52b39e8-bbc6-4e90-8bd4-55bba9fa8948', '[{"id": "a7e7d951-c948-4824-ad2f-53d337a469e5", "name": "Версия прибора"}]', '[{"id": "017b11a8-228a-4410-b820-b31088b368ee", "name": "Стандарт (кабель PUR)"}]', 'CN', null, 1, 'Стандарт (кабель PUR)', 5, null);
INSERT INTO public.cfg_group_char_attributes (id, cfg_item_group, characteristics, characteristic_values, char_code, char_code_start_position, char_code_end_position, char_value_name, char_value_name_group_position, comment) VALUES ('31e843d9-41da-498c-88d8-987a1a2f3307', 'c52b39e8-bbc6-4e90-8bd4-55bba9fa8948', '[{"id": "b9d715dc-5a85-4b1a-9be4-d6d89ba8b994"}, {"id": "a7e7d951-c948-4824-ad2f-53d337a469e5"}]', '[{"id": "7b446092-d510-47a8-b014-850dcdfd7919"}, {"id": "e72a348b-a647-4869-849f-618908e70803"}]', '2', 16, 16, 'cCSAus (IS) CL I,II,III, Div1 GP ABCDEFG', 1, null);
INSERT INTO public.cfg_group_char_attributes (id, cfg_item_group, characteristics, characteristic_values, char_code, char_code_start_position, char_code_end_position, char_value_name, char_value_name_group_position, comment) VALUES ('6b924e5d-5bb3-4a8c-ad36-3a71be37f81c', '9998b5ec-2722-4d75-bb21-34a297f04490', '[{"id": "b9d715dc-5a85-4b1a-9be4-d6d89ba8b994"}, {"id": "a7e7d951-c948-4824-ad2f-53d337a469e5"}]', '[{"id": "7b446092-d510-47a8-b014-850dcdfd7919"}, {"id": "e72a348b-a647-4869-849f-618908e70803"}]', '2', 16, 16, 'cCSAus (IS) CL I,II,III, Div1 GP ABCDEFG', 1, null);


меняешь cte на свою таблицу и всё

вообщем так
Код: sql
1.
2.
3.
4.
5.
6.
7.
with cte1 as (
  select id, json_array_elements(characteristic_values::json) as x 
  from public.cfg_group_char_attributes
)   
select cte1.id as id_cfg_group_char_attributes, a.id as id_json
from cte1 
cross join lateral json_to_record(cte1.x) as a (id varchar(40))


id_cfg_group_char_attributesid_json569f6414-825f-4bd6-bf06-902f16152fc2512b68da-b4e5-450c-832f-dc9f1f05e009f7bf4717-76af-4451-be40-8035b6938b39017b11a8-228a-4410-b820-b31088b368eea8dbcd82-5119-411d-829a-9bab58943c27017b11a8-228a-4410-b820-b31088b368ee31e843d9-41da-498c-88d8-987a1a2f33077b446092-d510-47a8-b014-850dcdfd791931e843d9-41da-498c-88d8-987a1a2f3307e72a348b-a647-4869-849f-618908e708036b924e5d-5bb3-4a8c-ad36-3a71be37f81c7b446092-d510-47a8-b014-850dcdfd79196b924e5d-5bb3-4a8c-ad36-3a71be37f81ce72a348b-a647-4869-849f-618908e70803
...
Рейтинг: 0 / 0
03.10.2021, 13:52
    #40101610
pavel1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
court, похоже на правду, но мне нужно получать только characteristic_values.id
...
Рейтинг: 0 / 0
03.10.2021, 13:56
    #40101611
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
pavel1307
court, похоже на правду, но мне нужно получать только characteristic_values.id
и ?
рука не поднимается "вытереть" "cte1.id as id_cfg_group_char_attributes," в запросе ?

поможем )
Код: sql
1.
2.
3.
4.
5.
6.
7.
with cte1 as (
  select id, json_array_elements(characteristic_values::json) as x 
  from public.cfg_group_char_attributes
)   
select a.id as id_json
from cte1 
cross join lateral json_to_record(cte1.x) as a (id varchar(40))
...
Рейтинг: 0 / 0
03.10.2021, 14:05
    #40101613
pavel1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgreSQL Json
court, спасибо большое. Я просто только начал заниматься sql. Теперь буду разбираться в Вашем коде) Для меня куча этих псевдонимов пока сложна)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / postgreSQL Json / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]