sql >> Database teknologi >  >> RDS >> PostgreSQL

Sqlalchemy og PostgreSql:hvordan indstilles primær nøgle manuelt uden konflikter i fremtiden?

Jeg kender ikke til nogen sikker og effektiv måde at gøre, hvad du vil. Du bør virkelig vælge, om du vil definere nøglerne selv eller bruge genererede nøgler og holde dig til den ene eller den anden strategi.

Hvis du ikke har noget imod frygtelig samtidighed, kan du LOCK TABLE thetable , gør dit arbejde, setval tabellens identifikationssekvens til den næste frie værdi efter det, du har indsat, og commit for at frigøre låsen. Det vil dog stadig forårsage problemer med apps, der eksplicit kalder nextval (som mange ORM'er) i stedet for at lade databasen definere værdien ved at udelade den fra ?INSERT kolonneliste eller udtrykkeligt navngive den som DEFAULT .

Ellers kunne du få din kode (eller en PL/PgSQL-hjælperfunktion) til at indsætte i en genforsøgsløkke, der øger nøglen og prøver igen, når den får en integritetsfejl. Denne strategi virker ikke, hvis du skal gøre mere end blot den ene indsættelse pr. transaktion. Desuden i SERIALIZABLE isolationstilstand Jeg tror ikke, du kan gøre det med PL/PgSQL, du skal bruge en genforsøgsløkke på klientsiden for at håndtere serialiseringsfejl.

Det er en frygtelig idé. Brug enten applikationsdefinerede nøgler konsekvent, eller databasedefinerede nøgler konsekvent. Bland ikke de to.




  1. Har Mysql 5 procedurer til håndtering af hierarkiske data?

  2. Indsæt fil i mysql Blob

  3. Hvordan importerer man en mysql-dump, mens man omdøber nogle tabeller/kolonner og slet ikke importerer andre?

  4. Hvordan bruger man ajax til at opdatere mysql db, når afkrydsningsfeltets tilstand ændres?