PostgreSQL ERROR: INSERT has more target columns than expressions, when it doesn't

Remove the extra () :

INSERT INTO parts_finishing 
(
 id_part, id_finish, id_metal, id_description, 
 date, inside_hours_k, inside_rate, outside_material
) VALUES 
  ('1013', '6', '30', '1', NOW(), '0', '0', '22.43')
, ('1013', '6', '30', '2', NOW(), '0', '0', '32.45')
  ;

the (..., ...) in Postgres is the syntax for a tuple literal; The extra set of ( ) would create a tuple of tuples, which makes no sense.

Also: for numeric literals you don't want the quotes:

(1013, 6, 30, 1, NOW(), 0, 0, 22.43)
, ...

, assuming all these types are numerical.


I had a similar problem when using SQL string composition with psycopg2 in Python, but the problem was slightly different. I was missing a comma after one of the fields.

INSERT INTO parts_finishing
(id_part, id_finish, id_metal)
VALUES (
    %(id_part)s <-------------------- missing comma
    %(id_finish)s,
    %(id_metal)s
);

This caused psycopg2 to yield this error:

ERROR: INSERT has more target columns than expressions.


This happened to me in a large insert, everything was ok (comma-wise), it took me a while to notice I was inserting in the wrong table of course the DB does not know your intentions. Copy-paste is the root of all evil ... :-)


I faced the same issue as well.It will be raised, when the count of columns given and column values given is mismatched.


I have the same error on express js with PostgreSQL

I Solved it. This is my answer.

error fire at the time of inserting record.

error occurred due to invalid column name with values passing

error: INSERT has more target columns than expressions

ERROR : error: INSERT has more target columns than expressions name: 'error', length: 116, severity: 'ERROR', code: '42601', detail: undefined, hint: undefined, position: '294', internalPosition: undefined, internalQuery: undefined, where: undefined, schema: undefined, table: undefined, column: undefined, dataType: undefined, constraint: undefined, file: 'analyze.c', line: '945',

here is my code dome

INSERT INTO student(
  first_name, last_name, email, phone
) 
VALUES 
  ($1, $2, $3, $4), 
values 
  : [ first_name, 
  last_name, 
  email, 
  phone ]