У меня есть база данных Postgresql 8.1. В одной таблице, есть три колонки: first_name
, last_name
, display_name
.
Можно ли установить значение по умолчанию, display_name
чтобы быть first_name + " " + last_name
?
postgresql
MattSayar
источник
источник
Ответы:
Используйте триггер.
Вот код, который вы можете использовать в качестве основы. Если вам также нужно обрабатывать обновления, требуется лишь небольшое изменение.
источник
CREATE TRIGGER people_insert BEFORE INSERT OR UPDATE...
справится с обновлением?Вам не нужно на самом деле хранить значение; Вы можете создать функцию, на которую можно ссылаться так же, как на сгенерированный столбец. Единственное предостережение в том, что ссылки должны всегда указываться с именем таблицы или псевдонима.
Результаты:
Вы даже можете индексировать сгенерированное значение, в том числе используя поиск по KNN на основе сходства триграмм. Например:
Этот тип поиска возвращает строки из сканирования индекса в порядке «расстояния» от строки поиска. Если вы хотите увидеть, насколько они «близки», вы можете использовать оператор расстояния (
<->
) илиsimilarity()
функцию (1 - расстояние). Поиск KNN может очень быстро вернуть K «ближайших соседей», даже с очень большим набором данных.источник
last_name
чтоNOT NULL
в моем примере. :-) У нас были столбцы имен, подобные тем, которые были в таблице и поддерживались триггерами, и без особого труда переключились на этот подход, но наша среда всегда использует псевдоним и всегда определяет ссылки, так что эта часть была легкой. Если у вас есть код, который не согласуется с квалификационными ссылками на столбцы, я могу увидеть, где может быть сложно отследить все эти случаи.С настройкой DEFAULT для таблицы столбцов, нет.
Ваша лучшая ставка здесь - это TRIGGER со значением NEW для каждого столбца, который вы хотите вычислить.
источник