PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Correção “INSERT tem mais expressões do que colunas de destino” no PostgreSQL


Se você encontrar um erro que diz “INSERT tem mais expressões do que colunas de destino ” ao tentar inserir dados no Postgres, é porque você está tentando inserir dados em mais colunas do que a tabela realmente contém.

Por exemplo, você pode estar tentando inserir quatro expressões em uma tabela que contém apenas três colunas.

Para corrigir, remova a(s) expressão(ões) extra(s) do seu INSERT demonstração. Em outras palavras, certifique-se de inserir o número correto de colunas.

Exemplo de erro


Suponha que temos uma tabela como esta:
+-------+---------+---------+
| petid | petname | pettype |
+-------+---------+---------+
|     1 | Fluffy  | Cat     |
|     2 | Tweet   | Bird    |
+-------+---------+---------+

Essa tabela tem três colunas.

Agora, suponha que queremos inserir outra linha.

Veja como gerar o erro:
INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog', 'Brown' );

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

Aqui, tentei inserir quatro expressões em uma tabela que possui apenas três colunas.

Solução


A solução é fácil. Remova a expressão extra:
INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog' );

Aqui, eu removi a última expressão (Brown ) de VALUES Lista. Isso resultou na inserção da linha sem erros.

Ou, para garantir que você não insira dados inadvertidamente na coluna errada, você pode declarar explicitamente cada coluna:
INSERT INTO Pets ( PetId, PetName, PetType ) 
VALUES ( 1, 'Wag', 'Dog' );

Depois de executar uma das instruções acima, a tabela agora se parece com isso:
SELECT * FROM Pets;

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

Inserimos com sucesso a linha na tabela.