PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Генерирана стойност в Postgres

Мисля, че приетият отговор от Петър не е правилен или вече не е правилен. Автоматичното увеличение в Postgres се обработва чрез SERIAL псевдотип, това е правилно. Въпреки това, картографирането, което Петър дава, ще доведе до следния DDL, генериран от Hibernate 5.1:

CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;

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

Това не използва SERIAL , но управлявана от хибернация последователност. Не е собственост на таблицата и не е зададена стойност по подразбиране. Разбира се, генерирането на DDL е функция, която много хора не използват в производството (но много хора приемат генерирания код като шаблон).

Ако напишете своя DDL и действително използвате SERIAL , след което с помощта на GenerationType.SEQUENCE може дори да е в конфликт с поведението на базата данни. Правилният начин за съпоставяне на хибернация с предпочитаната ID стратегия на Postgres е използването на GenerationType.IDENTITY . Между другото, кодът също е много по-кратък и по-четлив:

@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. Превърнете представянето на датата в postgres в низ по ISO 8601

  2. SQL - Създаване на изглед от множество таблици

  3. Как мога да създам ограничение, за да проверя дали имейл е валиден в postgres?

  4. Десет начина за разширяване на функционалността на PostgreSQL

  5. Коригирайте „ГРЕШКА:  липсва запис на клауза FROM за таблица“ в PostgreSQL, когато използвате UNION, EXCEPT или INTERSECT