sql >> Database >  >> RDS >> PostgreSQL

Update volgorde op rij INSERT

Dat is een bekende beperking:reeksen worden verhoogd tijdens de aanroep van de nextval() functie, wat uw standaardwaarde van uw veld is. Wanneer u gegevens aanlevert bij INSERT naar dat veld wordt de uitdrukking van de standaardwaarde niet geëvalueerd, daarom wordt de waarde van de reeks niet aangeraakt.

Een tijdelijke oplossing is om een ​​trigger in te stellen voor/na INSERT om de waarde van de reeks handmatig te corrigeren met setval() . Maar op deze manier zou moet een trigger instellen op UPDATE ook in dat veld, om de waarde van de reeks te corrigeren, wanneer u een bestaande id bijwerkt naar een hogere id.

Een andere oplossing is dat u een opgeslagen functie schrijft, die een beschikbare waarde voor dat veld kan produceren en de standaardwaarde van uw veld op de retourwaarde van die functie kan instellen. Iets, zoals:

LOOP
    result = nextval('my_id_seq');
    EXIT WHEN NOT EXISTS (SELECT * FROM my_table WHERE my_id = result);
END LOOP;
RETURN result;

Maar wees gewaarschuwd:de standaardfunctionaliteit voor sequenties is veilig voor gelijktijdige inserties (de huidige status van de sequentie is globaal - transactie-onafhankelijk). Als je expliciete waarden aan die velden geeft, is dat niet het geval.




  1. Exporteer een grote MySQL-tabel als meerdere kleinere bestanden

  2. Alternatief voor in-operator in mysql

  3. Hoe kan ik mysql-gegevens filteren als een kolom meerdere door komma's gescheiden waarden heeft?

  4. Django AttributeError 'float' object heeft geen attribuut 'split'