Пакетное чтение строк с Go и pgx

Сначала запустите временную базу данных, затем выполните:

go -C examples/go-pgx run ./demo

Используются 127.0.0.1:55432, база pglc_demo и учётные данные demo / demo-only. Если quickstart использует другой порт, задайте PGLC_DEMO_PORT.

Демонстрация передаёт ключи как параметр запроса:

SELECT local_cache.mget('public.items'::regclass, $1::bigint[]);

mget возвращает text[]; каждый ненулевой элемент является JSON-строкой. Пример запрашивает 42, 7, 42, NULL, 999999 и выводит строки в порядке входных данных. Дубликат 42 остаётся в обеих позициях; null-вход и отсутствующий 999999 дают элементы null.

Сравнивайте строки, а не только обмены с сервером

Обычный запрос WHERE id = ANY($1::bigint[]) не сохраняет запрошенные позиции. Восстановите порядок входных данных, дубликаты и отсутствующие строки перед сравнением с mget; в руководстве по пакетному чтению показаны клиентский и SQL-подходы.

Бенчмарк использует постоянные соединения и подготовленные операторы. Подготовка SQL не кэширует его строки результатов: см. руководство по кэшированию PostgreSQL. Общий бенчмарк проверяет Go и Node.js с одинаковыми ключами, размерами пакетов, числом соединений и длительностью через SQL и RESP. RESP не разделяет SQL-транзакцию вызывающего сеанса.

См. quickstart для настройки и проверок транзакций перед адаптацией пути чтения.

Обновлено .