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

Postgres не връща правилно lastval().

Кратката версия тук е използването на неквалифициран lastval е лоша идея. Задействания, правила и т.н. могат да причинят проблеми.

Трябва да избягвате lastval изцяло. Използвайте:

BEGIN;

INSERT INTO "users" ("email", "first_name", "last_name", "password", "objectstate_id", "activate_rid") 
VALUES ('[email protected]', 'Xpress', 'Care', 'f9fecdd84ee071806423adf30d6d6ff04e1a0a2c6688f2c057ddbab1d6b55d02', 4, 'EMQHTMMvViAB5BdYj0E6') 
RETURNING id;

където id трябва по името на генерираната ключова колона.

Този подход ще обработва многостойностни вмъквания и INSERT INTO ... SELECT ... правилно и няма да има проблеми със задействания, докосващи последователности.

Ако трябва да използвате подход, базиран на извикване на функция, използвайте поне currval('tablename_id_seq') (подаване на подходящото име на последователност) вместо lastval .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Psycopg2 използва памет за голяма заявка за избор

  2. Защо не мога да използвам променлива в команда с обратна наклонена черта на postgres (\COPY)

  3. За да използвате друга таблица като критерий WHERE в SQL

  4. Показване на избраните резултати вертикално в psql, както се прави от \G на MySQL

  5. Грешно кодиране между Spring и PostgreSQL