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

Giá trị tiếp theo của PostgreSQL của các chuỗi?

RETURNING

Điều đó có thể thực hiện được với một chuyến khứ hồi vào cơ sở dữ liệu:

INSERT INTO tbl(filename)
VALUES ('my_filename')
RETURNING tbl_id;

tbl_id thường sẽ là một serial hoặc IDENTITY (Postgres 10 trở lên). Xem thêm trong sách hướng dẫn.

Tìm nạp giá trị rõ ràng

Nếu filename cần bao gồm tbl_id (dư thừa), bạn vẫn có thể sử dụng một truy vấn.

Sử dụng lastval() hoặc currval() cụ thể hơn :

INSERT INTO tbl (filename)
VALUES ('my_filename' || currval('tbl_tbl_id_seq')   -- or lastval()
RETURNING tbl_id;

Xem:

  • Giá trị tham chiếu của cột nối tiếp trong một cột khác trong cùng một INSERT

Nếu nhiều trình tự có thể được nâng cao trong quá trình (thậm chí bằng cách kích hoạt hoặc các tác dụng phụ khác) thì chắc chắn cách là sử dụng currval('tbl_tbl_id_seq') .

Tên của trình tự

Chuỗi ký tự 'tbl_tbl_id_seq' trong ví dụ của tôi được cho là thực tế tên của trình tự và được chuyển thành regclass , điều này dẫn đến một ngoại lệ nếu không tìm thấy chuỗi tên đó trong search_path hiện tại .

tbl_tbl_id_seq là mặc định được tạo tự động cho bảng tbl với một cột nối tiếp tbl_id . Nhưng không co sự bảo đảm nao. Mặc định cột có thể tìm nạp các giá trị từ bất kỳ trình tự nếu được xác định như vậy. Và nếu tên mặc định được sử dụng khi tạo bảng, Postgres sẽ chọn tên miễn phí tiếp theo theo một thuật toán đơn giản.

Nếu bạn không biết tên của chuỗi cho một serial , sử dụng hàm chuyên dụng pg_get_serial_sequence() . Có thể được thực hiện một cách nhanh chóng:

INSERT INTO tbl (filename)
VALUES ('my_filename' || currval(pg_get_serial_sequence('tbl', 'tbl_id'))
RETURNING tbl_id;

db <> fiddle here
Sqlfiddle cũ



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để bạn in kết quả của một truy vấn PostgreSQL ở định dạng CSV hoặc TSV từ dòng lệnh?

  2. Docker đợi cho postgresql đang chạy

  3. Sự khác biệt giữa pg_table_size, pg_relation_size &pg_total_relation_size là gì? (PostgreSQL)

  4. Tự động hóa Barman với Puppet:it2ndq / barman (phần hai)

  5. Rails Resque worker không thành công với PGError:máy chủ đóng kết nối đột ngột