Postgres 9.1+ database contains customers and product. In customers table, customer price is described as sql expression in priceexpression column for every customer.
H
You can't do this with plain SQL in PostgreSQL.
You'll need to use dynamic SQL with PL/PgSQL's EXECUTE
statement. See PL/PgSQL and the many examples here on Stack Overflow.
Loop over the result set and EXECUTE 'SELECT '||the_expression INTO resultvar;
for each row.
Be aware that this is a massive security hole if anyone who isn't truested to run raw SQL can possibly modify the price column. You should really not do this.
you can write an SQL function that does this for you and use e.g. the ones supplied with postgres-utils:
select
c.name as cust_name,
p.name as prod_name,
p.cost as prod_cost,
eval(
'select '||c.price_expression||' from product where id=:pid',
'{"{cost}",:pid}',
array[ p.cost, p.id ]
) as cust_cost
from product p, customer c
But of course it may be slow, insecure, you could use materialized views to cache it more easily, etc. - see docu there.