sql >> Databáze >  >> RDS >> PostgreSQL

Postgres nevrací lastval() správně

Zde je zkrácená verze pomocí nekvalifikovaného lastval je špatný nápad. Spouštěče, pravidla atd. mohou způsobit problémy.

Měli byste se vyhnout lastval zcela. Použijte:

BEGIN;

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

kde id by měl podle názvu vygenerovaného sloupce klíče.

Tento přístup bude zpracovávat vklady s více hodnotami a INSERT INTO ... SELECT ... správně a nebudou mít problémy se spouštěči dotýkajícími se sekvencí.

Pokud musíte použít přístup založený na volání funkcí, použijte alespoň currval('tablename_id_seq') (předání příslušného názvu sekvence) namísto lastval .




  1. Jak vložit francouzské znaky do tabulky mySQL DB?

  2. Problémy s kompatibilitou s Oracle OCCI a g++ 7.1

  3. Potřebné rady ohledně struktury databáze

  4. Jak sdílet tabulku mezi více databázemi Postgresql