PostgreSQL은 관계형 DBMS의 기본적인 기능인 트랜잭션과 ACID(Atomicity, Consistency, Isolation, Durability)를 지원한다. 또한 ANSI SQL:2008 규격을 상당 부분 만족시키고 있으며, 전부를 지원하는 것을 목표로 현재도 기능이 계속 추가되고 있다.
또한 PostgreSQL은 기본적인 신뢰도와 안정성을 위한 기능뿐만 아니라 진보적인 기능이나 학술적 연구를 위한 확장 기능도 많이 가지고 있다. PostgreSQL의 기능을 대략적으로 열거해 보더라도 상당히 많은 기능을 가지고 있음을 알게 된다.
-프로세스 구조
PostgreSQL 의 프로세스 구조를 간단히 살펴보면 다음과 같다.
클라이언트는 인터페이스 라이브러리(libpg, jdbc, odbc 등의 다양한 인터페이스)를 통해 서버와의 연결을 요청(1)하면, Postmaster 프로세스가 서버와의 연결을 중계(2)한다. 이후 클라이언트는 할당된 서버와의 연결을 통해 질의를 수행(3)한다. (위 그림)
서버 내부의 질의 수행 과정을 간단히 살펴보면 다음과 같다.
-쿼리 수행 절차
클라이언트로부터 질의 요청이 들어오면 구문 분석 과정(1)을 통해 Parse Tree를 생성하고 의미 분석 과정(2)를 통해 새로운 트랜잭션을 시작하고 Query Tree를 생성한다.
이후 서버에 정의된 Rule에 따라 Query Tree가 재 생성(3)되고 실행 가능한 여러 수행 계획 중 가장 최적화된 Plan Tree를 생성(4)한다. 서버는 이를 수행(5)하여 요청된 질의에 대한 결과를 클라이언트로 전달하게 된다(그림 6).
서버의 쿼리 수행 과정에서는 데이터베이스 내부의 시스템 카탈로그가 많이 사용되는데, 사용자가 함수나 데이터 타입은 물론 인덱스 접근 방식 및 RULE등을 시스템 카탈로그에 직접 정의할 수 도 있다. 따라서 postgreSQL 에서는 이것이 기능을 새로 추가하거나 확장하는데 있어 중요한 포인트로 활용된다.
데이터가 저장되는 파일들은 여러 개의 페이지들로 구성되며, 하나의 페이지는 확장 가능한 slotted page 구조를 가진다.(아래의 그림2개)
-데이터 페이지 구조
-인덱스 페이지 구조
PostgreSQL의 개발 모델은 다음의 문장으로 설명할 수 있다.
"소수 주도의 커뮤니티 기반 오픈 소스 프로젝트"
이는 Linux, Apache, Eclipse 프로젝트와 같이 소수의 관리자와 다양한 개발자 그리고 다수의 사용자가 프로젝트 구성우너을 이루고 있으며, 소수의 관리자 그룹(Core Team)은 다수의 사용자로부터의 요청과 피드백을 수집(우선순위를 정하기 위해 투표 방식을 활용하기도 한다. 자세한 내용은 http://postgresql.uservoice.com 를 참조)하여 제품의 방향을 결정하고 코드의 최종 승인 및 릴리스 권한을 행사한다(MySQL 또는 JBoss와 같은 기업 관리형 개발 프로세스와는 다른 모델로 분류됨).
http://www.gurubee.net/lecture/2942
PostgreSQL의 DB는 여러개의 schema들로 구성되어 있습니다. shema는 object들의 논리적인 집합을 말합니다.
shema는 table, view, sequence, synonym, domain, function 등의 object들로 구성되어 있습니다. 이러한 DATABASE들과 USER/GROUPS, TABLESPACES들이 모여 CLUSTER를 구성합니다.
postgreSQL에는 스키마를 따로 관리한다.
mysql에서의 스키마는 단순히 형식을 나타내지만,
postgreSQL에서 스키마는 데이터베이스와 같은 하나의 단위를 나타내는것 같다.
스키마는 데이터베이스보다 상위 단위이고, mysql에서의 데이터베이스와 동일하다고 이해하면 된다고 한다.
http://blog.naver.com/PostView.nhn?blogId=seuis398&logNo=70097173659&categoryNo=48&viewDate=¤tPage=1&listtype=0
MySQL에서의 데이터베이스(Database) 개념은 PostgreSQL에서 스키마(Schema) 개념과 유사하다.
SELECT * FROM PG_SHADOW;
DB생성 권한을 설정하여 TEST3
계정 생성
postgres=# CREATE USER TEST3 PASSWORD 'TEST3' CREATEDB;
CREATE ROLE
#http://www.gurubee.net/lecture/2939
데이터베이스 목록
이름 | 소유주 | 인코딩 | Collate | Ctype | 액세스 권한
-----------+----------+--------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | ko_KR.UTF-8 | ko_KR.UTF-8 |
template0 | postgres | UTF8 | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3개 행)
mysql의 SQL과 동일하다.