18
Практика
1. Убедитесь, что при работе приложения через пул соединений
(порт 6432) разные пользователи обычно видят одну и ту же
корзину. Выясните причину ошибки и исправьте код
хранимых функций так, чтобы приложение работало
корректно как без пула соединений, так и с ним.
2. Использование пула мешает выводу в журнал сообщений
сервера информации, относящейся только к одному клиенту.
Наше приложение вызывает в начале каждой транзакции
функцию webapi.trace (или empapi.trace), если в служебной
панели установлен признак трассировки. Реализуйте эти
функции так, чтобы они устанавливали параметр сервера
log_min_duration_ statements = 0 и облегчали идентификацию
клиента. Проверьте работу по журналу сообщений.
Во всех темах курса, начиная с этой, мы будем использовать
подключение через пул соединений на порту 6432 (настройка по
умолчанию). Pgbouncer настроен точно так же, как было показано
в демонстрации.
1. Проблема воспроизводится следующим образом. Откройте две
вкладки браузера с книжным магазином. В первой войдите как alice и
положите в корзину одну или несколько книг. Во второй зайдите как bob
и проверьте корзину.
Поскольку один пользователь видит корзину другого пользователя,
можно предположить, что дело в разграничении доступа. Чтобы понять,
в каком месте следует искать проблему, вспомните материал темы
«Приложение 2.0».
2. Необходимые функции уже имеются в базе данных, но ничего не
делают. Функция webapi.trace принимает на вход токен аутентификации
(или NULL, если пользователь не вошел в систему).
Для идентификации можно использовать параметр log_line_prefix
с маской %a, выводящей имя приложения. Имя приложения
устанавливается параметром application_name, в которое можно
записать имя пользователя, если оно известно.