So you can do things like SELECT col_a, col_b FROM identifier('a_table_name')
or as a bind variable SELECT col_a, col_b FROM identifier($1)
Which is their way of avoiding SQL injection attacks in some circumstances. Their implementation of it is a bit uneven, but it has proven useful for my work.
I can see where this obviously would prevent the planning of a prepared statement when a table name is a parameter, but the request comes up often enough, and the benefits to avoiding SQL injection attacks are significant enough that maybe we should try to enable it for one-off. I don't necessarily think we need an identifier(string) function, a 'schema.table'::regclass would be more our style.
Is there anything preventing us from having the planner resolve object names from strings?
The basic problem is fact so when you use PREPARE, EXECUTE protocol, you has not parameters in planning time.