PostgreSQL

PostgreSQL( 또는 Postgres는 확장 가능성과 SQL 준수를 강조하는 자유-오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)이다. PostgreSQL은 원자성, 일관성, 독립성, 지속성(ACID) 특성을 갖춘 트랜잭션, 자동으로 업데이트되는 뷰, 구체화 뷰, 트리거, 외래 키, 저장 프로시저를 특징으로 한다.

PostgreSQL은 윈도우, 리눅스, MacOS, FreeBSD, OpenBSD를 포함한 모든 주요 운영체제에서 지원되며, 단일 머신부터 데이터 웨어하우스, 데이터 레이크, 또는 수많은 동시 사용자가 있는 웹 서비스에 이르기까지 다양한 작업 부하를 처리한다.

PostgreSQL 글로벌 개발 그룹(PostgreSQL Global Development Group)은 데이터베이스 엔진 및 밀접하게 연관된 구성 요소 개발에만 집중한다. 기술적으로 이 핵심 기능이 PostgreSQL 자체를 구성하지만, 광범위한 개발자 커뮤니티와 생태계가 존재하여 전통적으로 사유 소프트웨어 벤더가 제공할 법한 다른 중요한 기능 세트를 제공한다. 여기에는 지리 공간이나 이력 데이터베이스를 지원하는 데 필요한 특수 목적 데이터베이스 엔진 기능이나 다른 데이터베이스 제품을 모방하는 기능이 포함된다. 또한 제3자를 통해 그래픽 사용자 인터페이스나 부하분산 및 고가용성 도구 세트와 같은 다양한 사용자 및 머신 인터페이스 기능도 사용할 수 있다. 개인, 기업, 제품 및 프로젝트로 구성된 대규모 제3자 PostgreSQL 지원 네트워크는 PostgreSQL 개발 그룹의 일부는 아니지만, PostgreSQL 데이터베이스 엔진의 채택과 사용에 필수적이며 광범위한 PostgreSQL 생태계를 형성한다.이는 PostgreSQL 상표 정책에 따라 PostgreSQL 지원에 사용될 때(실제 PostgreSQL 프로젝트와의 법적 관계에 대해 사람들을 혼동시키지 않는 공정 이용의 경우) PostgreSQL 이름을 사용할 수 있도록 허용하는 자유로운 권한에 의해 인정된다:

PostgreSQL의 원래 이름은 캘리포니아 대학교 버클리에서 개발된 인그레스 데이터베이스의 후속작이라는 의미를 담은 POSTGRES였다. 1996년에 프로젝트는 SQL 지원을 반영하기 위해 "PostgreSQL"로 이름을 변경했다. 2007년 검토를 거친 후 개발 팀은 PostgreSQL이라는 이름과 Postgres라는 별칭을 계속 유지하기로 결정했다.

 역사 

 인그레스 및 대학 POSTGRES (1982–1994) 
PostgreSQL은 캘리포니아 대학교 버클리의 인그레스 프로젝트에서 진화했다. 1982년 인그레스 팀의 리더였던 마이클 스톤브레이커는 인그레스의 사유 버전을 만들기 위해 버클리를 떠났다. 그는 1985년 버클리로 돌아와 1980년대 초반에 점점 더 명확해진 현대 데이터베이스 시스템의 문제점을 해결하기 위해 포스트 인그레스(post-Ingres) 프로젝트를 시작했다. 그는 이 프로젝트들과 다른 프로젝트들로 2014년 튜링상을 수상했으며, 그 과정에서 선구적인 기술들이 개발되었다.

새로운 프로젝트인 POSTGRES는 자료형을 완벽하게 지원하는 데 필요한 최소한의 기능을 추가하는 것을 목표로 했다. 이러한 기능에는 유형을 정의하고 관계를 완전히 설명하는 능력이 포함되었다. 이는 널리 사용되었지만 전적으로 사용자에 의해 관리되었다. POSTGRES에서 데이터베이스는 관계를 이해했으며 규칙을 사용하여 자연스러운 방식으로 관련 테이블의 정보를 검색할 수 있었다. POSTGRES는 인그레스의 많은 아이디어를 사용했지만 코드는 사용하지 않았다.

1986년부터 발표된 논문들은 시스템의 기초를 설명했으며, 1988년 ACM SIGMOD 컨퍼런스에서 프로토타입 버전이 공개되었다. 팀은 1989년 6월 소수의 사용자에게 버전 1을 릴리스했고, 이어 1990년 6월에는 규칙 시스템을 다시 작성한 버전 2를 릴리스했다. 1991년에 릴리스된 버전 3은 다시 규칙 시스템을 고치고 다중 저장소 관리자A Brief History of PostgreSQL "Version 3 appeared in 1991 and added support for multiple storage managers, an improved query executor, and a rewritten rule system.". postgresql.org. The PostgreSQL Global Development Group, Retrieved on March 18, 2020. 지원과 개선된 쿼리 엔진을 추가했다. 1993년이 되자 사용자 수가 늘어나면서 지원 및 기능 요청이 프로젝트를 압도하기 시작했다. 1994년 6월 30일, 주로 정리 작업이 이루어진 버전 4.2를 릴리스한 후 프로젝트는 종료되었다. 버클리는 POSTGRES를 MIT 허가서 변형 라이선스로 공개하여 다른 개발자들이 어떤 용도로든 코드를 사용할 수 있게 했다. 당시 POSTGRES는 인그레스의 영향을 받은 POSTQUEL 쿼리 언어 인터프리터를 사용했으며, 이는 monitor라는 이름의 콘솔 애플리케이션과 대화형으로 사용할 수 있었다.

 Postgres95 (1994–1996) 
1994년 버클리 대학원생인 앤드루 유(Andrew Yu)와 졸리 첸(Jolly Chen)은 POSTQUEL 쿼리 언어 인터프리터를 SQL 쿼리 언어 인터프리터로 교체하여 Postgres95를 만들었다. monitor 콘솔도 psql로 대체되었다. 유와 첸은 1995년 5월 5일 베타 테스터들에게 첫 번째 버전(0.01)을 발표했다. Postgres95의 버전 1.0은 1995년 9월 5일에 발표되었으며, 소프트웨어를 자유롭게 수정할 수 있는 더 관대한 라이선스가 적용되었다.

1996년 7월 8일, Hub.org Networking Services의 마크 푸르니에(Marc Fournier)는 오픈 소스 개발 노력을 위해 최초의 비대학 개발 서버를 제공했다. 브루스 맘지언과 바딤 B. 미헤예프(Vadim B. Mikheev)의 참여로 버클리에서 물려받은 코드를 안정화하는 작업이 시작되었다.

 PostgreSQL (1996–현재) 
1996년에 프로젝트는 SQL 지원을 반영하기 위해 PostgreSQL로 이름을 변경했다. 1996년 10월 22일 웹사이트 PostgreSQL.org가 개설되었다. 첫 번째 PostgreSQL 릴리스는 1997년 1월 29일 버전 6.0으로 이루어졌다. 그 이후 전 세계의 개발자와 자원봉사자들은 PostgreSQL 글로벌 개발 그룹으로서 소프트웨어를 유지 관리해 왔다.

프로젝트는 자유-오픈 소스 소프트웨어인 PostgreSQL 라이선스에 따라 릴리스를 계속 제공하고 있다. 코드는 사유 벤더, 지원 기업 및 오픈 소스 프로그래머의 기여로 만들어진다.

2025년 현재 PostgreSQL은 주요 릴리스 버전 18에 도달했으며, 비동기 I/O(AIO)를 구현하여 데이터베이스 사용자가 미리 읽기(readahead) 및 순차 스캔과 같은 동시 I/O 작업을 수행할 수 있게 된 점이 주목할 만하다.

 다중 버전 동시성 제어 (MVCC) 
PostgreSQL은 다중 버전 동시성 제어(MVCC)를 통해 동시성 제어를 관리한다. 이는 각 트랜잭션에 데이터베이스의 "스냅샷"을 제공하여 다른 트랜잭션에 영향을 주지 않고 변경을 수행할 수 있도록 한다. 이는 읽기 잠금의 필요성을 크게 제거하고 데이터베이스가 ACID 원칙을 유지하도록 보장한다. PostgreSQL은 Read Uncommitted, Read Committed, Repeatable Read, Serializable의 네 가지 트랜잭션 격리 수준을 제공한다. PostgreSQL은 더티 리드(dirty read)로부터 안전하기 때문에 Read Uncommitted 격리 수준을 요청하면 대신 Read Committed가 제공된다. PostgreSQL은 직렬화 가능 스냅샷 격리(SSI) 방식을 통해 완전한 직렬화 성질을 지원한다. PostgreSQL의 MVCC 구현은 기존 행을 업데이트하는 과도한 쓰기 부하가 발생할 때 튜닝이 필요한 성능 문제에 취약할 수 있다.

 저장 및 레플리케이션 

 레플리케이션 
PostgreSQL은 변경 사항(로그 선행 기입(WAL))을 복제 노드로 비동기 전송하는 내장 바이너리 레플리케이션 기능을 포함하며, 이러한 복제 노드에 대해 읽기 전용 쿼리를 실행할 수 있다. 이를 통해 여러 노드 간에 읽기 트래픽을 효율적으로 분산할 수 있다. 유사한 읽기 확장을 허용했던 이전의 복제 소프트웨어들은 보통 마스터에 복제 트리거를 추가하는 방식에 의존하여 부하가 증가했었다.

PostgreSQL은 각 쓰기 트랜잭션에 대해 마스터가 최소 하나 이상의 복제 노드가 트랜잭션 로그에 데이터를 기록할 때까지 기다리도록 보장하는 내장 동기 레플리케이션을 포함한다. 다른 데이터베이스 시스템과 달리 트랜잭션의 지속성(비동기 또는 동기 여부)은 데이터베이스별, 사용자별, 세션별 또는 트랜잭션별로 지정할 수 있다. 이는 그러한 보장이 필요하지 않은 작업 부하에 유용할 수 있으며, 동기식 대기 서버의 트랜잭션 도달 확인 요구로 인해 성능이 저하될 수 있으므로 모든 데이터에 대해 원치 않을 수도 있다.

대기(Standby) 서버는 동기 또는 비동기일 수 있다. 구성에서 동기 대기 서버를 지정하여 어떤 서버가 동기 복제 후보인지 결정할 수 있다. 목록에서 현재 스트리밍 중인 첫 번째 서버가 현재 동기 서버로 사용된다. 이 서버가 실패하면 시스템은 다음 순서의 서버로 전환된다.

PostgreSQL의 레플리케이션은 기본 서버와 대기 서버 간에 충돌을 일으킬 수 있으며, 특히 대기 서버에서 진행 중인 쿼리가 액세스 중임에도 불구하고 튜플이 조기에 삭제될 때 발생한다. 이를 해결하기 위해 PostgreSQL에는 대기 서버가 기본 서버에 진행 중인 쿼리를 사전에 알려 이러한 유형의 충돌을 완화하는 피드백 플래그가 포함되어 있다.

동기 다중 마스터 레플리케이션은 PostgreSQL 코어에 포함되어 있지 않다. PostgreSQL을 기반으로 하는 Postgres-XC는 확장 가능한 동기 다중 마스터 레플리케이션을 제공한다. 이는 PostgreSQL과 동일한 라이선스로 배포된다. 관련 프로젝트로는 Postgres-XL이 있다. Postgres-R은 또 다른 포크이다. 양방향 레플리케이션(BDR)은 PostgreSQL을 위한 비동기 다중 마스터 레플리케이션 시스템이다.

repmgr와 같은 도구는 복제 클러스터 관리를 더 쉽게 만들어준다.

여러 비동기 트리거 기반 복제 패키지를 사용할 수 있다. 이들은 전체 데이터베이스 클러스터의 바이너리 복제가 부적절한 상황에서 코어 기능이 확장된 이후에도 여전히 유용하다.

 Slony-I
 Londiste: SkyTools의 일부(스카이프에서 개발)
 Bucardo 다중 마스터 레플리케이션(Backcountry.com에서 개발)
 SymmetricDS 다중 마스터, 다계층 레플리케이션

 인덱스 
PostgreSQL은 일반적인 B 트리 및 해시 테이블 인덱스에 대한 내장 지원과 네 가지 인덱스 액세스 방식인 GiST(Generalized Search Trees), GIN(Generalized Inverted Indexes), SP-GiST(Space-Partitioned GiST), BRIN(Block Range Indexes)을 포함한다. 또한 사용자가 정의한 인덱스 방식을 만들 수도 있지만, 이는 상당히 복잡한 과정이다. PostgreSQL의 인덱스는 다음과 같은 기능도 지원한다.

 단순히 컬럼의 값이 아닌 표현식이나 함수의 결과에 인덱스를 생성할 수 있는 표현식 인덱스.
 CREATE INDEX 문 끝에 WHERE 절을 추가하여 테이블의 일부에만 인덱스를 생성하는 부분 인덱스. 이를 통해 더 작은 인덱스를 만들 수 있다.
 플래너는 메모리 내 임시 비트맵 인덱스 작업을 사용하여 복잡한 쿼리를 만족시키기 위해 여러 인덱스를 함께 사용할 수 있다(대규모 팩트 테이블을 스타 스키마로 배치된 작은 차원 테이블과 조인하는 데이터 웨어하우스 애플리케이션에 유용).
 K-최근접 이웃(k-NN) 인덱싱(KNN-GiST라고도 함)은 지정된 값과 "가장 가까운 값"을 효율적으로 검색할 수 있게 해주며, 유사한 단어 검색이나 지리 공간 데이터에서 가까운 객체나 위치를 찾는 데 유용하다. 이는 값의 전수 매칭 없이 수행된다.
 인덱스 전용 스캔(Index-only scans)을 통해 시스템은 메인 테이블에 액세스하지 않고도 인덱스에서만 데이터를 가져올 수 있는 경우가 많다.
 BRIN(Block Range Indexes).

 스키마 
PostgreSQL 스키마는 이름공간으로, 단일 데이터베이스 내에서 동일한 종류와 이름을 가진 객체들이 공존할 수 있게 한다. 이는 테이블의 데이터가 다른 테이블 내의 데이터와 어떻게 관련되는지를 정의하는 추상적, 구조적, 조직적 사양인 데이터베이스 스키마와 혼동해서는 안 된다. 역할 및 테이블스페이스와 같은 몇 가지 글로벌 객체를 제외한 모든 PostgreSQL 데이터베이스 객체는 스키마 내에 존재한다. 스키마는 중첩될 수 없으며, 스키마가 스키마를 포함할 수 없다. 권한 시스템은 스키마와 그 내용에 대한 액세스를 제어한다. 기본적으로 새로 생성된 데이터베이스에는 public이라는 단일 스키마만 있지만 다른 스키마를 추가할 수 있으며 public 스키마가 필수인 것은 아니다.

 설정은 PostgreSQL이 정규화되지 않은 객체(접두사 스키마가 없는 객체)에 대해 스키마를 확인하는 순서를 결정한다. 기본적으로 으로 설정되어 있다(는 현재 연결된 데이터베이스 사용자를 의미함). 이 기본값은 데이터베이스나 역할 수준에서 설정할 수 있지만, 세션 파라미터이므로 클라이언트 세션 중에 자유롭게(심지어 여러 번) 변경할 수 있으며 해당 세션에만 영향을 미친다.

존재하지 않는 스키마나 로그인한 사용자가 액세스할 수 없는 스키마가 search_path에 나열되어 있으면 객체 조회 중에 자동으로 무시된다.

새 객체는 search_path에서 가장 먼저 나타나는 유효한 스키마(액세스 가능한 스키마)에 생성된다.

 자료형 
다음을 포함한 다양한 기본 자료형이 지원된다.

 불리언(Boolean)
 임의 정밀도 숫자
 문자(text, varchar, char)
 바이너리
 날짜/시간(시간대 포함/미포함 타임스탬프/시간, 날짜, 간격)
 통화(Money)
 열거형(Enum)
 비트 문자열
 텍스트 검색 유형
 복합 유형
 HStore: PostgreSQL 내의 확장 가능한 키-값 저장소
 배열(가변 길이이며 텍스트 및 복합 유형을 포함한 모든 자료형이 가능함), 총 저장 크기 최대 1GB
 기하학적 기본 도형
 IPv4 및 IPv6 주소
 CIDR 블록 및 MAC 주소
 XPath 쿼리를 지원하는 XML
 범용 고유 식별자(UUID)
 JSON(JavaScript Object Notation) 및 더 빠른 바이너리 JSONB(BSON과는 다름)

또한 사용자는 자신만의 자료형을 만들 수 있으며, 이는 일반적으로 PostgreSQL의 인덱싱 인프라(GiST, GIN, SP-GiST)를 통해 완전히 인덱싱 가능하다. 이에 대한 예로 PostgreSQL용 PostGIS 프로젝트의 지리 정보 시스템(GIS) 자료형이 있다.

도메인(domain)이라고 불리는 자료형도 있는데, 이는 다른 자료형과 동일하지만 도메인 생성자가 정의한 선택적 제약 조건이 추가된 것이다. 즉, 해당 도메인을 사용하는 컬럼에 입력되는 모든 데이터는 도메인의 일부로 정의된 제약 조건을 준수해야 한다.

범위 유형(range types)이라고 불리는 데이터 범위를 나타내는 자료형을 사용할 수 있다. 이는 이산 범위(예: 1에서 10까지의 모든 정수 값) 또는 연속 범위(예: 와  사이의 모든 시간)일 수 있다. 내장된 범위 유형에는 정수, 큰 정수, 10진수, 타임스탬프(시간대 포함 및 미포함) 및 날짜 범위가 포함된다.

inet 유형을 기반으로 하는 IP 주소 범위나 float 자료형을 기반으로 하는 부동 소수점 범위와 같이 새로운 유형의 범위를 사용하기 위해 사용자 정의 범위 유형을 만들 수 있다. 범위 유형은 각각  및  문자를 사용하여 포함 및 제외 범위 경계를 지원한다. (예: 는 4를 포함하여 시작하고 9를 포함하지 않는 모든 정수를 나타낸다.) 범위 유형은 중복, 포함, 오른쪽 위치 등을 확인하는 데 사용되는 기존 연산자와도 호환된다.

 사용자 정의 객체 
다음을 포함하여 데이터베이스 내부의 거의 모든 객체에 대해 새로운 유형을 만들 수 있다.

 캐스트(Cast)
 변환(Conversion)
 자료형
 데이터 도메인
 집계 함수 및 윈도우 함수를 포함한 함수
 사용자 정의 유형을 위한 사용자 정의 인덱스를 포함한 인덱스
 연산자(기존 연산자를 오버로딩할 수 있음)
 절차적 언어

 상속 
테이블이 부모 테이블로부터 특성을 상속받도록 설정할 수 있다. 자식 테이블의 데이터는 ONLY 키워드를 사용하여 부모 테이블에서 데이터를 선택하지 않는 한 부모 테이블에 존재하는 것처럼 나타난다(예: ). 부모 테이블에 컬럼을 추가하면 해당 컬럼이 자식 테이블에도 나타난다.

상속은 트리거 또는 규칙을 사용하여 부모 테이블로의 삽입을 적절한 자식 테이블로 유도함으로써 테이블 파티셔닝을 구현하는 데 사용될 수 있다.

이 기능은 완전히 지원되지는 않는다. 특히 테이블 제약 조건은 현재 상속되지 않는다. 부모 테이블의 모든 체크 제약 조건과 not-null 제약 조건은 자식에게 자동으로 상속되지만, 다른 유형의 제약 조건(고유, 기본 키, 외래 키 제약 조건)은 상속되지 않는다.

상속은 개체-관계 다이어그램(ERD)에 묘사된 일반화 계층 구조의 특징을 PostgreSQL 데이터베이스에 직접 매핑하는 방법을 제공한다.

 기타 저장 기능 
 외래 키 제약 조건, 컬럼 제약 조건 및 행 체크를 포함한 참조 무결성 제약 조건
 바이너리 및 텍스트 대형 객체 저장
 테이블스페이스
 컬럼별 정렬 순서(Collation)
 온라인 백업
 로그 선행 기입을 사용하여 구현된 특정 시점 복구(Point-in-time recovery)
 가동 중지 시간을 줄이기 위한 pg_upgrade를 통한 인플레이스 업그레이드

 제어 및 연결성 

 외부 데이터 래퍼 
PostgreSQL은 외부 데이터 래퍼(FDW)를 통해 데이터를 검색하기 위해 다른 시스템에 연결할 수 있다. 이는 파일 시스템, 다른 관계형 데이터베이스 관리 시스템(RDBMS) 또는 웹 서비스와 같은 모든 데이터 소스의 형태를 취할 수 있다. 즉, 일반적인 데이터베이스 쿼리가 이러한 데이터 소스를 일반 테이블처럼 사용할 수 있으며, 여러 데이터 소스를 함께 조인할 수도 있다.

 인터페이스 
PostgreSQL은 애플리케이션이 데이터베이스 서버에 연결할 수 있도록 하는 바이너리 통신 프로토콜을 지원한다. 이 프로토콜은 버전이 지정되어 있으며(PostgreSQL 7.4 기준 현재 3.0) 상세한 사양을 가지고 있다.

이 통신 프로토콜의 공식 클라이언트 구현은 C API인 libpq이다. 또한 공식적으로 지원되는 ECPG 도구를 사용하면 SQL 명령을 C 코드에 임베드할 수 있다. 둘 다 표준 PostgreSQL 배포판의 일부이다.

PostgreSQL 연결을 위한 제3자 라이브러리는 C++, 자바, 줄리아, 파이썬, Node.js, Go, 러스트를 포함한 많은 프로그래밍 언어에서 사용할 수 있다.

 절차적 언어 
절차적 언어를 사용하면 개발자가 종종 저장 프로시저라고 불리는 커스텀 서브루틴(함수)으로 데이터베이스를 확장할 수 있다. 이러한 함수는 데이터베이스 트리거(특정 데이터 수정 시 호출되는 함수), 커스텀 자료형 및 집계 함수를 구축하는 데 사용될 수 있다. 절차적 언어는 SQL 수준에서 DO 명령을 사용하여 함수를 정의하지 않고도 호출할 수 있다.

언어는 두 그룹으로 나뉜다. 안전한(safe) 언어로 작성된 프로시저는 샌드박스 처리되어 모든 사용자가 안전하게 생성하고 사용할 수 있다. 안전하지 않은(unsafe) 언어로 작성된 프로시저는 데이터베이스의 보안 제한을 우회할 수 있고 데이터베이스 외부의 소스에 액세스할 수 있기 때문에 슈퍼유저만 생성할 수 있다. 펄과 같은 일부 언어는 안전한 버전과 안전하지 않은 버전을 모두 제공한다.

PostgreSQL은 세 가지 절차적 언어를 기본적으로 지원한다.

 일반 SQL (안전함). 단순한 SQL 함수는 호출하는 (SQL) 쿼리에 인라인 확장될 수 있으며, 이는 함수 호출 오버헤드를 줄이고 쿼리 최적화 프로그램이 함수 내부를 볼 수 있게 한다.
 PL/pgSQL (안전함). 오라클의 PL/SQL 절차적 언어 및 SQL/PSM과 유사하다.
 C (안전하지 않음). 하나 이상의 커스텀 공유 라이브러리를 데이터베이스에 로드할 수 있게 한다. C로 작성된 함수는 최고의 성능을 제공하지만, 코드의 버그로 인해 데이터베이스가 중단되거나 잠재적으로 손상될 수 있다. 대부분의 내장 함수는 C로 작성되었다.

또한 PostgreSQL은 확장을 통해 절차적 언어를 데이터베이스에 로드할 수 있도록 허용한다. 펄, Tcl 및 파이썬을 지원하기 위해 세 가지 언어 확장이 PostgreSQL에 포함되어 있다. 파이썬의 경우 현재의 이 사용되며, 중단된 는 PostgreSQL 15부터 더 이상 지원되지 않는다. 이전에는 둘 다 지원되었으며 기본값은 였으나, 동일한 세션에서 구버전과 신버전을 함께 사용할 수는 없었다. 외부 프로젝트는 PL/자바, 자바스크립트(PL/V8), PL/줄리아, PL/R, PL/루비 등을 포함한 많은 다른 언어에 대한 지원을 제공한다.

 트리거 
트리거는 SQL 데이터 조작 언어(DML) 문의 작업에 의해 발생하는 이벤트이다. 예를 들어, INSERT 문은 문의 값이 유효한지 확인하는 트리거를 활성화할 수 있다. 대부분의 트리거는 INSERT 또는 UPDATE 문에 의해서만 활성화된다.

트리거는 완전히 지원되며 테이블에 연결될 수 있다. 트리거는 컬럼별로 설정할 수 있고 조건부일 수 있는데, UPDATE 트리거는 테이블의 특정 컬럼을 대상으로 할 수 있으며 트리거의 WHERE 절에 지정된 조건 집합에 따라 실행되도록 지시할 수 있다. 트리거는 INSTEAD OF 조건을 사용하여 뷰에 연결될 수 있다. 여러 트리거는 알파벳 순서로 실행된다. 기본 PL/pgSQL로 작성된 함수를 호출하는 것 외에도 트리거는 PL/Python 또는 PL/Perl과 같은 다른 언어로 작성된 함수를 호출할 수도 있다.

 비동기 알림 
PostgreSQL은 NOTIFY, LISTEN 및 UNLISTEN 명령을 통해 액세스되는 비동기 메시징 시스템을 제공한다. 세션은 사용자 지정 채널 및 선택적 페이로드와 함께 NOTIFY 명령을 실행하여 특정 이벤트가 발생했음을 알릴 수 있다. 다른 세션은 특정 채널을 수신 대기할 수 있는 LISTEN 명령을 실행하여 이러한 이벤트를 감지할 수 있다. 이 기능은 테이블이 업데이트되었음을 다른 세션에 알리거나 별도의 애플리케이션에서 특정 작업이 수행되었음을 감지하는 등 다양한 목적으로 사용될 수 있다. 이러한 시스템은 애플리케이션이 변경 사항이 있는지 확인하기 위해 지속적으로 폴링할 필요가 없게 하여 불필요한 오버헤드를 줄여준다. 알림은 완전한 트랜잭션 방식으로 작동하며, 메시지는 전송된 트랜잭션이 커밋될 때까지 전송되지 않는다. 이는 수행된 작업이 롤백되었음에도 메시지가 전송되는 문제를 방지한다.

libpq, JDBC, Npgsql, psycopg 및 node.js를 포함한 많은 PostgreSQL 커넥터가 이 알림 시스템을 지원하므로 외부 애플리케이션에서 사용할 수 있다.

PostgreSQL은 LISTEN과 FOR UPDATE SKIP LOCKED를 결합하여 효과적이고 지속적인 "발행/구독" 서버 또는 작업 서버 역할을 할 수 있다.

 규칙 
규칙(Rules)은 들어오는 쿼리의 "쿼리 트리"를 다시 작성할 수 있게 해준다. 이는 자동으로 호출되는 SQL용 매크로 언어이다. "쿼리 재작성 규칙"은 테이블/클래스에 연결되어 들어오는 DML(select, insert, update, delete)을 원래 DML 문을 대체하거나 추가로 실행하는 하나 이상의 쿼리로 "재작성"한다. 쿼리 재작성은 DML 문 파싱 이후와 쿼리 계획 이전에 발생한다.

규칙이 제공하는 기능은 거의 모든 면에서 나중에 도입된 새로운 유형의 트리거로 중복되었다. 트리거의 동작과 상호 작용을 추론하는 것이 동등한 규칙을 사용할 때보다 쉽기 때문에 일반적으로 규칙보다 트리거를 사용하는 것이 선호된다.

 기타 쿼리 기능 
 트랜잭션
 전문 검색
 뷰
 구체화 뷰
 업데이트 가능 뷰
 재귀 뷰
 내부, 외부(전체, 왼쪽, 오른쪽) 및 크로스 조인
 서브 셀렉트
 상관 서브쿼리
 정규 표현식
 공통 테이블 표현식 및 쓰기 가능한 공통 테이블 표현식
 전송 계층 보안(TLS)을 통한 암호화된 연결. 현재 버전은 해당 구성 옵션이 있더라도 취약한 SSL을 사용하지 않는다.
 도메인
 세이브포인트
 2단계 커밋
 큰 테이블 속성(큰 MIME 첨부 파일이나 XML 메시지 등)을 자동 압축하여 별도의 영역에 투명하게 저장하는 데 TOAST(The Oversized-Attribute Storage Technique)가 사용된다.
 임베디드 SQL은 프리프로세서를 사용하여 구현된다. SQL 코드는 먼저 C 코드에 내장되어 작성된다. 그런 다음 SQL을 코드 라이브러리 호출로 대체하는 ECPG 프리프로세서를 통해 코드를 실행한다. 이후 C 컴파일러를 사용하여 코드를 컴파일할 수 있다. 임베딩은 C++에서도 작동하지만 모든 C++ 구조를 인식하지는 못한다.

 동시성 모델 
PostgreSQL 서버는 프로세스 기반(스레드 기반이 아님)이며 데이터베이스 세션당 하나의 운영체제 프로세스를 사용한다. 여러 세션은 운영체제에 의해 사용 가능한 모든 CPU에 자동으로 분산된다. 많은 유형의 쿼리는 여러 백그라운드 워커 프로세스에 걸쳐 병렬화될 수 있어 여러 CPU나 코어를 활용할 수 있다. 클라이언트 애플리케이션은 스레드를 사용하고 각 스레드에서 여러 데이터베이스 연결을 생성할 수 있다.

 보안 
PostgreSQL은 내부 보안을 개별 역할별로 관리한다. 역할은 일반적으로 사용자(로그인할 수 있는 역할) 또는 그룹(다른 역할이 구성원인 역할)으로 간주된다. 권한은 컬럼 수준까지 모든 객체에 대해 부여하거나 취소할 수 있으며, 데이터베이스, 스키마, 테이블 및 행 수준에서 객체의 가시성/생성/변경/삭제를 허용하거나 방지할 수 있다.

PostgreSQL의 SECURITY LABEL 기능(SQL 표준 확장)은 추가적인 보안을 허용한다. 보안 강화 리눅스(SELinux) 보안 정책을 기반으로 한 레이블 기반 강제적 접근 제어(MAC)를 지원하는 번들 로드 가능 모듈이 제공된다.

PostgreSQL은 다음을 포함한 광범위한 외부 인증 메커니즘을 기본적으로 지원한다.

 비밀번호: SCRAM-SHA-256, MD5 또는 일반 텍스트
 Generic Security Services Application Program Interface(GSSAPI)
 보안 지원 제공자 인터페이스(SSPI)
 커버로스
 ident(ident 서버에서 제공하는 운영체제 사용자 이름을 데이터베이스 사용자 이름에 매핑)
 Peer(로컬 사용자 이름을 데이터베이스 사용자 이름에 매핑)
 LDAP(Lightweight Directory Access Protocol)
 액티브 디렉터리(AD)
 RADIUS
 인증서
 플러그 가능 인증 모듈(PAM)

GSSAPI, SSPI, 커버로스, peer, ident 및 인증서 방식은 해당 인증 시스템에 의해 일치하는 사용자가 특정 데이터베이스 사용자로 연결할 수 있는지를 나열하는 지정된 "맵" 파일을 사용할 수도 있다.

이러한 방식은 클러스터의 호스트 기반 인증 구성 파일(pg_hba.conf)에 지정되어 허용되는 연결을 결정한다. 이를 통해 어떤 사용자가 어떤 데이터베이스에 연결할 수 있는지, 어디서 연결할 수 있는지(IP 주소, IP 주소 범위, 도메인 소켓), 어떤 인증 시스템이 강제될 것인지, 연결 시 전송 계층 보안(TLS)을 사용해야 하는지 등을 제어할 수 있다.

 표준 준수 
PostgreSQL은 최신 SQL 표준에 대해 완전하지는 않지만 높은 수준의 적합성을 주장한다("2024년 9월 버전 17 릴리스 기준으로 PostgreSQL은 SQL:2023 코어 준수를 위한 177개 필수 기능 중 최소 170개를 준수하며", 다른 데이터베이스도 이를 완전히 준수하는 것은 없다). 한 가지 예외는 테이블이나 컬럼 이름과 같이 따옴표로 묶이지 않은 식별자의 처리이다. PostgreSQL에서 이들은 내부적으로 소문자로 변환되지만, 표준에 따르면 따옴표로 묶이지 않은 식별자는 대문자로 변환되어야 한다. 따라서 표준에 따르면 는 가 아니라 와 동일해야 한다. 다른 단점으로는 시간 경과에 따른 탐색(FOR SYSTEM TIME 조건자) 가능성과 트랜잭션 중 행 버전의 자동 로깅을 허용하는 시간적 테이블(temporal tables)의 부재가 있지만, 비교적 SQL 표준을 준수하는 제3자 확장을 사용할 수 있다.

 벤치마크 및 성능 

PostgreSQL에 대한 많은 비공식 성능 연구가 수행되었다. 확장성 개선을 목표로 한 성능 향상은 버전 8.1부터 본격적으로 시작되었다. 버전 8.0과 버전 8.4 사이의 간단한 벤치마크 결과, 후자가 읽기 전용 작업 부하에서 10배 이상 빨랐고 읽기 및 쓰기 작업 부하 모두에서 최소 7.5배 빨랐다.

최초의 업계 표준 및 동료 검증 벤치마크는 2007년 6월에 Sun Java System Application Server(글래스피시의 사유 버전) 9.0 플랫폼 에디션, 울트라스팍 T1 기반 Sun Fire 서버 및 PostgreSQL 8.2를 사용하여 완료되었다. 778.14 SPECjAppServer2004 JOPS@Standard라는 이 결과는 아이테니엄 기반 HP-UX 시스템의 오라클 10이 기록한 874 JOPS@Standard와 비교해도 손색이 없다.

2007년 8월, Sun은 개선된 벤치마크 점수인 813.73 SPECjAppServer2004 JOPS@Standard를 제출했다. 테스트 대상 시스템의 가격 인하와 함께 가격 대비 성능은 JOPS당 84.98달러에서 70.57달러로 개선되었다.

PostgreSQL의 기본 구성은 데이터베이스 블록 캐싱 및 정렬과 같이 성능에 민감한 용도로 적은 양의 전용 메모리만 사용한다. 이러한 제한은 주로 구형 운영체제에서 대용량 공유 메모리 블록을 할당하기 위해 커널 변경이 필요했기 때문이다. PostgreSQL.org는 위키에서 기본적인 권장 성능 관행에 대한 조언을 제공한다.

2012년 4월, EnterpriseDB의 로버트 하스(Robert Haas)는 64개 코어가 있는 서버를 사용하여 PostgreSQL 9.2의 선형 CPU 확장성을 시연했다.

마트룹 쿠시(Matloob Khushi)는 유전체 데이터 처리 능력을 확인하기 위해 PostgreSQL 9.0과 MySQL 5.6.15 간의 벤치마킹을 수행했다. 그의 성능 분석에서 PostgreSQL은 각각 80,000개로 구성된 무작위 인간 DNA 영역의 두 데이터 세트를 사용하여 중첩된 유전체 영역을 MySQL보다 8배 빠르게 추출한다는 것을 발견했다. 삽입 및 데이터 업로드 성능도 PostgreSQL이 더 우수했지만, 두 데이터베이스의 일반적인 검색 능력은 거의 동등했다.

 플랫폼 
PostgreSQL은 다음과 같은 운영체제에서 사용할 수 있다. 리눅스(모든 최신 배포판), 64비트 AArch64 및 X86-64 설치 프로그램이 제공되며 MacOS 버전 10.14 이상에서 테스트되었다. 마이크로소프트 윈도우(64비트 윈도우 서버 2022 및 윈도우 서버 2016용 설치 프로그램 제공 및 테스트 완료), FreeBSD, OpenBSD, NetBSD, DragonFlyBSD가 있으며, 공식 바이너리 실행 파일은 없지만(비공식적으로는 사용 가능할 수 있음) 솔라리스 및 일루모스가 있다.

PostgreSQL은 다음과 같은 명령어 집합 아키텍처(및 운영체제)에서 작동할 것으로 기대된다. 윈도우 및 기타 운영체제에서의 64비트 X86-64 및 32비트 X86. 윈도우 외의 환경에서는 다음이 지원된다. 64비트 AArch64 및 라즈베리 파이의 ARMv6를 포함한 이전 32비트 ARM 아키텍처), RISC-V, Z/아키텍처, S/390, 파워PC(64비트 포함), SPARC(64비트 포함), MIPS 및 PA-RISC. 또한 수년 동안 테스트되지는 않았지만 일부 다른 플랫폼에서도 작동하는 것으로 알려져 있었다.

 데이터베이스 관리 

PostgreSQL 관리를 위한 오픈 소스 프런트엔드 및 도구는 다음과 같다.
 psql 세션 예시regression=# select foo;
ERROR:  column "foo" does not exist
CONTEXT:  PL/pgSQL function "test1" while casting return value to function's return type
LINE 1: select foo;
               ^
regression=# \q
peter@localhost testdb=> \a \t \x
Output format is aligned.
Tuples only is off.
Expanded display is on.
regression=# select '\x';
WARNING:  nonstandard use of escape in a string literal
LINE 1: select '\x';
               ^
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.
 ?column?
----------
 x
(1 row)

regression=# select E'\x';
piro=> \set foo 30;
piro=> select * from test where foo <= :foo;
 foo | bar
-----+-----
  10 |
  20 |
(2 rows)
testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :"foo";

testdb=> \set content `cat my_file.txt`
testdb=> INSERT INTO my_table VALUES (:'content');
regression=# select (
regression(# 1);
 ?column?
----------
        1
(1 row)
piro=> select (
piro(> '
piro'> ' || $$
piro$> $$)
piro-> from "
piro"> foo";
ERROR:  relation "
foo" does not exist
LINE 5: from "
             ^
testdb=> CREATE TABLE my_table (
first integer not null default 0,
second text) ; -- end of command
CREATE TABLE

=# SELECT '0x10'::mpz AS "hex", '10'::mpz AS "dec",
-#        '010'::mpz AS oct, '0b10'::mpz AS bin; -- Table output
 hex | dec | oct | bin
-----+-----+-----+-----
 16  | 10  | 8   | 2
(1 row)
regression=# select schemaname from  pg_tables limit 3; -- One field output
 schemaname
------------
 pg_catalog
 pg_catalog
 pg_catalog
(3 rows)

=# select 10.0, 1e-6, 1E+6;
 ?column? | ?column? | ?column?
----------+----------+----------
     10.0 | 0.000001 |  1000000
(1 row)

regression=# begin;
BEGIN
regression=# create table asdf (foo serial primary key);
NOTICE:  CREATE TABLE will create implicit sequence "asdf_foo_seq" for serial column "asdf.foo"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "asdf_pkey" for table "asdf"
CREATE TABLE
regression=# insert into asdf values (10) returning foo;
 foo
-----
  10
(1 row)

INSERT 0 1
regression=# ROLLBACK ;
ROLLBACK
 psql PostgreSQL의 주요 프런트엔드는  커맨드라인 프로그램으로, SQL 쿼리를 직접 입력하거나 파일에서 실행하는 데 사용할 수 있다. 또한 psql은 스크립트 작성 및 광범위한 작업의 자동화를 돕기 위해 여러 메타 명령과 다양한 셸과 유사한 기능을 제공한다. 예를 들어 객체 이름과 SQL 구문의 탭 자동 완성 기능이 있다.
 pgAdmin pgAdmin 패키지는 많은 컴퓨터 플랫폼에서 지원되는 PostgreSQL용 자유-오픈 소스 그래픽 사용자 인터페이스(GUI) 관리 도구이다. 이 프로그램은 12개 이상의 언어로 제공된다. pgManager라는 이름의 첫 번째 프로토타입은 1998년 PostgreSQL 6.3.2용으로 작성되었으며, 이후 몇 달 만에 GNU 일반 공중 사용 허가서(GPL)에 따라 pgAdmin으로 재작성되어 릴리스되었다. 두 번째 버전(pgAdmin II)은 완전히 재작성되어 2002년 1월 16일에 처음 출시되었다. 세 번째 버전인 pgAdmin III는 원래 아티스틱 라이선스로 릴리스되었다가 나중에 PostgreSQL과 동일한 라이선스로 릴리스되었다. 비주얼 베이직으로 작성된 이전 버전과 달리 pgAdmin III는 WxWidgets 프레임워크를 사용하여 C++로 작성되어 대부분의 일반적인 운영체제에서 실행될 수 있다. 쿼리 도구에는 관리 및 개발 작업을 지원하기 위한 pgScript라는 스크립팅 언어가 포함되어 있다. 2014년 12월, pgAdmin 프로젝트의 창립자이자 주요 개발자인 데이브 페이지(Dave Page)는 웹 기반 모델로의 전환과 함께 클라우드 배포를 용이하게 하기 위한 목적으로 pgAdmin 4 작업이 시작되었음을 발표했다. 2016년에 pgAdmin 4가 릴리스되었다. pgAdmin 4 백엔드는 파이썬으로 작성되었으며, 플라스크와 Qt 프레임워크를 사용한다.
 phpPgAdmin phpPgAdmin은 PHP로 작성된 PostgreSQL용 웹 기반 관리 도구로, 원래 MySQL 관리를 위해 작성된 인기 있는 PhpMyAdmin 인터페이스를 기반으로 한다.
 PostgreSQL Studio PostgreSQL Studio를 사용하면 사용자가 웹 기반 콘솔에서 필수적인 PostgreSQL 데이터베이스 개발 작업을 수행할 수 있다. PostgreSQL Studio는 사용자가 방화벽을 열 필요 없이 클라우드 데이터베이스로 작업할 수 있게 해준다.
 TeamPostgreSQL PostgreSQL을 위한 AJAX/자바스크립트 기반 웹 인터페이스이다. 웹 브라우저를 통해 데이터 및 데이터베이스 객체를 탐색, 유지 관리 및 생성할 수 있다. 인터페이스는 자동 완성이 지원되는 탭형 SQL 에디터, 행 편집 위젯, 행과 테이블 간의 클릭형 외래 키 내비게이션, 자주 사용되는 스크립트를 위한 즐겨찾기 관리 등의 기능을 제공한다. 웹 인터페이스와 데이터베이스 연결 모두에 대해 SSH를 지원한다. 윈도우, 매킨토시, 리눅스용 설치 프로그램과 스크립트에서 실행되는 간단한 크로스 플랫폼 아카이브가 제공된다.
 LibreOffice, OpenOffice.org 리브레오피스 및 오픈오피스 Base를 PostgreSQL의 프런트엔드로 사용할 수 있다.
 pgBadger pgBadger PostgreSQL 로그 분석기는 PostgreSQL 로그 파일에서 상세한 보고서를 생성한다.
 pgDevOps pgDevOps는 여러 PostgreSQL 버전, 확장 및 커뮤니티 구성 요소를 설치 및 관리하고, SQL 쿼리를 개발하며, 실행 중인 데이터베이스를 모니터링하고 성능 문제를 찾는 웹 도구 모음이다.
 Adminer Adminer는 PHP로 작성된 PostgreSQL 등을 위한 단순한 웹 기반 관리 도구이다.
 pgBackRest pgBackRest는 전체, 차분 및 증분 백업을 지원하는 PostgreSQL용 백업 및 복구 도구이다.
 pgaudit pgaudit은 PostgreSQL에서 제공하는 표준 로깅 기능을 통해 상세한 세션 및 객체 감사 로깅을 제공하는 PostgreSQL 확장이다.
 WAL-E WAL-E는 파이썬으로 작성된 PostgreSQL용 백업 및 복구 도구로, 물리적(WAL 기반) 백업을 지원한다.
 DBeaver DBeaver는 PostgreSQL용 자유-오픈 소스 GUI 관리 도구로, 시각적 개체 다이어그램과 인텔리센스 기능을 갖추고 있다. 상업용 PRO 라이선스도 있다.
 Postgresus Postgresus는 외부 소스(S3, NAS, FTP, 구글 드라이브, 구글 클라우드 등) 지원 및 외부 서비스(슬랙, 디스코드, 텔레그램, SMTP 등) 알림 기능이 있는 예약 백업용 GUI 오픈 소스 백업 도구이다.

다수의 회사가 PostgreSQL을 위한 사유 도구를 제공한다. 이들은 종종 다양한 특정 데이터베이스 제품에 맞춰진 보편적인 핵심 기능으로 구성된다. 이러한 도구들은 대부분 오픈 소스 도구와 관리 기능을 공유하지만 데이터 모델링, 가져오기, 내보내기 또는 보고 기능에서 향상된 기능을 제공한다.

 주요 사용자 
PostgreSQL을 기본 데이터베이스로 사용하는 주요 조직 및 제품은 다음과 같다.

 마이크로소프트: 8억 대 이상의 윈도우 장치에서 2만 가지 유형의 메트릭을 분석하여 윈도우 업데이트의 품질을 추적하는 페타바이트 규모의 "릴리스 품질 뷰"(RQV) 분석 대시보드에 사용된다.
 2009년 소셜 네트워크 웹사이트 마이스페이스는 데이터 웨어하우징을 위해 수정되지 않은 PostgreSQL을 기반으로 구축된 Aster Data Systems의 nCluster 데이터베이스를 사용했다.
 Geni.com은 메인 계보 데이터베이스에 PostgreSQL을 사용한다.
 오픈스트리트맵: 자유롭게 편집 가능한 세계 지도를 만드는 협업 프로젝트이다.
 Afilias: .org, .info 등을 위한 도메인 레지스트리이다.
 소니 온라인 멀티플레이어 온라인 게임.
 바스프: 농업 비즈니스 포털의 쇼핑 플랫폼.
 레딧 소셜 뉴스 웹사이트.
 스카이프 VoIP 애플리케이션의 핵심 사업 데이터베이스.
 Sun xVM: Sun의 가상화 및 데이터센터 자동화 제품군.
 뮤직브레인즈: 개방형 온라인 음악 백과사전.
 국제우주정거장: 궤도에서 원격 측정 데이터를 수집하고 이를 지상으로 복제하는 데 사용된다.
 MyYearbook 소셜 네트워킹 사이트.
 인스타그램: 모바일 사진 공유 서비스.
 Disqus: 온라인 토론 및 댓글 서비스.
 TripAdvisor: 대부분 사용자 생성 콘텐츠로 이루어진 여행 정보 웹사이트. (Presentation video)
 얀덱스: 러시아 인터넷 기업인 얀덱스는 자사의 Yandex.Mail 서비스를 오라클에서 Postgres로 전환했다.
 아마존 레드시프트: AWS의 일부로, ParAccel의 Postgres 수정을 기반으로 한 컬럼형 온라인 분석 처리(OLAP) 시스템이다.
 미국 해양대기청(NOAA)의 미국 국립기상청(NWS): NEXRAD 기상 레이더, 지표면 및 수문학 시스템의 데이터를 통합하여 상세한 국지적 예보 모델을 구축하는 시스템인 대화형 예보 준비 시스템(IFPS)에 사용된다.
 영국의 국립 기상청인 영국 기상청은 더 많은 오픈 소스 기술을 배포하려는 전략의 일환으로 오라클을 PostgreSQL로 교체하기 시작했다.
 WhitePages.com은 오라클과 MySQL을 사용해 왔으나, 핵심 디렉터리를 자체 관리로 전환할 때 PostgreSQL을 선택했다. 여러 소스의 대규모 데이터 세트를 결합해야 했기 때문에 빠른 속도로 데이터를 로드하고 인덱싱하는 PostgreSQL의 능력이 결정적인 요인이었다.
 FlightAware: 항공편 추적 웹사이트.
 Grofers: 온라인 식료품 배달 서비스.
 가디언은 2018년에 몽고DB에서 PostgreSQL로 마이그레이션했다.
 YugabyteDB는 PostgreSQL 쿼리 계층을 기본 SQL 모드로 구현한다.
 오픈AI는 챗GPT를 포함한 주요 API 서비스의 일부로 PostgreSQL을 사용한다.

 서비스 구현 
일부 주목할만한 벤더들은 PostgreSQL을 서비스형 소프트웨어로 제공한다.

 서비스형 플랫폼 제공업체인 헤로쿠는 2007년 시작부터 PostgreSQL을 지원해 왔다. 이들은 헤로쿠에서 개발한 오픈 소스 소프트웨어인 WAL-E를 기반으로 하는 전체 데이터베이스 롤백(특정 시점으로 데이터베이스를 복구하는 기능)과 같은 부가 기능을 제공한다.
 2012년 1월, EnterpriseDB는 장애 조치, 레플리케이션, 부하 분산 및 확장을 위한 자동 프로비저닝 기능을 갖춘 PostgreSQL 및 자체 사유 제품인 Postgres Plus Advanced Server의 클라우드 버전을 출시했다. 이는 아마존 웹 서비스에서 실행된다. 2015년부터 Postgres Advanced Server는 알리바바 클라우드에서 서비스형 관계형 데이터베이스인 ApsaraDB for PPAS로 제공되고 있다.
 VM웨어는 2012년 5월부터 VM웨어 v스피어의 프라이빗 클라우드를 위해 vFabric Postgres(vPostgres라고도 함)를 제공해 왔다. 회사는 2014년에 해당 제품의 판매 종료(EOA)를 발표했다.
 2013년 11월, 아마존 웹 서비스는 아마존 관계형 데이터베이스 서비스 제품에 PostgreSQL을 추가한다고 발표했다.
 2016년 11월, 아마존 웹 서비스는 클라우드 네이티브 관리형 데이터베이스 서비스인 아마존 오로라에 PostgreSQL 호환 기능을 추가한다고 발표했다.
 2017년 5월, 마이크로소프트 애저는 Azure Database for PostgreSQL을 발표했다.
 2019년 5월, 알리바바 클라우드는 PolarDB for PostgreSQL을 발표했다.
 Jelastic 멀티클라우드 서비스형 플랫폼은 2011년부터 컨테이너 기반 PostgreSQL 지원을 제공해 왔다. 또한 PostgreSQL의 자동 비동기 마스터-슬레이브 레플리케이션을 제공한다.
 2019년 6월, IBM 클라우드는 IBM Cloud Hyper Protect DBaaS for PostgreSQL을 발표했다.
 2020년 9월, Crunchy Data는 Crunchy Bridge를 발표했다.
 2022년 6월, Neon.tech는 Neon Serverless Postgres를 발표했다.
 2022년 12월, 구글 클라우드 플랫폼은 완전 관리형 PostgreSQL 클라우드 서비스인 AlloyDB의 일반 제공을 발표했다.
 2023년 10월, Nile은 Nile Postgres Platform을 발표했다.
 2024년 4월, 구글 클라우드 플랫폼은 온프레미스, 다른 클라우드 또는 에지 환경을 포함한 모든 인프라에서 실행되도록 설계된 AlloyDB의 다운로드 버전인 AlloyDB Omni의 일반 제공을 발표했다.

 출시 역사 
+ 출시 역사 버전 최초 출시 최신 마이너 버전 최신 릴리스 지원종료 주요 변경 사항 6.0 1997-01-29    PostgreSQL의 첫 공식 릴리스, 고유 인덱스, pg_dumpall 유틸리티, ident 인증 6.1 1997-06-08  1997-07-22  다중 컬럼 인덱스, 시퀀스, money 자료형, GEQO (GEnetic Query Optimizer) 6.2 1997-10-02  1997-10-17  JDBC 인터페이스, 트리거, 서버 프로그래밍 인터페이스, 제약 조건 6.3 1998-03-01  1998-04-07 2003-03-01 SQL-92 서브셀렉트 기능, PL/pgTCL 6.4 1998-10-30  1998-12-20 2003-10-30 VIEW(당시는 읽기 전용) 및 RULE, PL/pgSQL 6.5 1999-06-09  1999-10-13 2004-06-09 MVCC, 임시 테이블, 더 많은 SQL 구문 지원(CASE, INTERSECT, EXCEPT) 7.0 2000-05-08  2000-11-11 2004-05-08 외래 키, SQL-92 조인 구문 7.1 2001-04-13  2001-08-15 2006-04-13 로그 선행 기입, 외부 조인 7.2 2002-02-04  2005-05-09 2007-02-04 PL/Python, 더 이상 OID 요구하지 않음, 메시지 국제화 7.3 2002-11-27  2008-01-07 2007-11-27 스키마, 테이블 함수, 준비된 쿼리 7.4 2003-11-17  2010-10-04 2010-10-01 JOIN 최적화 및 데이터 웨어하우스 기능 8.0 2005-01-19  2010-10-04 2010-10-01 마이크로소프트 윈도우에서의 네이티브 서버 지원, 세이브포인트, 테이블스페이스, 특정 시점 복구 8.1 2005-11-08  2010-12-16 2010-11-08 성능 최적화, 2단계 커밋, 테이블 파티셔닝, 인덱스 비트맵 스캔, 공유 행 잠금, 역할 8.2 2006-12-05  2011-12-05 2011-12-05 성능 최적화, 온라인 인덱스 빌드, 권고 잠금(advisory locks), 웜 스탠바이 8.3 2008-02-04  2013-02-07 2013-02-07 Heap-only tuples, 전문 검색, SQL/XML, ENUM 유형, UUID 유형 8.4 2009-07-01  2014-07-24 2014-07-24 윈도우 함수, 컬럼 수준 권한, 병렬 데이터베이스 복구, 데이터베이스별 정렬 순서, 공통 테이블 표현식 및 재귀 쿼리 9.0 2010-09-20  2015-10-08 2015-10-08 내장 바이너리 스트리밍 레플리케이션, 핫 스탠바이, 인플레이스 업그레이드 기능, 64비트 윈도우 9.1 2011-09-12  2016-10-27 2016-10-27 동기 레플리케이션, 컬럼별 정렬 순서, 언로그드(unlogged) 테이블, 직렬화 가능 스냅샷 격리, 쓰기 가능한 공통 테이블 표현식, SELinux 통합, 확장, 외부 테이블 9.2 2012-09-10  2017-11-09 2017-11-09 계층형 스트리밍 복제, 인덱스 전용 스캔, 네이티브 JSON 지원, 개선된 잠금 관리, 범위 유형, pg_receivexlog 도구, SP-GiST 인덱스 9.3 2013-09-09  2018-11-08 2018-11-08 커스텀 백그라운드 워커, 데이터 체크섬, 전용 JSON 연산자, LATERAL 조인, 더 빠른 pg_dump, 새로운 pg_isready 서버 모니터링 도구, 트리거 기능, 뷰 기능, 쓰기 가능한 외부 테이블, 구체화 뷰, 복제 개선 9.4 2014-12-18  2020-02-13 2020-02-13 JSONB 자료형, 구성을 변경하기 위한 ALTER SYSTEM 문, 읽기를 차단하지 않고 구체화 뷰를 새로 고치는 기능, 백그라운드 워커 프로세스의 동적 등록/시작/중지, 논리적 디코딩 API, GiN 인덱스 개선, 리눅스 휴즈 페이지(huge page) 지원, pg_prewarm을 통한 데이터베이스 캐시 미리 로드 9.5 2016-01-07  2021-02-11 2021-02-11 UPSERT, 행 수준 보안, TABLESAMPLE, CUBE/ROLLUP, GROUPING SETS, 새로운 BRIN 인덱스 9.6 2016-09-29  2021-11-11 2021-11-11 병렬 쿼리 지원, 정렬/조인 푸시다운을 포함한 외부 데이터 래퍼(FDW) 개선, 다중 동기 대기 서버, 큰 테이블의 더 빠른 진공(Vacuuming) 10 2017-10-05  2022-11-10 2022-11-10 논리적 복제, 선언적 테이블 파티셔닝, 개선된 쿼리 병렬 처리 11 2018-10-18  2023-11-09 2023-11-09 파티셔닝의 견고성 및 성능 향상, 저장 프로시저에서 트랜잭션 지원, 쿼리 병렬 처리 능력 강화, 표현식을 위한 JIT(Just-In-Time) 컴파일 12 2019-10-03  2024-11-21 2024-11-21 쿼리 성능 및 공간 활용도 개선, SQL/JSON 경로 표현식 지원, 생성된 컬럼(generated columns), 국제화 및 인증 개선, 새로운 플러그형 테이블 저장소 인터페이스 13 2020-09-24  2025-11-13 2025-11-13 B 트리 인덱스 항목의 중복 제거를 통한 공간 절약 및 성능 이득, 집계 또는 파티션 테이블을 사용하는 쿼리의 성능 향상, 확장된 통계 정보를 사용한 더 나은 쿼리 계획, 인덱스의 병렬 진공 처리, 증분 정렬 14 2021-09-30  2025-11-13 2026-11-12 공통 테이블 표현식에 SQL 표준 SEARCH 및 CYCLE 절 추가, GROUP BY에 DISTINCT 추가 허용 15 2022-10-13  2025-11-13 2027-11-11 SQL 표준 MERGE 문 구현. PL/Python은 이제 현재의 만 지원하며, 는 더 이상 중단된 가 아닌 을 의미함. 16 2023-09-14  2025-11-13 2028-11-09 논리적 복제 개선, pg_stat_io 뷰(I/O 메트릭용) 추가 17 2024-09-26  2025-11-13 2029-11-08 진공 프로세스, I/O 계층 및 쿼리 실행 성능 향상, JSON 기능 확장, MERGE 기능 추가 및 COPY 개선, 고가용성 및 업그레이드를 위한 논리적 복제 강화, 보안, 운영, 모니터링 및 분석 개선 18 2025-09-25  2025-11-13 2030-11-14 새로운 I/O 서브시스템 및 비동기 I/O 향상

 생태계 및 파생 제품 

관대한 오픈 소스 라이선스와 확장 가능한 아키텍처 덕분에 PostgreSQL을 중심으로 광범위한 생태계가 발전했다. 여기에는 전담 지원 및 호스팅을 제공하는 수많은 회사뿐만 아니라 특정 작업 부하를 위해 PostgreSQL을 조정한 여러 포크 및 파생 데이터베이스가 포함된다. 주요 파생 제품은 다음과 같다.

 Greenplum 데이터베이스: 대규모 분석을 위해 설계된 구버전 PostgreSQL 기반의 대규모 병렬 처리(MPP) 데이터 웨어하우스이다.
 TimescaleDB: 시계열 데이터의 빠른 수집과 복잡한 쿼리 처리에 최적화된 PostgreSQL 확장으로 제공되는 시계열 데이터베이스이다.
 아마존 오로라: PostgreSQL 호환 에디션을 제공하는 아마존 웹 서비스의 클라우드 네이티브 관계형 데이터베이스이다.
 Neon: 저장소와 컴퓨팅을 분리하여 데이터베이스 브랜칭과 같은 현대적 개발 기능을 제공하는 오픈 소스 서버리스 PostgreSQL 구현체이다.
 AlloyDB: 하이브리드 작업 부하 및 통합 AI 기능을 위해 설계된, 컴퓨팅과 저장소를 분리한 완전 관리형 PostgreSQL 호환 구글 클라우드 데이터베이스이다.

 같이 보기 
 LLVM

 각주 

 외부 링크 


 한국 사용자 커뮤니티
 http://translate.postgresql.kr/redmine  한국어 설명서
 http://www.postgresdba.com/ PostgreSQL/Enterprisedb 한국 커뮤니티
 https://www.meetup.com/pgmeetupseoul/ 한국 PostgreSQL 밋업 커뮤니티


분류:자유 데이터베이스 관리 시스템
분류:크로스 플랫폼 소프트웨어
분류:C로 작성된 자유 소프트웨어
분류:자유 데이터베이스 관리 시스템