I have two tables:
CREATE TABLE tbl_a (
id serial primary key NOT NULL,
name text NOT NULL,
tbl_b_reference NOT NULL
)
CREATE TABLE tbl_b (
id serial primary key NOT NULL,
status text)
I want to do two inserts. One in tbl_b, and then use the id from that insert when I do my insert into tbl_a.
I've tried this:
INSERT INTO tbl_a(name, tbl_b_reference)
VALUES ("myName", (INSERT INTO tbl_b (status) VALUES ('OK') RETURNING id));
but I only get a syntax error pointing at the second "INTO"
ERROR: syntax error at or near "INTO" Position: 68
Where do I go from here and is it possible to do this without writing permanent functions or creating triggers? I'm new to postgres and just know some basics of MySQL/MariaDB. I've been searching around here for other questions related to nested inserts but couldn't find something that I managed to actually use, so code examples would be much appreciated.
You need a common table expression for this kind of insert chaining:
Another option is to simply use the
lastval()
function to reference the last generated sequence value:Note that you must not have any other statements that generate sequence values between those two.
Or use the currval() function:
'tbl_b_id_seq'
is the standard name Postgres uses for a sequence that is created for aserial
column: