Re: Naive schema questions

From: Jan Wieck <JanWieck(at)Yahoo(dot)com>
To: Rory Campbell-Lange <rory(at)campbell-lange(dot)net>
Cc: Postgresql General List <pgsql-general(at)postgresql(dot)org>
Subject: Re: Naive schema questions
Date: 2004-05-27 12:18:14
Message-ID: 40B5DC86.9030802@Yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 5/27/2004 7:15 AM, Rory Campbell-Lange wrote:

> I have a number of web applications which have a large amount of their
> logic written in plpgsql. For each particular application I have a
> separate instance of a database. If I need to update functions I have to
> connect to each database and then run \i fn_function_update.sql.
>
> I imagined schemas might allow me to globally update functions across a
> database hosting many schemas with the same structure. In this scenario
> my webapp would always connect to the same database, but address
> different schemas, so that
>
> mysolution.schema_A.people would be addressed for site 'A'
> and
> mysolution.schema_B.people would be addressed for site 'B'
>
> (I'm assuming here that I can set the context of the schema at
> connection by a plpgsql line that sets the current search path.)

That is so.

>
> However
>
> Schemas also contain other kinds of named objects, including data
> types, functions, and operators.
> (html reference: ddl-schemas.html)
>
> seems to suggest that the functions are schema specific.

It is even better. The property that set's your "schema context" is
called search_path. This contains a list of schema names. For an
unqualified (schema name not explicitly given) object, be that a table,
sequence, view, function or whatever, the system looks in all those
schemas in that particular order and uses the first found.

With that, you can have your common or shared objects in a central
schema "schema_common", and everything that's application specific in
"schema_A", "schema_B". The connection just has to set the search_path
at the beginning with

set search_path = schema_A, schema_common;

and done.

>
> I suppose I'm trying to think of how I might implement the second point
> in this list (also from dd-schemas.html):
>
> There are several reasons why one might want to use schemas:
> - To allow many users to use one database without interfering with
> each other.
> - To organize database objects into logical groups to make them more
> manageable.
> - Third-party applications can be put into separate schemas so they
> cannot collide with the names of other objects.

Yes, yes and yes. Plus the ability for you to do cross database joins
for global analyzing for example.

Jan

--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#================================================== JanWieck(at)Yahoo(dot)com #

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Nick Barr 2004-05-27 12:32:14 Re: Naive schema questions
Previous Message Peter Eisentraut 2004-05-27 12:10:35 Re: Naive schema questions