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

Rette "INSERT har flere udtryk end målkolonner" i PostgreSQL

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.


  1. Forstå MySQL's nye hedebølge

  2. Afkorte alle tabeller i en MySQL-database i én kommando?

  3. Indsættelse af en liste<> i SQL Server-tabel

  4. Hvorfor er IS NOT NULL falsk, når du tjekker en rækketype?