PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verwenden Sie von Postgres generierte Spalten im Sequelize-Modell

Bis Sequelize ReadOnly-Felder und den GENERATED-Datentyp unterstützt, können Sie Sequelize mit einem benutzerdefinierten Datentyp umgehen:

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

Dadurch wird die Spalte in Postgres korrekt generiert, wenn sync() verwendet wird , und verhindern Sie das Setzen des generatedValue in Javascript, indem ein Fehler ausgegeben wird.

Angenommen, dass sequelize niemals versucht, das Feld zu aktualisieren, wenn es sich nicht geändert hat, wie in https://sequelize.org/master/manual/model-instances.html#change-awareness-of-save , dann sollte es funktionieren.