Ich habe eine Postgresql 8.1-Datenbank. In einer Tabelle gibt es drei Spalten: first_name
, last_name
, display_name
.
Ist es möglich, den Standardwert von display_name
zu setzen first_name + " " + last_name
?
postgresql
MattSayar
quelle
quelle
Antworten:
Verwenden Sie einen Abzug.
Hier ist ein Code, den Sie als Basis verwenden können. Wenn Sie auch UPDATEs verarbeiten müssen, ist nur eine kleine Änderung erforderlich.
quelle
CREATE TRIGGER people_insert BEFORE INSERT OR UPDATE...
die Aktualisierung zuständig?Sie müssen den Wert nicht wirklich speichern . Sie können eine Funktion erstellen, auf die ähnlich wie auf eine generierte Spalte verwiesen werden kann. Die einzige Einschränkung ist, dass Referenzen immer mit dem Tabellen- oder Aliasnamen qualifiziert werden müssen.
Die Ergebnisse:
Sie können den generierten Wert sogar indizieren, einschließlich der Verwendung von KNN-Suchen basierend auf der Trigrammähnlichkeit. Beispielsweise:
Diese Art der Suche gibt Zeilen aus dem Index-Scan in der Reihenfolge der "Entfernung" von der Suchzeichenfolge zurück. Wenn Sie sehen möchten, wie "nah" sie waren, können Sie entweder den Entfernungsoperator (
<->
) oder diesimilarity()
Funktion (dh 1 - Entfernung) verwenden. Eine KNN-Suche kann sehr schnell die K "nächsten Nachbarn" zurückgeben, selbst bei einem sehr großen Datensatz.quelle
last_name
,NOT NULL
in meinem Beispiel zu sein. :-) Wir hatten Namensspalten wie die, die in der Tabelle waren und von Triggern gepflegt und ohne großen Aufwand auf diesen Ansatz umgestellt wurden, aber unser Framework verwendet immer einen Alias und qualifiziert immer Referenzen, sodass dieser Teil einfach war. Wenn Sie Code haben, der hinsichtlich der Qualifizierung von Spaltenreferenzen nicht konsistent ist, kann ich sehen, wo es ein Problem sein kann, all diese Fälle aufzuspüren.Mit der DEFAULT-Einstellung für eine Spaltentabelle, nein.
Ihre beste Wette ist hier ein TRIGGER mit dem NEUEN Wert für jede Spalte, die Sie berechnen möchten.
quelle