Comments 21
Показать на примерах, как работать с jsonb - это хорошо. Но вот структуру таблиц можно было бы оставить в классической, реляционной модели - Авторы, Книги, Категории. А то потом джуны всё в json будут пихать.
Меж тем, работа с json в постгресе эффективна и подлежит индексированию, если влазит в TOAST, т.е. меньше 2Кб. Ну и если json не вложенный.
->> - возвращает результат типа text.
Формулировка хоть и не содержит ошибок, но является неверной.
Правильно: Указанный оператор безусловно преобразует извлечённое значение к типу TEXT. Кроме того, в отличие от оператора ->, если извлечённое значение является строковым литералом, из него удаляются обрамляющие литерал двойные кавычки.
Это не то же самое, что написано в статье - ведь извлечённое значение может быть и числовым, и JSON, и предопределённой константой.
Спасибо за ваше замечание
О кавычках я пишу (прошу обратить внимание на 3-ий пример, один из запросов)
Каким бы ни было возвращаемое значение, оно все равно имеет текстовый тип
SELECT
id, info_data->>'title' as title, info_data->>'count_volumes' as cv, pg_typeof(info_data->>'count_volumes') as type_cv
FROM
books,
jsonb_array_elements(info) as info_data;
Может быть все-таки стоит оставить текст "как есть"....
Ваша статья - ваше решение. Просто читать её будут в первую очередь люди неопытные, которые запросто могут вообразить себе, что указанный оператор применим исключительно к скалярным строковым элементам. А про кавычки - пока ещё товарищ до третьего примера дочитает... да и у него может просто не совместиться. К тому же в примере весьма неудачно приходится использовать числовой индекс вместо строкового пути, и кто знает, что в итоге останется в голове у начинающего.
ссылка на дамп базы не работает
Спасибо. Ссылка исправлена. Очень досадно за ситуацию (ссылки проверял)
Ничего не найдено
В ссылке опечатка, либо владелец удалил файлы или закрыл к ним доступ.
отбой, открыл в инкогнито файл скачался, не работает если есть активная авторизация в яндексе
может не тот файл? почему-то думал что там будут запросы с массовой вставкой тестовых данных а не просто создание таблиц с индексами
Всё ещё хуже. Там выложен командный файл для CLI, с маловменяемым COPY public.books (id, info) FROM stdin; - непонятно, кто мешал вместо лога консоли выложить нормальный дамп.
В общем, вместо нормальных исходных данных читатель насмерть прибит к linux и psql.
да это не проблема, хочется данных готовых чтобы не вводить руками, причем не 10 строк в таблицах побольше хотябы от 100
Дамп создавался стандартно
pg_dump -U postgres library > dump-library
Возможно надо сделать более подробное разъяснение
Я, как автор, наверное обязан использовать (насколько возможно), те средства, которые есть у всех (ничего дополнительно ставить не требуется).
Если установлен PostgreSQL, то и psql тоже есть.
То, что описано в публикации, можно выполнить не только в Linux.
Если у вас Windows, надо найти, где установлен PostgreSQL (если стандартно, то где-то там: c:\Program Files...), там же найдется и psql (где-то в папке bin, вероятно)
Действия по подготовке данных для запросов можно выполнить непосредственно из этой папки
А у меня online fiddle. Где я могу найти там psql?
Интересная ситуация)
Мне казалось, что я сделал все что "необходимо и достаточно" для практического освоения собственного материала
Готовить отдельно данные для отдельного случая - не хотел бы этого делать (прошу извинить)
Если действительно есть заинтересованность, то может быть стоит поставить PostgreSQL с его утилитами?
Это разумно (наверное самое простое)
Если не ставить PostgreSQL, то можно развернуть docker-контейнер с сервером (docker), развернуть дамп внутри контейнера и смотреть как работают запросы таким способом (заодно повод познакомиться с docker`ом, если еще не приходилось "сталкиваться")
Если и ставить сервер - "нет" и docker - "нет", напишите недостающие запросы самостоятельно (вероятно только insert`ы, все необходимое есть в файле дампа, надо сделать один шаг можно сказать).
Если и это тоже "нет", не знаю что сказать, вам действительно это (сама тема) надо?
Работа с колонками типа JSON в PostgreSQL (на примере использования отдельных функций)