Tengo una base de datos Postgresql 8.1. En una mesa, hay tres columnas: first_name
, last_name
, display_name
.
¿Es posible establecer el valor predeterminado de display_name
ser first_name + " " + last_name
?
postgresql
MattSayar
fuente
fuente
Respuestas:
Usa un gatillo.
Aquí hay un código que puede usar como base. Si también necesita manejar ACTUALIZACIONES, solo se requiere un pequeño cambio.
fuente
CREATE TRIGGER people_insert BEFORE INSERT OR UPDATE...
manejaría la actualización también?No necesita almacenar realmente el valor; puede crear una función a la que se pueda hacer referencia de forma muy similar a una columna generada. La única advertencia es que las referencias siempre deben calificarse con la tabla o el nombre del alias.
Los resultados:
Incluso puede indexar el valor generado, incluido el uso de búsquedas KNN basadas en la similitud de trigrama. Por ejemplo:
Este tipo de búsqueda devuelve filas del índice de exploración en orden de "distancia" desde la cadena de búsqueda. Si desea ver cuán "cercanos" estaban, puede usar el operador de distancia (
<->
) o lasimilarity()
función (que es 1 - distancia). Una búsqueda KNN puede devolver los K "vecinos más cercanos" muy rápidamente, incluso con un conjunto de datos muy grande.fuente
last_name
estarNOT NULL
en mi ejemplo. :-) Teníamos columnas de nombres como las que estaban en la tabla y mantenidas por disparadores y cambiamos a este enfoque sin mucho dolor, pero nuestro marco siempre usa un alias y siempre califica las referencias, por lo que esa parte fue fácil. Si tiene un código que no es coherente con las referencias de columna de calificación, puedo ver dónde podría ser difícil rastrear todos esos casos.Con la configuración POR DEFECTO en una tabla de columnas, no.
Su mejor apuesta aquí es un GATILLO con el NUEVO valor para cada columna que desea calcular.
fuente