Hvis du støder på en fejl, der lyder "INSERT har flere udtryk end målkolonner ” når du forsøger at indsætte data i Postgres, er det fordi du forsøger at indsætte data i flere kolonner, end tabellen faktisk indeholder.
For eksempel forsøger du måske at indsætte fire udtryk i en tabel, der kun indeholder tre kolonner.
For at rette det, skal du fjerne det/de ekstra udtryk fra din INSERT
udmelding. Med andre ord, sørg for, at du indsætter det korrekte antal kolonner.
Eksempel på fejl
Antag, at vi har en tabel som denne:
+-------+---------+---------+ | petid | petname | pettype | +-------+---------+---------+ | 1 | Fluffy | Cat | | 2 | Tweet | Bird | +-------+---------+---------+
Den tabel har tre kolonner.
Antag nu, at vi vil indsætte en anden række.
Sådan genererer du fejlen:
INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog', 'Brown' );
Resultat:
ERROR: INSERT has more expressions than target columns LINE 1: INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog', 'Brown' ); ^
Her forsøgte jeg at indsætte fire udtryk i en tabel, der kun har tre kolonner.
Løsning
Løsningen er nem. Fjern det ekstra udtryk:
INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog' );
Her fjernede jeg det sidste udtryk (Brown
) fra VALUES
liste. Dette resulterede i, at rækken blev indsat uden fejl.
Eller for at sikre, at du ikke ved et uheld indsætter data i den forkerte kolonne, kan du udtrykkeligt angive hver kolonne:
INSERT INTO Pets ( PetId, PetName, PetType )
VALUES ( 1, 'Wag', 'Dog' );
Efter at have kørt en af ovenstående sætninger, ser tabellen nu sådan ud:
SELECT * FROM Pets;
Resultat:
+-------+---------+---------+ | petid | petname | pettype | +-------+---------+---------+ | 1 | Fluffy | Cat | | 2 | Tweet | Bird | | 3 | Wag | Dog | +-------+---------+---------+
Vi har indsat rækken i tabellen.