I have multiple schemas / user with the same structure but different data. There are some stored functions executed on these data, and so far, they are stored in each schema. I'd like to store these functions together in a new schema, which would make it easier, updating the code, ... as it would be centralized.
I thought, as the search_path
is defined to be "$user",public
it would reference to the user of the current session / connection, hence those also queries from different schemas would ultimately have the same search_path.
let's say I have a table T1
for the users u1, u2, u3
and a function which uses this table F1
.
Originally, F1
would be in copied into the schemas u1, u2, u3
and running select * from F1()
would work for each user. However updating the function would become increasingly difficult with the number of users, so I want to have a new schema functions
with only one F1
function inside.
Now, running select * from functions.F1()
returns an error, that T1
couldn't be found. But the users search_path
s contain still the same information. So why does the search_path change based on the function which is executing it, and how can I prevent it from happening?
There was a mail about this on postgres mailing list: http://postgresql.nabble.com/function-doesn-t-see-change-in-search-path-td4971325.html and the final workaround was my original situation. Maybe something change in the meanwhile?