Разница между GENERATED ALWAYS и GENERATED BY DEFAULT при создании автоинкремента в PostgreSQL заключается в следующем:
- GENERATED ALWAYS указывает PostgreSQL всегда генерировать значение для столбца автоинкремента. 13 Любая попытка вставить или обновить значение в этот столбец приведёт к ошибке. 1
- GENERATED BY DEFAULT также указывает PostgreSQL генерировать значение для столбца автоинкремента, но позволяет вставлять или обновлять в него конкретные значения. 1 Если предоставить значение, оно будет использоваться вместо сгенерированного системой. 1
Таким образом, GENERATED ALWAYS гарантирует, что PostgreSQL всегда генерирует уникальное значение для столбца, а GENERATED BY DEFAULT позволяет при необходимости вставлять конкретные значения. 1 Если не предоставить значение, PostgreSQL сгенерирует его сам. 1