sql >> Databáze >  >> RDS >> PostgreSQL

Použití sekvence PostgreSQL v režimu spánku neovlivňuje tabulku sekvencí

Měl jsem stejný problém. Souvisí to se strategiemi přidělování id Hibernate. Když zvolíte GenerationType.SEQUENCE Hibernate používá strategii HiLo, která standardně přiděluje ID v blocích po 50. Můžete tedy explicitně nastavit allocationSize hodnotu takto:

@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;
}

Slyšel jsem však také názory, že použití strategie HiLo s allocationSize=1 není dobrá praxe. Někteří lidé doporučují použít GenerationType.AUTO místo toho, když se musíte vypořádat se sekvencemi spravovanými databází

Aktualizace: Nakonec jsem šel s přidělením velikosti =1 a zdá se, že věci fungují tak, jak očekávám. Moje aplikace je taková, že bloky ID stejně opravdu nepotřebuji, takže YMMV.



  1. Jak používat Oracle SQL*Plus

  2. Dopad prováděcího plánu na čekání ASYNC_NETWORK_IO – část 1

  3. Izolace transakcí v PostgreSQL

  4. Vše, co potřebujete vědět o SQL CTE na jednom místě