**PostgreSQL**은 확장 가능성 및 표준 준수를 강조하는 객체-관계형 데이터베이스 관리 시스템(ORDBMS)의 하나이다. BSD 허가권으로 배포되며 오픈소스 개발자 및 관련 회사들이 개발에 참여하고 있다. 데이터베이스 서버로서 주요 기능은 데이터를 안전하게 저장하고 다른 응용 소프트웨어로부터의 요청에 응답할 때 데이터를 반환하는 것이다.
소규모의 단일 머신 애플리케이션에서부터 수많은 동시 접속 사용자가 있는 대형의 인터넷 애플리케이션(또는 데이터 웨어하우스용)에 이르기까지 여러 부하를 관리할 수 있으며 macOS 서버의 경우 PostgreSQL은 기본 데이터베이스이다. 마이크로소프트 윈도우, 리눅스(대부분의 배포판에서 제공됨)용으로도 이용 가능하다.

이름
--

PostgreSQL이라는 이름의 어감이 생소해서 발음할 때 멈칫거리게 만들지만 발음은 생각보다 쉽다. [포ː스트그레스큐ː엘] 조금 더 짧게 "포스트그레스큐엘"이라고 발음 하면 된다. 일부 프로그래머들 사이에는 "포스트그리 에스큐엘"이라고 불린다. 이전에는 일반적으로 "Postgres"라고만 불렸지만 표준 SQL을 지원하기 시작하면서 공동체에서 "Postgres"라는 이름 뒤에 SQL을 뒤에 덧붙인 것이다. 실제로 프로젝트의 공식적인 명칭은 "post-Ingres" 데이터베이스이다.

발자취
---

PostgreSQL은 캘리포니아대학교 버클리 분교에서 시작된 Ingres 프로젝트로부터 시작되었다. 프로젝트 리더인 Michael Stonebraker는 1982년 Ingres의 상용화를 위해 학교를 떠났다.

그 후, 1985년에 다시 학교로 돌아온 그는 1980년대 초반부터 급증하게 된 당시의 데이터베이스 시스템의 문제점들을 해결하고자 "post-Ingres"(후기-Ingres)프로젝트를 시작했다. 상용화 된 Ingres와는 다르게 post-Ingres에 대한 아이디어를 공유하기 위해 Ingres의 코드 일부를 제외하고 분리시켰다.

1986년부터 개발팀은 데이터베이스 시스템의 기본적인 사항에 대해 몇 가지 논문을 제출하고 이어서 1988년까지 실제로 운영이 가능한 프로토타입을 완성한다.

1989년 6월 그들은 첫 번째 버전과 그 이듬해 6월까지 시스템 규칙을 재작성하는 두 번째 버전까지 소수의 사용자들에게만 공개했다. 1991년 세 번째 버전에서도 시스템의 규칙을 다시 썼다. 또한 다중 스토리지 관리자 및 향상된 질의엔진에 대한 지원을 추가했다. 1993년까지 많은 사용자들이 이 시스템을 사용했고 이 시스템의 지원에 관한 요청이 쇄도하기 시작했다.

개발팀이 네 번째 버전을 내놓은 후 일차적인 프로젝트가 공식적으로는 종료되었으나, BSD 허가권으로 인해 오픈소스 개발자들은 Postgres 시스템의 소스코드를 넘겨받아 개발을 계속했다.

1994년 캘리포니아대학교 버클리분교의 졸업생인 앤드류 유와 졸리 첸이 SQL의 해석기를 추가하고 기존 Ingres 기반의 질의 시스템을 대체한다. 이를 "Postgres95" 라고 한다.

1996년에는 기존의 데이터베이스 시스템에 새로운 SQL이 추가되었다는 것을 알리기 위해 Postgres95라는 이름을 PostgreSQL로 바꾼다.

1997년 PostgreSQL의 첫 번째 버전인 6.0부터 전 세계의 데이터베이스 개발자와 자원자들이 조직을 형성하고 인터넷을 통해 협력하면서 시스템의 개발과 유지보수를 한다.

PostgreSQL을 상용 버전으로 만들 수는 있었으나, 과거와 같이 급속도로 개발되지는 않았다.

상용 PostgreSQL의 대표적인 것으로는 Paula Hawthorn과 Michael Stonebraker가 세운 Illustra Information Technologies의 상용버전이 있다.

특장점
---

### 유연한 객체 생성

다른 관계형 데이터베이스 시스템과 달리, 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 SQL 차원에서 제공한다.

이런 특징은 단순한 자료 저장소로써의 기능을 넘어 마치 하나의 새로운 프로그래밍 언어처럼 개발자의 창의성에 따라 무한한 기능을 손쉽게 구현할 수 있도록 한다.

### 상속

java 또는 C++ 프로그래밍 언어와 같이 테이블을 만들어 그 테이블 상속 기능을 이용해 하위 테이블을 만들 수 있다.

테이블에 저장된 자료는 상위 테이블을 조회하면, 해당 테이블의 하위 테이블에 포함된 모든 자료를 조회할 수 있으며,
하위 테이블을 만들 때, 상위 테이블의 칼럼을 그대로 상속 받으면서, 하위 테이블에만 속하는 칼럼을 추가로 만들 수 있다.

### 함수

때때로, '저장 프로시저'라고 불리는 SQL문으로 작성된 함수를 서버환경에서 사용할 수 있다. 비록 다른 언어와는 달리 제어문과 반복문을 사용하지는 못하지만, 다른 언어와 결합시킬 수 있다. 일부 언어에서는 심지어 트리거 내부에서 실행시킬 수 있다.

이러한 언어의 예는 다음과 같다.

* PL/pgSQL (오라클의 PL/SQL과 유사하다)
* 스크립트 언어를 통한 지원 (예, PL/Python, PL/php, PL/Perl)
* 컴파일 언어를 통한 지원 (예, C/C++, PL/Java)
* 통계적 언어를 통한 지원 (예, PL/R)

PostgreSQL은 테이블에 대한 질의 결과를 반환하기 위한 '행 반환 함수'를 지원한다.

실행권한은 함수 작성자 및, 실행자 모두에게 있다.

데이터베이스 관리 도구
------------

### 서버 도구

#### postgres

최상위 서버 데몬

#### pg\_ctl

서버 시작, 중지, 상태 등 서버 제어를 위한 명령어

#### initdb

데이터베이스 초기화 명령어

#### pg\_resetxlog

트랜잭션 로그 초기화 명령어

### 클라이언트 도구

#### psql

기초적인 관리 툴은 `psql`이다. psql의 특징으로는 명령어 기반 인터페이스라는 점이며 셸과 유사한 자동완성 및 스크립트를 통한 자동화 기능을 지원한다.

#### pgAdmin

pgAdmin은 그래픽 사용자 인터페이스를 지닌 툴로서 다수의 운영체제에서 작동하며, 배포는 아티스틱 라이선스를 따른다.
PostgreSQL 6.3.2 버전부터 지원하기 시작했으며 개발초기의 이름은 pgManager였다. 현재는 pgAdmin 4이다.

#### phpPgAdmin

phpPgAdmin은 웹 기반의 관리 툴이다. phpMyAdmin과 인터페이스가 거의 똑같이 구성되어있으며 PHP로 작성되었다.

출시 역사
-----

|
|  |
출시 역사| 릴리스 | 첫 출시 | 마지막 마이너 버전 | 마지막 출시 | 수명 종료 |
| --- | --- | --- | --- | --- |
| 6.0 | 1997-01-29 | 빈칸 | 빈칸 | 빈칸 |
| 6.1 | 1997-06-08 | 오래된 버전, 지원 중단: 6.1.1 | 1997-07-22 | 빈칸 |
| 6.2 | 1997-10-02 | 오래된 버전, 지원 중단: 6.2.1 | 1997-10-17 | 빈칸 |
| 6.3 | 1998-03-01 | 오래된 버전, 지원 중단: 6.3.2 | 1998-04-07 | 2003-03-01 |
| 6.4 | 1998-10-30 | 오래된 버전, 지원 중단: 6.4.2 | 1998-12-20 | 2003-10-30 |
| 6.5 | 1999-06-09 | 오래된 버전, 지원 중단: 6.5.3 | 1999-10-13 | 2004-06-09 |
| 7.0 | 2000-05-08 | 오래된 버전, 지원 중단: 7.0.3 | 2000-11-11 | 2004-05-08 |
| 7.1 | 2001-04-13 | 오래된 버전, 지원 중단: 7.1.3 | 2001-08-15 | 2006-04-13 |
| 7.2 | 2002-02-04 | 오래된 버전, 지원 중단: 7.2.8 | 2005-05-09 | 2007-02-04 |
| 7.3 | 2002-11-27 | 오래된 버전, 지원 중단: 7.3.21 | 2008-01-07 | 2007-11-27 |
| 7.4 | 2003-11-17 | 오래된 버전, 지원 중단: 7.4.30 | 2010-10-04 | 2010-10-01 |
| 8.0 | 2005-01-19 | 오래된 버전, 지원 중단: 8.0.26 | 2010-10-04 | 2010-10-01 |
| 8.1 | 2005-11-08 | 오래된 버전, 지원 중단: 8.1.23 | 2010-12-16 | 2010-11-08 |
| 8.2 | 2006-12-05 | 오래된 버전, 지원 중단: 8.2.23 | 2011-12-05 | 2011-12-05 |
| 8.3 | 2008-02-04 | 오래된 버전, 지원 중단: 8.3.23 | 2013-02-07 | 2013-02-07 |
| 8.4 | 2009-07-01 | 오래된 버전, 지원 중단: 8.4.22 | 2014-07-24 | 2014-07-24 |
| 9.0 | 2010-09-20 | 오래된 버전, 지원 중단: 9.0.23 | 2015-10-08 | 2015-10-08 |
| 9.1 | 2011-09-12 | 오래된 버전, 지원 중단: 9.1.24 | 2016-10-27 | 2016-10-27 |
| 9.2 | 2012-09-10 | 오래된 버전, 지원 중단: 9.2.24 | 2017-11-09 | 2017-11-09 |
| 9.3 | 2013-09-09 | 오래된 버전, 지원 중단: 9.3.25 | 2018-11-08 | 2018-11-08 |
| 9.4 | 2014-12-18 | 오래된 버전, 지원 중단: 9.4.26 | 2020-02-13 | 2020-02-13 |
| 9.5 | 2016-01-07 | 오래된 버전, 지원 중단: 9.5.25 | 2021-02-11 | 2021-02-11 |
| 9.6 | 2016-09-29 | 오래된 버전, 지원 중단: 9.6.24 | 2021-11-11 | 2021-11-11 |
| 10 | 2017-10-05 | 오래된 버전, 지원 중단: 10.23 | 2022-11-10 | 2022-11-10 |
| 11 | 2018-10-18 | 오래된 버전, 지원 중: 11.20 | 2023-05-11 | 2023-11-09 |
| 12 | 2019-10-03 | 오래된 버전, 지원 중: 12.15 | 2023-05-11 | 2024-11-14 |
| 13 | 2020-09-24 | 오래된 버전, 지원 중: 13.11 | 2023-05-11 | 2025-11-13 |
| 14 | 2021-09-30 | 오래된 버전, 지원 중: 14.8 | 2023-05-11 | 2026-11-12 |
| 15 | 2022-10-13 | 현재 안정화 버전: **15.3**  | 2023-05-11 | 2027-11-11 |
| 16 | — | 배포 예정: 16 Beta 1 | 2023-05-25 | — |

**범례:**오래된 버전오래된 버전, 지원 중**최신 버전**최신 미리보기 버전배포 예정