PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Usa le colonne generate da Postgres nel modello Sequelize

Fino a quando Sequelize non supporta i campi di sola lettura e il tipo di dati GENERATED, puoi aggirare Sequelize con un tipo di dati personalizzato:

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')
    },
  },
})

Questo genererà la colonna correttamente in postgres quando si utilizza sync() e impedisci di impostare il generatedValue in javascript generando un errore.

Supponendo che sequelize non tenti mai di aggiornare il campo se non è cambiato, come specificato in https://sequelize.org/master/manual/model-instances.html#change-awareness-of-save , allora dovrebbe funzionare.