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

Die Verwendung der PostgreSQL-Sequenz im Ruhezustand wirkt sich nicht auf die Sequenztabelle aus

Ich hatte das gleiche Problem. Es hängt mit den ID-Zuweisungsstrategien von Hibernate zusammen. Wenn Sie GenerationType.SEQUENCE wählen verwendet Hibernate die HiLo-Strategie, die IDs standardmäßig in 50er-Blöcken zuweist. Sie können also allocationSize explizit festlegen Wert wie folgt:

@Id 
@SequenceGenerator(name="pk_sequence",sequenceName="entity_id_seq", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pk_sequence")
@Column(name="id", unique=true, nullable=false)
public int getId() {
    return this.id;
}

Allerdings habe ich auch Meinungen gehört, dass die HiLo-Strategie mit allocationSize=1 verwendet wird ist keine gute Praxis. Einige Leute empfehlen die Verwendung von GenerationType.AUTO stattdessen, wenn Sie mit datenbankverwalteten Sequenzen zu tun haben

Aktualisierung: Am Ende ging ich mit "allocationSize=1" und die Dinge scheinen jetzt so zu funktionieren, wie ich es erwarte. Meine Anwendung ist so, dass ich sowieso keine ID-Blöcke brauche, also YMMV.