Я хотел бы протестировать несколько вариантов параллелизма транзакций в PostgreSQL, и для этого мне нужен сценарий, который заставит две транзакции начать в одно и то же время. Что-то, что не требует ручного вмешательства;) Любые идеи?
Вы можете сделать это с помощью LOCK
на столе, настроить транзакции, а затем освободить блокировку, отбросив транзакцию, которая получила блокировку. См. Этот предварительный ответ и его ссылки для получения подробной информации об этом подходе. Хотя я продемонстрировал это, используя три сеанса psql
он одинаково жизнеспособен сделать это с совместными процессами bash, скриптом Python с использованием psycopg2
и multiprocessing
или threading
модулями и т. Д. Довольно просто сделать. Обновление : на самом деле вот пример, который я только что написал в python3 .
Для более сложных тестов возьмите исходный код PostgreSQL и используйте инструмент «isoltester» в src/test/isolation
который позволяет писать рецепты, которые выполняют сложные команды команд. Он не поддерживает PGXS
с PGXS
(хотя такая поддержка, вероятно, будет довольно тривиальной для добавления), поэтому вам нужно скомпилировать все исходное дерево PostgreSQL, но это достаточно быстро. Он будет работать против вашего существующего PostgreSQL, поэтому нет необходимости устанавливать тот, который вы скомпилировали.
См. src/test/isolation/README
для получения дополнительной информации об инструменте изоляции. Документы немного тонкие на местах, так как это внутренний инструмент для тестирования, но существующие тестовые примеры должны помочь вам приступить к работе. Не стесняйтесь улучшать его, чтобы удовлетворить ваши потребности и представить патчи 🙂