Ok, I didn't know, but I found out that this is ok:
update foo set pkey = (select page_id from bar b
where b.a_field = another_table.a_field);
But this is not:
update foo set pkey = (select page_id from bar b,another_table at
where b.a_field = at.a_field);
Something to do with more than one tuple being returned although both queries return the exact same thing to my eyes.