r.Get("/category", category.List)
r.Route("/internal", func(r chi.Router) {
r.Get("/category", category.List)
})
'{$1}'постгрес воспринимает это как просто строку, а не как параметр для вставки.
Пробовал явно указывать тип $1
query := `
UPDATE type
SET characteristics = jsonb_insert(
characteristics, '{$1}'::text, '{"type": "$2", "measure": "$3"}'::jsonb
)
WHERE id=$4`
Так тоже ошибка : function jsonb_insert(jsonb, text, jsonb) does not exist
jsonb_insert(target jsonb, path text[], new_value jsonb [, insert_after boolean])Поэтому строка `'{$1}'::text'`, должна быть `'{$1}'::text[]'`. (Но и это не совсем поможет)
query := `
UPDATE type
SET characteristics = jsonb_insert(
characteristics, array[$1::text],
jsonb_build_object('type', $2, 'measure', '$3')
)
WHERE id=$4`
tag, err := conn.Exec(ctx, query,
c.Name, // string
c.Type, // string
c.Measure, // string
c.ID, // uint64
)
query := `
UPDATE type
SET characteristics = jsonb_insert(
characteristics, array[$1::text], $2
)
WHERE id=$3`
tag, err := conn.Exec(ctx, query,
c.Name, // string
struct{ // лучше вынести как отдельный тип
Type string `json:"type"`
Measure string `json:"measure"`
}{c.Type, c.Measure}
c.ID, // uint64
)
UPDATE type
SET characteristics = jsonb_insert(
characteristics, array[$1], jsonb_build_object('type', $2, 'measure', $3)
)
WHERE id=$4
update type set characteristics[$1] = jsonb_build_object('type', $2, 'measure', $3) WHERE id=$4;
PostgreSQL 15 содержит много новых возможностей и улучшений, в том числе:
- Поддержка SQL-команды MERGE.
- Выборочная публикация содержимого таблицы в рамках логической репликации с возможностью указывать списки столбцов и фильтры строк.
- Больше возможностей для использования сжатия и поддержка сжатия Zstandard (zstd). В том числе реализована возможность сжатия на стороне сервера при создании копии с помощью pg_basebackup.
- Поддержка структурированного вывода журнала сервера в формате JSON.
- Улучшения производительности, в частности, оптимизация операций сортировки в памяти и на диске.
PostgreSQL 14 содержит много новых возможностей и улучшений, в том числе:
- Хранимые процедуры теперь могут возвращать данные через параметры OUT.
- Реализованы описанные в стандарте SQL параметры SEARCH и CYCLE для общих табличных выражений.
- Операцию обращения по индексу теперь можно применять не только к массивам, но и к любому типу данных, для которого она имеет смысл. В этом выпуске такие операторы добавлены для типов jsonb и hstore.
- Диапазонные типы были дополнены мультидиапазонными, позволяющими представлять несплошные диапазоны данных.
- Проведена большая работа по улучшению производительности параллельных запросов, обработки многопоточной нагрузки, секционированных таблиц, логической репликации и процедуры очистки.
- Изменения в индексах-B-деревьях теперь обрабатываются более эффективным методом, уменьшающим замусоривание индексов.
- Процедура VACUUM автоматически становится агрессивнее и пропускает несущественные операции очистки в случае приближения базы данных к моменту зацикливания идентификаторов транзакций.
- Расширенную статистику теперь можно собирать по выражениям, что позволяет получить лучшие планы для сложных запросов.
- Библиотека libpq теперь поддерживает конвейерную передачу нескольких запросов, что позволяет ускорить получение результатов через сетевые соединения, которым свойственны большие задержки.
с сервером в Казахстане
2ip как казахский
id name path parent
-----------------------
1 Беларусь 1 null
2 Россия 2 null
3 Минск 1.3 1
4 Москва 2.4 2
5 СПБ 2.5 2
6 Невский 2.5.6 5
r.Handler("GET", "/", fServer)
r.Handler("GET", "/*filepath", fServer)
with order_files as (
select
*,
row_number() over (partition by filename order by version desc, created_at desc) rn
from files
where user_id = 1
) select id, filename, user_id, version, created_at
from order_files where rn = 1
;