Não existe esse mecanismo no PostgreSQL.
No entanto, você ainda pode evitar os efeitos excessivos dessa alteração de tabela.
A instrução a seguir adquire um bloqueio exclusivo de acesso na tabela pela duração da instrução / transação:
ALTER TABLE your_table
ADD COLUMN new_column integer NOT NULL DEFAULT 0;
Essa instrução altera o catálogo e, em seguida, reescreve a tabela inteira para que a nova coluna contenha o valor padrão em todas as linhas. Se a tabela tiver muitas linhas e for acessada com frequência suficiente, isso causaria alguns problemas temporários.
Para evitá-lo, tente manter o bloqueio exclusivo o mais curto possível:
ALTER TABLE your_table
ADD COLUMN new_column integer;
ALTER TABLE your_table
ALTER COLUMN new_column SET DEFAULT 0;
Como isso é basicamente apenas uma alteração (na verdade duas) do catálogo (nenhuma alteração de dados acontece), ela será concluída rapidamente. Em seguida, dependendo das suas necessidades e uso da tabela, você pode atualizar a nova coluna para o padrão em uma etapa ou em lotes e, quando terminar, definir a coluna como NOT NULL
.
Atualização sobre um desejo se tornando realidade: o PostgreSQL 11 terá esse recurso. Consulte https://www.depesz.com/2018/04/04/waiting-for-postgresql-11-fast-alter-table-add-column-with-a-non-null-default/ para obter mais informações.