A razão pela qual isso funciona no PostgreSQL é que os catálogos do sistema são tabelas regulares. Portanto, a criação de uma nova função, por exemplo, requer apenas a inserção de uma linha na pg_proc
tabela, a alteração do valor padrão de uma coluna exige a atualização de alguma linha pg_attrdef
e assim por diante. Como as tabelas são transacionais de qualquer maneira, você quase precisará se esforçar para não funcionar dessa maneira. (Muitos detalhes dolorosos da implementação foram omitidos aqui. ;-))
Suponho, sem conhecer o código fonte, que outros mecanismos de banco de dados usem algumas estruturas internas personalizadas para representar suas informações de catálogo do sistema. E, portanto, eles teriam que fazer um esforço extra, muito provavelmente, para fazer o DDL transacional funcionar, e aparentemente não é uma prioridade para eles.
O outro lado disso é que essa é a razão pela qual as principais atualizações de versão do PostgreSQL são tão dolorosas. Presumivelmente, outros produtos podem projetar suas estruturas internas de metadados com alterações e atualizações em mente, e, portanto, não há problemas com a atualização para uma nova versão principal. No PostgreSQL, não há como alterar uma tabela de catálogo do sistema para parecer repentinamente uma versão mais recente de uma tabela de catálogo do sistema, pelo menos não enquanto o sistema estiver online, pois isso exigiria acesso aos catálogos do sistema. Urgh.