Corrija-me se estou usando o termo correto: "afetado globalmente", quero dizer, se eu aumentar o valor da sequência, ele será aumentado para todas as outras transações em execução sem a necessidade de confirmação....
Eu sei que as sequências têm esse comportamento, mas minha dúvida é se existe uma lista com alguns outros papéis que são afetados globalmente, se eu atualizar dentro de uma transação?
Por exemplo, se eu definir alter table mytable enable trigger all; isso afetará o comportamento do gatilho apenas na transação local ou em outras transações, observe que isso é apenas um exemplo, estou pensando em muitas outras coisas que preciso ter cuidado com isso.
alter table mytable enable trigger all;
não pode afetar transações simultâneas diretamente porque o comando faz um bloqueio exclusivo na tabela antes que a alteração seja aplicada. E o bloqueio fica até o final da transação. (É claro que o próprio bloqueio pode ter efeitos indiretos em transações simultâneas.)Alguns efeitos que são visíveis para transações simultâneas antes
COMMIT
(ou mesmo depoisROLLBACK
):ROLLBACK
, uma vez que as declarações preparadas são visíveis apenas na mesma sessão).VACUUM
seu trabalho, pois as linhas ainda potencialmente visíveis no instantâneo não podem ser removidas. Pode até levar a um wraparound de ID de transação em casos muito extremos. (Bem, outras medidas de segurança entram em ação antes que isso realmente aconteça.)tenho certeza que tem mais...
Alguns comandos não podem ser executados dentro de uma transação. Como
CREATE DATABASE
,CREATE INDEX CONCURRENTLY
ouVACUUM
.Relacionado: