Mam bazę danych Postgresql 8.1. W jednej tabeli, istnieją trzy kolumny: first_name
, last_name
, display_name
.
Czy można ustawić wartość domyślną display_name
to first_name + " " + last_name
?
postgresql
MattSayar
źródło
źródło
Odpowiedzi:
Użyj spustu.
Oto kod, którego możesz użyć jako podstawy. Jeśli musisz także obsługiwać AKTUALIZACJE, wymagana jest tylko niewielka zmiana.
źródło
CREATE TRIGGER people_insert BEFORE INSERT OR UPDATE...
poradziłaby również z aktualizacją?Nie musisz tak naprawdę przechowywać wartości; możesz utworzyć funkcję, do której można będzie się odwoływać podobnie do wygenerowanej kolumny. Jedynym zastrzeżeniem jest to, że odwołania muszą zawsze być kwalifikowane nazwą tabeli lub aliasu.
Wyniki:
Możesz nawet indeksować wygenerowaną wartość, w tym za pomocą wyszukiwań KNN opartych na podobieństwie trygramu. Na przykład:
Ten typ wyszukiwania zwraca wiersze ze skanu indeksu w kolejności „odległości” od ciągu wyszukiwania. Jeśli chcesz zobaczyć, jak były „blisko”, możesz użyć operatora odległości (
<->
) lubsimilarity()
funkcji (która wynosi 1 - odległość). Wyszukiwanie KNN może bardzo szybko zwrócić K „najbliższych sąsiadów”, nawet przy bardzo dużym zestawie danych.źródło
last_name
sięNOT NULL
w moim przykładzie. :-) Mieliśmy takie kolumny nazw, które były w tabeli i były obsługiwane przez wyzwalacze i przeszły na to podejście bez większego bólu, ale nasz framework zawsze używa aliasu i zawsze kwalifikuje referencje, więc ta część była łatwa. Jeśli masz kod, który nie jest spójny w odniesieniu do kwalifikujących się odniesień do kolumn, widzę, gdzie może być problem ze śledzeniem wszystkich tych przypadków.Z ustawieniem DOMYŚLNYM w tabeli kolumn, nie.
Twój najlepszy zakład tutaj to WYZWALACZ z NOWĄ wartością dla każdej kolumny, którą chcesz obliczyć.
źródło