sql >> Database >  >> RDS >> PostgreSQL

FOUT:meer dan één eigendomsreeks gevonden in Postgres

Bijwerken: Deze bug is opgelost in PostgreSQL v12 met commit 19781729f78 .
De rest van het antwoord is relevant voor oudere versies.

Een serial kolom heeft een reeks die eigendom is van de kolom en een DEFAULT waarde die de netto reekswaarde krijgt.

Als u die kolom probeert te wijzigen in een identiteitskolom, krijgt u een foutmelding dat er al een standaardwaarde voor de kolom is.

Nu moet je de standaardwaarde hebben laten vallen, maar niet de reeks die bij de serial hoort kolom. Toen u de kolom vervolgens in een identiteitskolom converteerde, werd een tweede reeks gemaakt die eigendom is van de kolom.

Wanneer u nu een rij probeert in te voegen, probeert PostgreSQL de . te vinden en te gebruiken reeks die eigendom is van de kolom, maar er zijn er twee, vandaar de foutmelding.

Ik zou beweren dat dit een bug is in PostgreSQL:naar mijn mening had het ofwel de bestaande reeks voor de identiteitskolom moeten herbestemmen of u een foutmelding moeten geven dat er al een reeks is die eigendom is van de kolom, en u zou deze moeten laten vallen. Ik zal proberen deze bug te verhelpen .

Ondertussen moet u de achtergebleven reeks handmatig verwijderen uit de serial column.Voer de volgende zoekopdracht uit:

SELECT d.objid::regclass
FROM pg_depend AS d
   JOIN pg_attribute AS a ON d.refobjid = a.attrelid AND
                             d.refobjsubid = a.attnum
WHERE d.classid = 'pg_class'::regclass
  AND d.refclassid = 'pg_class'::regclass
  AND d.deptype <> 'i'
  AND a.attname = 'patientid'
  AND d.refobjid = 'patient'::regclass;

Dat zou je de naam moeten geven van de reeks die is achtergelaten uit de serial kolom. Laat het vallen en de identiteitskolom zou zich naar wens moeten gedragen.



  1. Hoe exporteer ik alle gegevens van een tabel naar een invoegbaar sql-formaat?

  2. MySQL - case-statement optimaliseren

  3. Hoe de maxrecursion-optie voor een CTE in een Table-Valued-Function in te stellen?

  4. exclusieve mySQL-records