Eu vejo nos documentos do Postgres :
Duas transações não podem manter bloqueios de modos conflitantes na mesma tabela ao mesmo tempo
Durante a manutenção (migração de esquema) vimos casos em que não conseguimos ALTER TABLE
por causa de travamento SELECT
na transação ( pg_locks
+ pg_stat_activity
).
Para prosseguir com a migração, revogamos CONNECT
os usuários "desonestos" e chutamos todas as suas sessões.
É correto que:
BEGIN;
SELECT ...;
vai bloquear ALTER TABLE
até COMMIT
ou ROLLBACK
?
Você acertou.
É assim que o PostgreSQL evita conflitos: você não pode descartar ou modificar uma tabela enquanto alguém a estiver usando.
yes , no próprio Mysql SELECT é considerado uma transação. portanto, se uma transação estiver em uma tabela, você não poderá obter o bloqueio de metadados para alter.