В документации Postgres говорится:
Когда столбец добавляется с помощью ADD COLUMN и используется энергонезависимое значение DEFAULT. указано, значение по умолчанию оценивается во время оператора и результат сохраняется в метаданных таблицы. Это значение будет использоваться для столбец для всех существующих строк. Если DEFAULT не указано, NULL использовал. Ни в том, ни в другом случае перезапись таблицы не требуется.
Добавление столбца с изменчивым значением DEFAULT или изменение типа существующий столбец потребует, чтобы вся таблица и ее индексы были переписано. В виде исключения при изменении типа существующего столбец, если предложение USING не меняет содержимое столбца и старый тип либо двоично приводим к новому типу, либо неограниченный домен по новому типу, перезапись таблицы не требуется; но любые индексы затронутых столбцов все равно необходимо перестроить. Стол и/или перестроение индекса может занять значительное время для большой стол; и временно потребует вдвое больше диска космос.
Что такое изменчивое значение по умолчанию? Это не объяснено в документации по таблице изменений, которую я цитировал.
доктор говорит
Функция VOLATILE может делать что угодно, включая изменение базы данных. Он может возвращать разные результаты при последовательных вызовах с одним и тем же аргументы. Оптимизатор не делает никаких предположений о поведении такие функции. Запрос с использованием изменчивой функции переоценит функция в каждой строке, где требуется ее значение.
Таким образом, при применении к значению по умолчанию энергонезависимое значение по умолчанию можно рассматривать как константу (например: true
для логического столбца).
С другой стороны, изменчивое значение по умолчанию может рассматриваться как разное для каждой строки, например, запись CLOCK_TIMESTAMP
при создании строки.
CURRENT_TIMESTAMP
— особенно плохой пример, поскольку эта функция — STABLE
, а не VOLATILE
. (возвращает то же значение внутри той же транзакции)
Верно; вам следует исправить ответ.
См. Изменение DDL: 5.6.1. Добавление столбца, а затем совет. По сути, любой DEFAULT, который может меняться между каждым обновлением строки.