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

Genereret værdi i Postgres

Jeg tror, ​​at det accepterede svar fra Petar ikke er korrekt, eller ikke længere er korrekt. Den automatiske stigning i Postgres håndteres gennem SERIAL pseudotype, det er korrekt. Den kortlægning, som Petar giver, vil dog resultere i følgende DDL genereret af Hibernate 5.1:

CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;

CREATE TABLE … (
    id INT8 NOT NULL,
    …
);

Dette bruger ikke SERIAL , men en Dvale-styret sekvens. Det ejes ikke af tabellen, og der er ikke angivet nogen standardværdi. Selvfølgelig er DDL-generering en funktion, som mange mennesker ikke bruger i produktionen (men mange tager den genererede kode som en skabelon).

Hvis du håndskriver din DDL og faktisk brugte SERIAL , og derefter bruge GenerationType.SEQUENCE kan endda være i konflikt med databasens adfærd. Den korrekte måde at kortlægge Hibernate med Postgres' foretrukne ID-strategi er at bruge GenerationType.IDENTITY . Koden er i øvrigt også meget kortere og mere læsbar:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;


  1. SQL datoformat

  2. Hvad er PostgreSQL-ækvivalenten for ISNULL()

  3. Sådan slipper du en begrænsning i SQL Server (T-SQL)

  4. Sådan opretter og sletter du databaser og tabeller i PostgreSQL