Основное отличие использования GENERATED ALWAYS и GENERATED BY DEFAULT в PostgreSQL заключается в том, как обрабатываются явно заданные пользователем значения командами INSERT и UPDATE. 2
GENERATED ALWAYS указывает, что для столбца идентификации всегда будет генерироваться уникальное значение. 3 Любая попытка вставить или обновить значение в такой столбец приведёт к ошибке, если не использовать OVERRIDING SYSTEM VALUE. 3
GENERATED BY DEFAULT, в отличие от предыдущего варианта, позволяет добавлять значения самостоятельно. 1 Если пользователь указывает значение, оно будет использоваться вместо значения, сгенерированного системой. 3
Таким образом, GENERATED ALWAYS строго контролирует значение столбца идентификации, не допуская никаких ручных изменений во время операций INSERT, а GENERATED BY DEFAULT даёт возможность при необходимости вставлять определённые значения. 3