상세 컨텐츠

본문 제목

template1 데이타베이스 설명

프로그래밍/DB

by 라제폰 2008. 12. 23. 08:48

본문

template1 데이타베이스 설명
  [주 효식, http://ngd.pe.kr, nogadax@kldp.org, 2001,03,23 ]

  Test Env
  • PostgreSQL 7.0.3
  • Alzza Linux 6.2

template1 이해하기 

"template1" 데이타베이스는 포스트그레스의 "initdb"명령을 통해 제일 처음 
생성되는 데이타베이스이다. 새로 생성되는 데이타베이스들을 위한 기본적인 
틀(template) 역할을 한다. 

다음의 예에서 $PGDATA 를 삭제한다. 만약 자신의 중요한 데이타를 가지고 
있는 데이타베이스가 있다면 이 예는 그냥 눈으로만 보고 따라하지 말기를 
바란다. -- 주의 요망 

template1 은 처음 생성되는 데이타베이스에게 자신의 속성을 제공하여 
상속케한다. 또한 template1이 소유한 테이블 중 사용자가 작성한 테이블이 
있다면 이 또한 새로 생성되는 데이타베이스에 상속된다. (감히 필자는 이를 
상속이라 한다. 이 또한 주의 요망..)

다음은 template1의 상속 예를 보여준다. 

 $ su - postgres
 $ pg_ctl stop
 $ rm -rf /usr/local/pgsql/data
 $ export PGDATA=/usr/local/pgsql/data2
 $ initdb -E EUC_KR
 $ initlocation PGDATA2
 
위의 과정을 거치면서 포스트그레스는 물리적으로 서로 다른 데이타베이스 
저장소를 가진다. (PGDATA, PGDTA2)

 $ pg_ctl start

 $ createlang plpgsql template1
  CREATE LANGUAGE

 $ psql template1
  ...
  template1=# create table temp_tab (
     id_temp int4 ,
     name_temp text
  );
  CREATE
  template1=# \q
 $

 $ createdb ngd_db1
  CREATE DATABASE

 $ createdb ngd_db2 -D 'PGDATA2'
  CREATE DATABASE

 $ psql ngd_db1
  ...
  ngd_db1=# \d
        List of relations
     Name    |   Type   |  Owner
  -----------+----------+----------
   temp_tab  |   table  | postgres
  (1 row)
  
  ngd_db1=# select * from pg_database;
    lananem   |..| lancompiler
  ------------+--+--------------
    internal  |..| n/a
    C         |..| /bin/cc
    sql       |..| postgres
    plpgsql   |..| PL/pgSQL
    (4 rows)

  ngd_db1=# \q

$ psql ngd_db2
  ...
  ngd_db2=# \d
        List of relations
     Name    |   Type   |  Owner
  -----------+----------+----------
   temp_tab  |   table  | postgres
  (1 row)
  
  ngd_db2=# select * from pg_database;
    lananem   |..| lancompiler
  ------------+--+--------------
    internal  |..| n/a
    C         |..| /bin/cc
    sql       |..| postgres
    plpgsql   |..| PL/pgSQL
    (4 rows)

  ngd_db2=# \q
 $

관련글 더보기