sql >> Databáze >  >> RDS >> PostgreSQL

Oprava „INSERT má více výrazů než cílových sloupců“ v PostgreSQL

Pokud narazíte na chybu, která zní „INSERT má více výrazů než cílových sloupců ” při pokusu o vložení dat do Postgresu je to proto, že se pokoušíte vložit data do více sloupců, než tabulka ve skutečnosti obsahuje.

Můžete se například pokoušet vložit čtyři výrazy do tabulky, která obsahuje pouze tři sloupce.

Chcete-li to opravit, odstraňte nadbytečné výrazy z INSERT prohlášení. Jinými slovy, ujistěte se, že vkládáte správný počet sloupců.

Příklad chyby

Předpokládejme, že máme tabulku podobnou této:

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

Tato tabulka má tři sloupce.

Nyní předpokládejme, že chceme vložit další řádek.

Zde je návod, jak vygenerovat chybu:

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

Výsledek:

ERROR:  INSERT has more expressions than target columns
LINE 1: INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog', 'Brown' );
                                                   ^

Zde jsem se pokusil vložit čtyři výrazy do tabulky, která má pouze tři sloupce.

Řešení

Řešení je snadné. Odstraňte nadbytečný výraz:

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

Zde jsem odstranil poslední výraz (Brown ) z VALUES seznam. To vedlo k bezchybnému vložení řádku.

Nebo, abyste se ujistili, že neúmyslně nevložíte data do nesprávného sloupce, můžete každý sloupec výslovně uvést:

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

Po spuštění jednoho z výše uvedených příkazů nyní tabulka vypadá takto:

SELECT * FROM Pets;

Výsledek:

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

Úspěšně jsme vložili řádek do tabulky.


  1. Správný způsob použití LIKE '%{$var}%' s připravenými příkazy? [mysqli]

  2. Jaký je nejúčinnější způsob, jak zkontrolovat, zda záznam v Oracle existuje?

  3. Funkce PL/pgSQL:Jak vrátit normální tabulku s více sloupci pomocí příkazu execute

  4. Použití zpětných značek kolem názvů polí