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

postgresql

So I'm starting with this…

SELECT * FROM parts_finishing;

…I get this…

id, id_part, id_finish, id_metal, id_description, date,
inside_hours_k, inside_rate, outside_material

(0 rows)

…so everything looks fine so far so I do this…

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

…and I get…

ERROR: INSERT has more target columns than expressions

Now I've done a few things like ensuring numbers aren't in quotes, are in quotes (would love a table guide to that in regards to integers, numeric types, etc) after I obviously counted the number of column names and values being inserted. I also tried making sure that all the commas are commas…really at a loss here. There are no other columns except for id which is the bigserial primary key.

Best Solution

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.