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
.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With