/********************************************************************************************
-- Title : [9.2] 데이터베이스 관리 - ver.dBRang
-- Reference : www.postgresql.org/docs/current/static/managing-databases.html
-- Key word : create database template0 template1 postgres alter database drop database
********************************************************************************************/
-- 데이터베이스 확인
=# select d.oid "db_id", d.datname "db_nm", d.datacl "privilege"
, d.datdba "ownr_id", pg_get_userbyid(d.datdba) "ownr_nm"
, pg_size_pretty(pg_database_size(d.datname)) "db_sz"
, dattablespace "tbs_id"
, t.spcname "dflt_tbs_nm"
from pg_database d
inner join pg_tablespace t
on d.dattablespace = t.oid;
-- 설치시 initdb로 인한 데이터베이스 생성
ㅇ postgres : initdb에 최초 저장 내역(시스템 Catalog?) 저장
ㅇ template1 : create database시 복사하는 template, SQL Server의 MODEL DB와 유사.
ㅇ template0 : template1의 복사본, template1을 변경시켰을 때 원본 필요시 사용.
template1에 문제 발생시 template0으로 초기화.
-- DB 생성 Synopsis
=# CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace_name ]
[ CONNECTION LIMIT [=] connlimit ] ]
※ 참조 : www.postgresql.org/docs/current/static/sql-createdatabase.html
=# ALTER DATABASE name [ [ WITH ] option [ ... ] ] where option can be: CONNECTION LIMIT connlimit; ALTER DATABASE name RENAME TO new_name; ALTER DATABASE name OWNER TO new_owner; ALTER DATABASE name SET TABLESPACE new_tablespace; ALTER DATABASE name SET configuration_parameter { TO | = } { value | DEFAULT }; ALTER DATABASE name SET configuration_parameter FROM CURRENT; ALTER DATABASE name RESET configuration_parameter; ALTER DATABASE name RESET ALL;
※ 참조 : www.postgresql.org/docs/current/static/sql-alterdatabase.html
=# DROP DATABASE [ IF EXISTS ] name;
ㅇ DB 생성
=# create database mydb
owner = mapbak
tablespace = pg_default;
ㅇ pgAdmin III Script
CREATE DATABASE postgres
GRANT CONNECT, TEMPORARY ON DATABASE postgres TO public;
-- 데이터베이스 수정
ㅇ DB 수정 Synopsis
=# ALTER DATABASE name [ [ WITH ] option [ ... ] ]
where option can be: CONNECTION LIMIT connlimit; ALTER DATABASE name RENAME TO new_name; ALTER DATABASE name OWNER TO new_owner; ALTER DATABASE name SET TABLESPACE new_tablespace; ALTER DATABASE name SET configuration_parameter { TO | = } { value | DEFAULT }; ALTER DATABASE name SET configuration_parameter FROM CURRENT; ALTER DATABASE name RESET configuration_parameter; ALTER DATABASE name RESET ALL;
※ 참조 : www.postgresql.org/docs/current/static/sql-alterdatabase.html
=# alter database mydb rename to mydb2;
ㅇ 소유자 변경
=# alter database mapbak owner to mapbak2;
ㅇ Configuration 변경
=# alter database mydb2 set enable_indexscan to off;
ㅇ 테이블스페이스 변경
=# alter database mydb2 set tablespace tbs_mydb;
ㅇ 디폴트 테이블스페이스 변경
=# alter database mydb2 set default_tablespace = 'tbs_mydb';
-- 데이터베이스 삭제
ㅇ DB 삭제 Synopsis
=# DROP DATABASE [ IF EXISTS ] name;
ㅇ DB 삭제
=# drop database mydb2;
-- CREATE DATABASE 구문의 tablespace와 ALTER DATABASE 구문의 default_tablespace 차이
ㅇ create~tablespace는 DB생성시 필요한 시스템 카탈로그를 저장하는 위치.
ㅇ alter~default_tablespace는 사용자 object 저장하는 default 위치.
ㅇ 라고 파악되지만 몰렁..ㅡ.ㅜ
-- mydb 초기 생성
# mkdir -p /home/backup
# mkdir -p /home/database/ARCHIVE
# mkdir -p /home/database/tbs_data0
# chown -R postgres.postgres /home/database
=# create role mapbak login password '{pwd}' superuser;
=# create tablespace tbs_data0
owner mapbak
location '/home/database/tbs_data0';
=# create database mydb
owner = mapbak
tablespace = tbs_data0;