J'ai une base de données Postgresql 8.1. Dans une table, il y a trois colonnes: first_name
, last_name
, display_name
.
Est-il possible de définir la valeur par défaut de display_name
être first_name + " " + last_name
?
postgresql
MattSayar
la source
la source
Réponses:
Utilisez un déclencheur.
Voici du code que vous pouvez utiliser comme base. Si vous devez également gérer les MISES À JOUR, seule une petite modification est requise.
la source
CREATE TRIGGER people_insert BEFORE INSERT OR UPDATE...
mise à jour?Vous n'avez pas besoin de stocker réellement la valeur; vous pouvez créer une fonction qui peut être référencée un peu comme une colonne générée. La seule mise en garde est que les références doivent toujours être qualifiées avec le nom de la table ou de l'alias.
Les resultats:
Vous pouvez même indexer la valeur générée, notamment en utilisant des recherches KNN basées sur la similitude des trigrammes. Par exemple:
Ce type de recherche renvoie les lignes de l'analyse d'index par ordre de "distance" par rapport à la chaîne de recherche. Si vous voulez voir à quel point ils étaient "proches", vous pouvez utiliser l'opérateur de distance (
<->
) ou lasimilarity()
fonction (qui est 1 - distance). Une recherche KNN peut renvoyer les K "voisins les plus proches" très rapidement, même avec un ensemble de données très volumineux.la source
last_name
êtreNOT NULL
dans mon exemple. :-) Nous avions des colonnes de noms comme celle qui étaient dans le tableau et maintenues par des déclencheurs et nous sommes passés à cette approche sans trop de peine, mais notre framework utilise toujours un alias et qualifie toujours les références, donc cette partie était facile. Si vous avez du code qui n'est pas cohérent avec les références de colonne qualifiées, je peux voir où cela pourrait être difficile de retrouver tous ces cas.Avec le paramètre DEFAULT sur une table de colonnes, non.
Votre meilleur pari ici est un TRIGGER avec la NOUVELLE valeur pour chaque colonne que vous souhaitez calculer.
la source