PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

GeneratedValue w Postgres

Myślę, że przyjęta odpowiedź Petara jest nieprawidłowa lub już nie jest poprawna. Auto-inkrementacja w Postgresie jest obsługiwana przez SERIAL pseudo typ, to prawda. Jednak mapowanie, które podaje Petar, da w wyniku następujący kod DDL wygenerowany przez Hibernate 5.1:

CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;

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

To nie używa SERIAL , ale sekwencja zarządzana przez Hibernate. Nie należy do tabeli i nie ustawiono wartości domyślnej. Oczywiście generowanie DDL to funkcja, której wiele osób nie używa w produkcji (ale wielu przyjmuje wygenerowany kod jako szablon).

Jeśli piszesz ręcznie swój DDL i faktycznie używasz SERIAL , a następnie za pomocą GenerationType.SEQUENCE może nawet kolidować z zachowaniem bazy danych. Prawidłowym sposobem mapowania Hibernate z preferowaną strategią identyfikacji Postgres jest użycie GenerationType.IDENTITY . Nawiasem mówiąc, kod jest również znacznie krótszy i bardziej czytelny:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dodaj interwał do znacznika czasu za pomocą fragmentów Ecto

  2. Funkcja okna Postgres i grupowanie według wyjątków

  3. jaka jest sekwencja ucieczki łącznika (-) w PostgreSQL?

  4. Jak debugować procedury składowane postgresql?

  5. Jaka jest maksymalna liczba dozwolonych parametrów na typ dostawcy bazy danych?