sql >> Databasteknik >  >> RDS >> PostgreSQL

Fixa "INSERT har fler uttryck än målkolumner" i PostgreSQL

Om du stöter på ett fel som lyder "INSERT har fler uttryck än målkolumner ” när du försöker infoga data i Postgres beror det på att du försöker infoga data i fler kolumner än vad tabellen faktiskt innehåller.

Du kanske till exempel försöker infoga fyra uttryck i en tabell som bara innehåller tre kolumner.

För att fixa, ta bort det/de extra uttrycket från din INSERT påstående. Med andra ord, se till att du infogar rätt antal kolumner.

Exempel på fel

Anta att vi har en sådan tabell:

+-------+---------+---------+
| petid | petname | pettype |
+-------+---------+---------+
|     1 | Fluffy  | Cat     |
|     2 | Tweet   | Bird    |
+-------+---------+---------+

Den tabellen har tre kolumner.

Anta nu att vi vill infoga ytterligare en rad.

Så här genererar du felet:

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' );
                                                   ^

Här försökte jag infoga fyra uttryck i en tabell som bara har tre kolumner.

Lösning

Lösningen är enkel. Ta bort det extra uttrycket:

INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog' );

Här tog jag bort det sista uttrycket (Brown ) från VALUES lista. Detta resulterade i att raden infogades utan fel.

Eller, för att vara säker på att du inte av misstag infogar data i fel kolumn, kan du uttryckligen ange varje kolumn:

INSERT INTO Pets ( PetId, PetName, PetType ) 
VALUES ( 1, 'Wag', 'Dog' );

Efter att ha kört ett av ovanstående satser ser tabellen nu ut så här:

SELECT * FROM Pets;

Resultat:

+-------+---------+---------+
| petid | petname | pettype |
+-------+---------+---------+
|     1 | Fluffy  | Cat     |
|     2 | Tweet   | Bird    |
|     3 | Wag     | Dog     |
+-------+---------+---------+

Vi har infogat raden i tabellen.


  1. Komma igång med GearHost för MySQL-databasutveckling

  2. Rapportera mer detaljerat än vanligt – Microsoft Access

  3. När är det bättre att lagra flaggor som en bitmask istället för att använda en associativ tabell?

  4. Den parameteriserade frågan förväntar sig parametern som inte angavs