Du ser ud til at gå den forkerte vej. Dit originale, normaliserede skema er typisk overlegent. Hvis du har brug for at vise butik / bruger, skal du oprette en VIEW .
Men du har måske dine grunde, så her kommer:
UPDATE purchases p
SET (shop, shop_user) = (s.name, s."user")
FROM shop s
WHERE s.id = p.shop_id;
Brug ikke det reserverede ord "user" som identifikator.
Og "navn" er næppe nogensinde et godt navn , enten.
Og varchar(255) i Postgres indikerer typisk en misforståelse.
Om varchar(255) :
varchar(255) - Skal jeg tilføje en vilkårlig længdegrænse til VARCHAR-kolonner?
- Er der nogen ulemper ved at bruge datatypen "tekst" til lagring af strenge?
- Flere detaljer i manualen.