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
.