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

Generierter Wert in Postgres

Ich denke, die akzeptierte Antwort von Petar ist nicht oder nicht mehr richtig. Die automatische Erhöhung in Postgres wird über SERIAL abgewickelt Pseudotyp, das ist richtig. Die von Petar angegebene Zuordnung führt jedoch zu der folgenden von Hibernate 5.1 generierten DDL:

CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;

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

Dies verwendet nicht SERIAL , sondern eine Hibernate-verwaltete Sequenz. Es gehört nicht der Tabelle und es wurde kein Standardwert festgelegt. Natürlich ist die DDL-Generierung eine Funktion, die viele Leute nicht in der Produktion verwenden (aber viele nehmen den generierten Code als Vorlage).

Wenn Sie Ihre DDL handschriftlich schreiben und tatsächlich SERIAL verwenden , dann mit GenerationType.SEQUENCE kann sogar mit dem Datenbankverhalten in Konflikt geraten. Der korrekte Weg, Hibernate der bevorzugten ID-Strategie von Postgres zuzuordnen, ist die Verwendung von GenerationType.IDENTITY . Der Code ist übrigens auch viel kürzer und besser lesbar:

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