Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

524
Vistas
Usar columnas generadas por Postgres en el modelo Sequelize

Tengo una tabla en la que es beneficioso generar un valor precalculado en el motor de la base de datos en lugar de en el código de mi aplicación. Para esto, estoy usando la función de columna generada de Postgres . El SQL es así:

 ALTER TABLE "Items" ADD "generatedValue" DOUBLE PRECISION GENERATED ALWAYS AS ( LEAST("someCol", "someOtherCol") ) STORED;

Esto funciona bien, pero estoy usando Sequelize con esta base de datos. Quiero encontrar una manera de definir esta columna en la definición de mi modelo, de modo que Sequelize la consulte, no intente actualizar el valor de una fila para esa columna e, idealmente, cree la columna sincronizada.

 class Item extends Sequelize.Model { static init(sequelize) { return super.init({ someCol: Sequelize.DOUBLE, someOtherColl: Sequelize.DOUBLE, generatedValue: // <<<-- What goes here?? }); } }

¿Cómo puedo hacer esto con Sequelize?

Puedo especificar la columna como DOBLE y Sequelize la leerá, pero la columna no se creará correctamente en la sincronización. ¿Quizás hay algún enlace posterior a la sincronización que pueda usar? Estaba considerando afterSync para eliminar la columna y volver a agregarla con mi declaración de valor generada, pero primero tendría que detectar que la columna aún no se había convertido o perdería mis datos. (Ejecuto sincronización [sin force: true ] en cada inicio de aplicación).

Cualquier pensamiento o idea alternativa sería apreciada.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Hasta que Sequelize admita campos de solo lectura y el tipo de datos GENERADO, puede moverse por Sequelize con un tipo de datos personalizado:

 const Item = sequelize.define('Item', { someCol: { type: DataTypes.DOUBLE }, someOtherCol: { type: DataTypes.DOUBLE }, generatedValue: { type: 'DOUBLE PRECISION GENERATED ALWAYS AS (LEAST("someCol", "someOtherCol")) STORED', set() { throw new Error('generatedValue is read-only') }, }, })

Esto generará la columna correctamente en postgres al usar sync() , y evitará establecer el valor generatedValue en javascript arrojando un error.

Suponiendo que Sequelize nunca intente actualizar el campo si no ha cambiado, como se especifica en https://sequelize.org/master/manual/model-instances.html#change-awareness-of-save , entonces debería funcionar.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda