PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres nie zwraca poprawnie lastval()

Krótka wersja tutaj jest taka, że ​​przy użyciu niewykwalifikowanego lastval to zły pomysł. Wyzwalacze, reguły itp. mogą powodować problemy.

Powinieneś unikać lastval całkowicie. Użyj:

BEGIN;

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

gdzie id powinien zawierać nazwę wygenerowanej kolumny klucza.

Takie podejście obsłuży wielowartościowe wstawki i INSERT INTO ... SELECT ... poprawnie i nie będzie miał problemów z wyzwalaczami dotykającymi sekwencji.

Jeśli musisz użyć podejścia opartego na wywołaniu funkcji, użyj przynajmniej currval('tablename_id_seq') (przekazując odpowiednią nazwę sekwencji) zamiast 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. Najlepsze materiały szkoleniowe i szkoleniowe dotyczące PostgreSQL

  2. Nazwa elementu XML z danych w Postgres

  3. Django haystack z Elasticsearch nie może znaleźć bazy danych podczas przebudowy indeksu

  4. PostgreSQL 8.4 przyznaje uprawnienia DML do wszystkich tabel do roli

  5. Czysty sposób na korzystanie z funkcji okna postgresql w django ORM?