Запустите pg_local_cache локально

Эта демонстрация собирает pg_local_cache из вашего рабочего дерева в отдельном сервере PostgreSQL 16. Она не устанавливает расширение в существующий сервер PostgreSQL.

Вам нужны Git, Docker и Docker Compose с поддержкой up --wait. Образ собирается из исходного кода.

Запустите базу данных

git clone https://github.com/profundium/pg_local_cache.git
cd pg_local_cache
docker compose -f examples/compose.yaml up --build --wait

Демонстрация привязывает PostgreSQL к 127.0.0.1:55432, не запускает RESP- слушатель или постоянный том и хранит данные во временной файловой системе контейнера. При остановке контейнера его данные удаляются. demo-only предназначен для этого локального цикла; в production используйте собственные учётные данные.

Если порт 55432 занят, задайте PGLC_DEMO_PORT перед запуском Compose и сохраняйте это значение при запуске примера Node.js:

export PGLC_DEMO_PORT=55433

Читайте с ролью приложения

Настройка создаёт 4 096 строк в public.items. К кэшу подключена только эта таблица. Роль demo не является суперпользователем.

docker compose -f examples/compose.yaml exec -T postgres \
  psql -X -v ON_ERROR_STOP=1 -U demo -d pglc_demo <<'SQL'
SELECT unnest(local_cache.mget(
  'public.items'::regclass,
  ARRAY[42, 7, 42, NULL, 999999]::bigint[]
));
SELECT unnest(local_cache.mget(
  'public.items'::regclass,
  ARRAY[42, 7, 42, NULL, 999999]::bigint[]
));
SQL

Оба вызова возвращают одни и те же строки в том же порядке. Первая и третья позиции относятся к строке 42. Последние две позиции — это SQL NULL: один входной элемент равен null, а ключ 999999 не существует. В psql SQL null по умолчанию отображается пустым значением.

Функция возвращает text[]. Приведённый выше unnest выводит по одному элементу массива в каждой строке.

Проверьте счётчики от имени администратора базы данных:

docker compose -f examples/compose.yaml exec -T postgres \
  psql -X -v ON_ERROR_STOP=1 -U postgres -d pglc_demo \
  -c 'SELECT local_cache.health();' \
  -c 'SELECT local_cache.stats();'

В этой свежей демонстрации local_cache.health() должен сообщить ready: true, а повторение чтений должно увеличить sql_cache_hits. Если попадания остаются равными нулю, проверьте sql_cache_misses, sql_cache_fills и sql_cache_bypasses по руководству по инвалидации.

Проверьте COMMIT и ROLLBACK

С Node.js 20 или новее:

npm --prefix examples/node-postgres ci --ignore-scripts
npm --prefix examples/node-postgres run demo

Тест открывает отдельные соединения читателя и записывающего сеанса. Он проверяет прогретое попадание, порядок входных данных, дубликаты и отсутствующие ключи, незакоммиченное обновление, чтение собственных изменений, откат и зафиксированное обновление. При невыполненном утверждении он завершается с ненулевым кодом.

См. пошаговый SQL для двух сеансов или объяснение запроса Node.js.

Подключите приложение

Далее сравните одинаковую нагрузку SQL и RESP. Если нужны результаты или возникли проблемы с настройкой, создайте отчёт о нагрузке, указав окружение и JSON бенчмарка или журнал ошибки.

Удалите демонстрацию

docker compose -f examples/compose.yaml down

Локально собранный образ Docker останется доступен для следующего запуска. Службу PostgreSQL на хосте не нужно перезапускать или восстанавливать.

Для существующей базы данных следуйте руководству по установке. В этом случае будут другими права доступа, конфигурация и требования к перезапуску.

Обновлено .