状況
Symfony 4.3 内のコマンドバス、イベントバス、およびイベントストアに Prooph を使用しています。すべての集約をイベントソースにする必要があるわけではないため、Doctrine DBAL を使用して単純な集約を単純に CRUD します。
特定のドメイン内で、イベントソース リポジトリまたは DBAL リポジトリのいずれかを使用するコマンド バスで構成されたコマンド/ハンドラーがあります。
このコマンドバスを CLI コマンドに挿入すると、CLI で何かを実行すると複数の db 接続が発生します。
問題
データベースを削除/作成しようとすると (元のインストールまたはテスト環境のリセットのため)、別のアクティブな接続があるため、Postgres は拒否します。
Could not drop database "api" for connection named default
An exception occurred while executing 'DROP DATABASE "api"':
SQLSTATE[55006]: Object in use: 7 ERROR: database "api" is being accessed by other users
DETAIL: There is 1 other session using the database.
- イベントソースのリポジトリを持つすべてのコマンドを無効にしてみましたが、問題は修正されました。
- DBAL リポジトリを持つすべてのコマンドを無効にしてみましたが、問題は修正されました。
- このコマンドバスを注入しないようにしましたが、問題は修正されました。
したがって、PDO 接続を使用するサービスを DBAL 接続を使用するサービスと組み合わせて使用すると、問題が発生すると結論付けることができます。
ソリューション (失敗)
$connection->getWrappedConnection()
私が考えた解決策は、Prooph Eventstoreに Doctrine DBAL を使用することでした。明らかに、タイプヒンティングはこれを許可しません ( -interface をgetWrappedConnection()
返しますConnection
) が、実際の Doctrine PDOConnection
extends\PDO
が機能する場合は、この時点でハッキネスを受け入れます! ただし、無駄に、まだ2つの接続があります。