Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

346
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda