[odb-users] Different database schemas - postgresql

Boris Kolpackov boris at codesynthesis.com
Tue Dec 13 10:18:11 EST 2011


Hi Konstantin,

Konstantin Mikhailov <ekimka at gmail.com> writes:

> Is it possible to specify different database schema
> for different persistent objects/tables?

No, not yet. But we have been thinking about adding this 
support for some time now.


> We need simulanteous access to the tables located in the
> different schemas.

What will be the best way to implement the mapping of objects
to schemas in your case? We have thought of three mechanisms:

1. By specifying the schema in the 'db table' pragma, as you
   have already tried:

   #pragma db object table("myschema.test")

   Or, to just specify the schema name and get the auto-derived
   table name:
    
   #pragma db object table("myschema.")

2. By mapping a C++ namespace to a database schema. This will
   result in all the persistent classes in this namespace having
   tables in this schema. The syntax is not yet finalized, but
   it could look something like this:

   #pragma db namespace database("myschema")
   namespace N
   {
     ...
   }

   Or:

   #pragma db namespace(N) database("myschema")

   While something like this might seem more natural:

   #pragma db namespace(N) schema("myschema")

   We don't want to use the term 'schema' because (a) not all
   databases have this notion (some, like MySQL and SQLite use
   the term 'database' for this while others, like SQL Server
   can have much more that just the schema appearing before
   the table, as in: server.db.schema.table) and (b) the term
   schema is quite overloaded (i.e., we also generate a "database
   schema"). So, instead, we are thinking of using a more neutral
   'database namespace' term. So in the above example, the more
    verbose alternative would be:

   #pragma db namespace(N) database_namespace("myschema")


3. By specifying the schema on the command line, for example,
   with with the --database-namespace option:

   --database-namespace myschema

   This will lead to all the classes in this header that don't
   have a schema assigned using one of the above two methods,
   having tables in myschema.

Which option will work best for your case?

Boris



More information about the odb-users mailing list