PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Utiliser les colonnes générées par Postgres dans le modèle Sequelize

Tant que Sequelize ne prend pas en charge les champs readOnly et le type de données GENERATED, vous pouvez contourner Sequelize avec un type de données personnalisé :

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

Cela générera correctement la colonne dans postgres lors de l'utilisation de sync() , et empêcher la définition de la generatedValue en javascript en lançant une erreur.

En supposant que sequelize n'essaie jamais de mettre à jour le champ s'il n'a pas changé, comme spécifié dans https://sequelize.org/master/manual/model-instances.html#change-awareness-of-save , alors ça devrait marcher.