PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

GeneratedValue trong Postgres

Tôi nghĩ câu trả lời được chấp nhận từ Petar là không đúng, hoặc không còn đúng nữa. Số tự động tăng trong Postgres được xử lý thông qua SERIAL loại giả, điều đó chính xác. Tuy nhiên, ánh xạ mà Petar đưa ra sẽ dẫn đến DDL sau đây được tạo bởi Hibernate 5.1:

CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;

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

Điều này không sử dụng SERIAL , nhưng là một trình tự được quản lý Hibernate. Nó không thuộc sở hữu của bảng và không có giá trị mặc định nào được đặt. Tất nhiên, tạo DDL là một tính năng mà nhiều người không sử dụng trong sản xuất (nhưng nhiều người lấy mã được tạo làm mẫu).

Nếu bạn viết tay DDL của mình và thực sự sử dụng SERIAL , sau đó sử dụng GenerationType.SEQUENCE thậm chí có thể xung đột với hành vi cơ sở dữ liệu. Cách chính xác để ánh xạ Hibernate với chiến lược ID ưa thích của Postgres là sử dụng GenerationType.IDENTITY . Ngẫu nhiên, mã cũng ngắn hơn và dễ đọc hơn nhiều:

@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. Có phím tắt nào cho SELECT * FROM không?

  2. Tôi có thể tự động tạo bảng trong PostgreSQL từ tệp csv có tiêu đề không?

  3. PGError:ERROR:quyền bị từ chối đối với mối quan hệ (khi sử dụng Heroku)

  4. Heroku Postgresql với Google Datastudio

  5. Hibernate + PostgreSQL + Loại địa chỉ mạng (inet, cdir)