There is something still annoying me Scott.. eg: I want to have function that take a string argument that indicates which schema i want to use.
create function testf(varchar) returns ... .. .. .. .. My question is how to use the argument in the function, maybe looks like: select * from $1.test or set search_path to $1 select * from test or maybe I defined a string variable to hold it, workschema='D200402' select * from workschema.test Do they work? Thanks, William >On Wed, 12 May 2004, William Anthony Lim wrote: > >> Christoph, >> >> First, is it safe for multi user? I mean maybe first user need working with >> D200402, second one need with D200403, if I do this in first user connection: >> >> SET search_path to D200402 ; >> >> does it affect to the second user search path? > >No, search paths are session vars. > >> Second, I want it dinamic. So, if I want to using D200402, I just need to pass >> 'D200402' string in the argument of the function. Got my point? > >You should be able to do it with dot notation: > >postgres=# create schema a; >CREATE SCHEMA >postgres=# create schema b; >CREATE SCHEMA >postgres=# create table a.test (info text); >CREATE TABLE >postgres=# create table b.test (info text); >CREATE TABLE >postgres=# insert into a.test values ('abc'); >INSERT 1400496 1 >postgres=# insert into b.test values ('123'); >INSERT 1400497 1 > >-- Now we try to look up the table without setting a search path and no >-- dot notation: > >postgres=# select * from test; >ERROR: relation "test" does not exist >ERROR: relation "test" does not exist > >-- Now we set the search path, notice the order: > >postgres=# set search_path=public,a,b; >SET >postgres=# select * from test; > info >------ > abc >(1 row) > >-- Reverse the order of a and b > >postgres=# set search_path=public,b,a; >SET >postgres=# select * from test; > info >------ > 123 >(1 row) > >-- now without a > >postgres=# set search_path=public,b; >SET >postgres=# select * from test; > info >------ > 123 >(1 row) > >postgres=# set search_path=public,a; >SET >postgres=# select * from test; > info >------ > abc >(1 row) > >-- Now we use dot notation. first a, then b. Notice that >-- b, which isn't in our search path, works fine. > >postgres=# select * from a.test; > info >------ > abc >(1 row) > >postgres=# select * from b.test; > info >------ > 123 >(1 row) > > >> >> Thanks anyway, >> >> William >> >> >> >> >> Hi all, >> >> >> >> I'm just experimenting with schema usage. I'm going to use it as a fake >> >> 'multi-database' system. Is Postgresql support coding schema name using string >> >> variable so I can pass it with parameter? I'm give u an example: >> >> >> >> I have schema: D200401,D200402.D200403,D200404, etc. >> >> >> >> I've set my user just like the schema name, so who login with D200401 will be >> >> using D200401 schema. When someone using D200401 schema, they sometime want to >> >> access another schema, so in my thought I can use variable like this: >> >> >> >> sPointer='D200403' >> >> >> >> select * from sPointer.myTable -- Question: How to write it to work properly? >> >> >> >> Thanks >> >> >> >> >> >> William >> >> >> >> >> >SET search_path to D200401 ; >> >SET search_path to D200402 ; >> >... >> >should do the job. >> > >> >Regards, Christoph >> > >> > >> >---------------------------(end of broadcast)--------------------------- >> >TIP 4: Don't 'kill -9' the postmaster >> > >> >> >> >> Need a new email address that people can remember >> Check out the new EudoraMail at >> http://www.eudoramail.com >> >> ---------------------------(end of broadcast)--------------------------- >> TIP 6: Have you searched our list archives? >> >> http://archives.postgresql.org >> > > >---------------------------(end of broadcast)--------------------------- >TIP 7: don't forget to increase your free space map settings > Need a new email address that people can remember Check out the new EudoraMail at http://www.eudoramail.com ---------------------------(end of broadcast)--------------------------- TIP 2: you can get off all lists at once with the unregister command (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])