Обсуждение: schema creation during initdb

Поиск
Список
Период
Сортировка

schema creation during initdb

От
"sharath kumar"
Дата:
How can I create a schema during initdb time? <br />For example pg_catalog, pg_toast, information_schema are created
duringinitdb time. Likewise I want to create my own schema at initdb time. How can i do it? Also how to create a table
intothis schema at that time itself? <br /><br />Thanks<br />Sharat.<br /> 

Re: schema creation during initdb

От
Andrew Dunstan
Дата:
sharath kumar wrote:
> How can I create a schema during initdb time?
> For example pg_catalog, pg_toast, information_schema are created 
> during initdb time. Likewise I want to create my own schema at initdb 
> time. How can i do it? Also how to create a table into this schema at 
> that time itself?
>
>

This question really does not belong on -hackers, which is about 
postgres development, not usage. Next time use pgsql-general.

You have misunderstood the purpose of initdb, which is to prepare a 
location for running a postmaster against.

After initdb has run there are no user databases yet created (unless you 
count the postgres database).

So you would need to do something like this:
 initdb ... pg_ctl start ... createdb mytemplate psql -c 'create schema foo' mytemplate psql -c 'create table foo.bar
...'mytemplate
 


After that you can do this:
 createdb --template mytemplate newdb

and the newdb will have your schema and table.

HTH

andrew





Re: schema creation during initdb

От
"sharath kumar"
Дата:
Sorry i have put the question wrongly. I wanted to ask if we can create a schema during createdb time so that i have to hide the following from the user.
 psql -c 'create schema foo' mytemplate
 psql -c 'create table foo.bar ...' mytemplate
Whenever a user runs createdb command, the above schema and table should be created automatically.
Thanks,
Sharat.

On 4/18/07, Andrew Dunstan <andrew@dunslane.net> wrote:
sharath kumar wrote:
> How can I create a schema during initdb time?
> For example pg_catalog, pg_toast, information_schema are created
> during initdb time. Likewise I want to create my own schema at initdb
> time. How can i do it? Also how to create a table into this schema at
> that time itself?
>
>

This question really does not belong on -hackers, which is about
postgres development, not usage. Next time use pgsql-general.

You have misunderstood the purpose of initdb, which is to prepare a
location for running a postmaster against.

After initdb has run there are no user databases yet created (unless you
count the postgres database).

So you would need to do something like this:

  initdb ...
  pg_ctl start ...
  createdb mytemplate
  psql -c 'create schema foo' mytemplate
  psql -c 'create table foo.bar ...' mytemplate


After that you can do this:

  createdb --template mytemplate newdb

and the newdb will have your schema and table.

HTH

andrew




Re: schema creation during initdb

От
Heikki Linnakangas
Дата:
sharath kumar wrote:
> Sorry i have put the question wrongly. I wanted to ask if we can create a
> schema during createdb time so that i have to hide the following from the
> user.
> psql -c 'create schema foo' mytemplate
> psql -c 'create table foo.bar ...' mytemplate
> Whenever a user runs createdb command, the above schema and table should be
> created automatically.

You should create a template database with the schema and the tables you 
want. See chapter "19.3. Template Databases" in the user manual:

http://www.postgresql.org/docs/8.2/interactive/manage-ag-templatedbs.html

--   Heikki Linnakangas  EnterpriseDB   http://www.enterprisedb.com


Re: schema creation during initdb

От
NikhilS
Дата:
Hi,

On 4/18/07, sharath kumar <k.sharat@gmail.com> wrote:
Sorry i have put the question wrongly. I wanted to ask if we can create a schema during createdb time so that i have to hide the following from the user.
 psql -c 'create schema foo' mytemplate
 psql -c 'create table foo.bar ...' mytemplate
Whenever a user runs createdb command, the above schema and table should be created automatically.
Thanks,
Sharat.

One way that I can think of doing this would be by adding the details about the new schema and the tables that lie therein in the src/backend/catalog/information_schema.sql file (I dont know if this is the recommended way though). These will end up becoming a part of template1 and any subsequent databases that are created will contain them.

Regards,
Nikhils

--
EnterpriseDB               http://www.enterprisedb.com

Re: schema creation during initdb

От
Andrew Dunstan
Дата:
NikhilS wrote:
>
>
> One way that I can think of doing this would be by adding the details 
> about the new schema and the tables that lie therein in the 
> src/backend/catalog/information_schema.sql file (I dont know if this 
> is the recommended way though). These will end up becoming a part of 
> template1 and any subsequent databases that are created will contain 
> them.
>

Well, *I* wouldn't recommend it. That installed version of that file 
(which if anything is what he should mangle rathwer than the source) is 
really just an implementation artefact.

Why would this be better than either loading the schema+table directly 
into template1 after initdb, or making your own template db and loading 
them into that?

cheers

andrew