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

PostgreSQL следващата стойност на последователностите?

RETURNING

Това е възможно с единично двупосочно пътуване към базата данни:

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

tbl_id обикновено е serial или IDENTITY (Postgres 10 или по-нова версия) колона. Повече в ръководството.

Изрично извличане на стойност

Ако filename трябва да включва tbl_id (излишно), все още можете да използвате една заявка.

Използвайте lastval() или по-конкретният currval() :

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

Вижте:

  • Референтна стойност на серийната колона в друга колона по време на същото INSERT

Ако няколко последователности могат да бъдат напреднали в процеса (дори чрез задействания или други странични ефекти), сигурно начинът е да използвате currval('tbl_tbl_id_seq') .

Име на последователността

Стринговият литерал 'tbl_tbl_id_seq' в моя пример се предполага, че е действителният име на последователността и се прехвърля към regclass , което поражда изключение, ако не може да бъде намерена последователност от това име в текущия search_path .

tbl_tbl_id_seq е автоматично генерираното по подразбиране за таблица tbl със серийна колона tbl_id . Но няма гаранции. Една колона по подразбиране може да извлича стойности от всякак последователност, ако е така дефинирана. И ако името по подразбиране е взето при създаването на таблицата, Postgres избира следващото безплатно име според прост алгоритъм.

Ако незнате името на последователността за serial колона, използвайте специалната функция pg_get_serial_sequence() . Може да се направи в движение:

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

db<>цигулка тук
Стар sqlfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да свържете две таблици в поле за външен ключ, използвайки django ORM?

  2. Връщане на стойности на колона преди АКТУАЛИЗАЦИЯ, използвайки само SQL

  3. Как да получите първи ред на група в PostgreSQL

  4. PostgreSQL създаде таблица, ако не съществува

  5. sql ПОРЪЧАЙТЕ ПО множество стойности в определен ред?