dbTalk Databases Forums  

working with schema

comp.databases.postgresql.sql comp.databases.postgresql.sql


Discuss working with schema in the comp.databases.postgresql.sql forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
William Anthony Lim
 
Posts: n/a

Default working with schema - 05-10-2004 , 03:10 AM






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


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 majordomo (AT) postgresql (DOT) org)


Reply With Quote
  #2  
Old   
William Anthony Lim
 
Posts: n/a

Default Re: working with schema - 05-12-2004 , 05:19 AM






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?

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?

Thanks anyway,

William

Quote:
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



Reply With Quote
  #3  
Old   
scott.marlowe
 
Posts: n/a

Default Re: working with schema - 05-12-2004 , 08:59 AM



On Wed, 12 May 2004, William Anthony Lim wrote:

Quote:
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.

Quote:
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)


Quote:
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



Reply With Quote
  #4  
Old   
William Anthony Lim
 
Posts: n/a

Default Re: working with schema - 05-13-2004 , 12:25 AM



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

Quote:
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 majordomo (AT) postgresql (DOT) org)



Reply With Quote
  #5  
Old   
Christoph Haller
 
Posts: n/a

Default Re: working with schema - 01-21-2006 , 07:26 AM



Quote:
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



Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.