PostgreSQL
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
PostgreSQL은 캘리포니아 대학교 버클리 분교의 Ingres 프로젝트에서 시작된 객체 관계형 데이터베이스 관리 시스템(ORDBMS)이다. 1980년대 후반에 개발이 시작되어, 1996년 PostgreSQL로 명칭이 변경된 후 전 세계 개발자들의 협력을 통해 발전해왔다. 다양한 확장 기능, 유연성, 표준 준수, ACID 속성, 동시성 제어, 인덱스 지원, 절차적 언어 지원, 복제 및 고가용성 기능을 제공하며, 마이크로소프트, 마이스페이스, 레딧, 스카이프 등 다양한 기업과 기관에서 활용되고 있다. 1997년 첫 버전인 6.0이 출시된 이후, 지속적으로 새로운 버전이 발표되고 있다.
더 읽어볼만한 페이지
- PostgreSQL - 아마존 레드시프트
- PostgreSQL - PL/pgSQL
PL/pgSQL은 PostgreSQL에서 복잡한 비즈니스 로직과 데이터 조작을 수행하기 위해 SQL을 확장한 절차적 프로그래밍 언어로, 함수, 트리거, 저장 프로시저 작성에 사용되어 네트워크 트래픽 감소와 성능 향상, 안정적인 데이터베이스 프로그래밍을 지원한다. - 자유 데이터베이스 관리 시스템 - SQLite
SQLite는 D. 리처드 히프가 설계한 서버리스 구조의 임베디드 SQL 데이터베이스 엔진으로, 별도의 DBMS 없이 프로그램에 통합되어 작동하며 전체 데이터베이스를 단일 파일로 저장하는 특징이 있고, 다양한 운영체제와 환경에서 널리 사용된다. - 자유 데이터베이스 관리 시스템 - MySQL
MySQL은 1994년 스웨덴에서 개발을 시작하여 현재 오라클에 인수된 관계형 데이터베이스 관리 시스템으로, 오픈 소스 및 상업용 에디션을 제공하며 ANSI SQL 99 표준을 지원하고 다양한 스토리지 엔진과 프로그래밍 언어 API를 지원한다. - 크로스 플랫폼 소프트웨어 - MSN
MSN은 1995년 마이크로소프트가 윈도우 95와 함께 출시한 웹 포털이자 관련 서비스 모음으로, 뉴스, 엔터테인먼트, 스포츠, 금융 등 다양한 콘텐츠를 제공하며 주요 온라인 서비스를 통합하는 허브 역할을 수행한다. - 크로스 플랫폼 소프트웨어 - 구글 포토
구글 포토는 사진 및 동영상 저장, 공유, 관리 기능을 제공하는 구글의 클라우드 기반 서비스로, 자동 분류, 얼굴 인식, 검색 기능을 제공하지만 2021년부터 무료 무제한 저장 용량 제공 정책이 변경되었고, 2024년에는 기술의 군사적 이용에 대한 윤리적 논란이 있었다.
| PostgreSQL - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 기본 정보 | |
![]() | |
| 개발자 | PostgreSQL Global Development Group |
| 첫 출시일 | 1996년 7월 8일 |
| 최신 안정 버전 | 16.1 |
| 최신 안정 버전 출시일 | 2023년 11월 9일 |
| 프로그래밍 언어 | C (LLVM 의존성의 경우 C++) |
| 장르 | RDBMS |
| 라이선스 | PostgreSQL 라이선스 (자유-오픈 소스 소프트웨어, 허용적) |
| 라이선스 정보 | |
| 라이선스 이름 | PostgreSQL 라이선스 |
| 저작권자 | PostgreSQL Global Development Group, 캘리포니아 대학교 이사회 |
| OSI 승인 | 예 |
| 데비안 승인 | 예 |
| FSF 승인 | 예 |
| GPL 호환 | 예 |
| 카피레프트 | 아니오 |
| 링크 | 예 |
| 라이선스 웹사이트 | PostgreSQL 라이선스 정보 |
| 발음 | |
| 설명 | PostgreSQL은 "포스트그레스큐엘"로 발음된다. |
| 확장 기능 | |
| 공간 정보 | PostGIS를 통해 공간 데이터 저장, 색인, 쿼리 지원 |
| 시간 정보 | 시간 데이터베이스로 확장 가능, 데이터 변경 내역 자동 추적 및 쿼리 지원 |
| Oracle 호환 기능 | Orafce를 통해 Oracle RDBMS 기능 일부 에뮬레이트 |
| 작업 스케줄링 | pg_dbms_job을 통해 Oracle의 DBMS_JOB 패키지와 유사한 작업 큐 관리 |
| 호환성 및 이식성 | |
| Windows 호환 | WiltonDB를 통해 Microsoft SQL Server 대체 가능 |
| SQL Server 호환 | Babelfish for PostgreSQL를 통해 Microsoft SQL Server용으로 작성된 쿼리 이해 가능 |
| 클라이언트 및 도구 | |
| SQL 클라이언트 | 다양한 인터랙티브 SQL 클라이언트 (PostgreSQL 클라이언트 목록) |
| 스키마 디자인 도구 | 다양한 GUI 기반 스키마 디자인 도구 (PostgreSQL 디자인 도구 목록) |
| 기타 유틸리티 | 데이터 로더, 비교기 등 다양한 유틸리티 (PostgreSQL GUI 도구 목록) |
| 확장 및 고가용성 | |
| 확장 방법 | 단일 서버를 넘어 다양한 방법으로 확장 가능 (PostgreSQL 확장 방법) |
| 상표 정책 | |
| 상표 사용 | PostgreSQL 프로젝트 및 커뮤니티 지원을 위한 상표 사용 허용 (PostgreSQL 상표 정책) |
| 기타 | |
| 참고 | Parquet과 Postgres를 데이터 레이크에서 사용 |
| macOS 지원 | macOS 에서도 사용 가능 (macOS 패키지) |
2. 역사
PostgreSQL은 "포스트그레스큐엘" 또는 "포스트그리 에스큐엘"이라고 발음한다. 이전에는 "Postgres"라고 불렸지만, 표준 SQL을 지원하면서 이름 뒤에 SQL을 붙였다.
PostgreSQL은 캘리포니아대학교 버클리 분교의 Ingres 프로젝트에서 발전했다. 1982년 잉그레스 팀의 리더 마이클 스톤브레이커는 Ingres 상용화를 위해 학교를 떠났다가, 1985년 학교로 돌아와 "post-Ingres"(후기-Ingres)프로젝트를 시작했다. 이 프로젝트는 당시 데이터베이스 시스템의 문제점을 해결하고자 했다.
1994년, 버클리 대학원생 앤드류 유와 졸리 첸은 POSTQUEL 질의 언어 인터프리터를 SQL 질의 언어 인터프리터로 대체하여 Postgres95를 만들었다. 1996년, SQL 지원을 반영하여 PostgreSQL로 이름이 변경되었다. 1997년 1월 29일, PostgreSQL의 첫 번째 버전인 6.0이 출시되었고, 이후 전 세계 개발자들과 자원봉사자들이 PostgreSQL 글로벌 개발 그룹을 통해 소프트웨어를 유지 관리하고 있다.
PostgreSQL은 상용 버전으로 만들어질 수 있었지만, 과거와 같이 급속도로 개발되지는 않았다. 상용 PostgreSQL의 대표적인 예로는 Paula Hawthorn[204]과 마이클 스톤브레이커가 설립한 Illustra Information Technologies의 상용 버전이 있다.
PostgreSQL은 자유-오픈소스 소프트웨어 PostgreSQL 라이선스에 따라 릴리스를 제공하고 있다.
1999년 7월 23일, 일본 PostgreSQL 사용자회가 설립되어 사단법인으로 활동을 시작했다.[166] 2006년 2월 1일, 일본 PostgreSQL 사용자회는 NPO로 재편되었다.[166]
2001년 이후에는 PostgreSQL을 상용 지원하는 회사들이 등장했다.
| 설립 연도 | 회사명 | 주요 특징 |
|---|---|---|
| 2001년 | Command Prompt, Inc. | Mammoth Replicator (복제) |
| 2003년 | SRAOSS | PowerGres, PowerGRES Plus |
| 2005년 | EnterpriseDB | Postgres Plus (Oracle Database와의 호환성 향상) |
| 2005년 | Greenplum | BizGres (데이터 웨어하우스 및 비즈니스 인텔리전스(BI)용) |
2011년 7월, 오픈소스 데이터베이스 기술자 인증 시험(OSS-DB Exam)에서 기준 RDBMS로 채택되었다.
2. 1. 개발 배경
PostgreSQL은 캘리포니아대학교 버클리 분교에서 시작된 Ingres 프로젝트에서 시작되었다. 프로젝트 리더인 마이클 스톤브레이커는 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[204]과 마이클 스톤브레이커가 세운 Illustra Information Technologies의 상용버전이 있다.
2. 2. POSTGRES와 Postgres95
PostgreSQL은 캘리포니아대학교 버클리 분교에서 시작된 Ingres 프로젝트로부터 시작되었다. 프로젝트 리더였던 마이클 스톤브레이커는 1982년 Ingres의 상용화를 위해 학교를 떠났다가 1985년에 다시 학교로 돌아와 "post-Ingres"(후기-Ingres)프로젝트를 시작했다. 이 프로젝트는 1980년대 초반부터 급증한 당시 데이터베이스 시스템의 문제점들을 해결하고자 했다.POSTGRES는 데이터 형식을 완벽하게 지원하는 데 필요한 최소한의 기능을 추가하는 것을 목표로 했다. 데이터베이스는 관계를 이해하고 ''규칙''을 사용하여 관련 테이블의 정보를 자연스러운 방식으로 검색할 수 있었다. POSTGRES는 잉그레스의 많은 아이디어를 사용했지만 코드는 사용하지 않았다.
1986년부터 개발팀은 데이터베이스 시스템의 기본적인 사항에 대해 몇 가지 논문을 제출하고, 1988년까지 실제로 운영이 가능한 프로토타입을 완성했다. 1989년 6월 첫 번째 버전을, 1990년 6월에는 규칙 시스템을 재작성한 두 번째 버전을 소수의 사용자들에게 공개했다. 1991년 세 번째 버전에서는 규칙 시스템을 다시 쓰고, 다중 스토리지 관리자[19] 및 향상된 질의 엔진에 대한 지원을 추가했다. 1993년까지 많은 사용자들이 이 시스템을 사용했고, 지원에 관한 요청이 쇄도하기 시작했다.
개발팀이 네 번째 버전을 내놓은 후 일차적인 프로젝트가 공식적으로는 종료되었으나, MIT 라이선스 변형본에 따라 오픈소스 개발자들은 Postgres 시스템의 소스코드를 넘겨받아 개발을 계속했다.
1994년 캘리포니아대학교 버클리분교의 졸업생인 앤드류 유와 졸리 첸이 SQL 해석기를 추가하고 기존 Ingres 기반의 질의 시스템을 대체하여 "Postgres95"를 만들었다. ''monitor'' 콘솔도 psql로 대체되었다.
1996년에는 기존의 데이터베이스 시스템에 새로운 SQL이 추가되었다는 것을 알리기 위해 Postgres95라는 이름을 PostgreSQL로 바꾸었다.
2. 3. PostgreSQL로의 전환
PostgreSQL은 캘리포니아 대학교 버클리 캠퍼스의 잉그레스 프로젝트에서 발전했다. 1982년, 잉그레스 팀의 리더인 마이클 스톤브레이커는 버클리를 떠나 잉그레스의 독점 버전을 만들었다. 1985년 버클리로 돌아온 그는 1980년대 초에 점점 더 명확해진 당시 데이터베이스 시스템의 문제점을 해결하기 위한 포스트-잉그레스 프로젝트를 시작했다.새로운 프로젝트인 POSTGRES는 데이터 형식을 완벽하게 지원하는 데 필요한 최소한의 기능을 추가하는 것을 목표로 했다. 이러한 기능에는 형식을 정의하고 관계를 완전히 설명하는 기능이 포함되었는데, 이는 널리 사용되었지만 사용자가 전적으로 유지 관리했다. POSTGRES에서 데이터베이스는 관계를 이해하고 ''규칙''을 사용하여 관련 테이블의 정보를 자연스러운 방식으로 검색할 수 있었다. POSTGRES는 잉그레스의 많은 아이디어를 사용했지만 코드는 사용하지 않았다.
1986년부터 발표된 논문들이 시스템의 기초를 설명했고, 1988년 ACM SIGMOD 컨퍼런스에서 프로토타입 버전이 공개되었다. 팀은 1989년 6월 소수의 사용자에게 버전 1을 출시했고, 그 뒤를 이어 1990년 6월에는 다시 작성된 규칙 시스템을 포함한 버전 2를 출시했다. 1991년에 출시된 버전 3은 다시 규칙 시스템을 다시 작성하고 여러 저장 관리자[19]를 지원하고 향상된 쿼리 엔진을 추가했다. 1993년까지 사용자 수가 증가하여 프로젝트는 지원 및 기능 요청에 압도되기 시작했다. 1994년 6월 30일 버전 4.2를 출시한 후 주로 정리 작업 프로젝트는 종료되었다. 버클리는 다른 개발자가 코드를 어떤 용도로든 사용할 수 있도록 MIT 라이선스 변형본에 따라 POSTGRES를 출시했다. 당시 POSTGRES는 잉그레스의 영향을 받은 POSTQUEL 질의 언어 인터프리터를 사용했는데, 이는 ''monitor''라는 콘솔 응용 프로그램을 사용하여 대화형으로 사용할 수 있었다.
1994년, 버클리 대학원생 Andrew Yu와 Jolly Chen은 POSTQUEL 질의 언어 인터프리터를 SQL 질의 언어 인터프리터로 대체하여 Postgres95를 만들었다. ''monitor'' 콘솔도 psql로 대체되었다.
1996년, 이 프로젝트는 SQL 지원을 반영하여 PostgreSQL로 이름이 변경되었다. PostgreSQL.org 웹사이트의 온라인 서비스는 1996년 10월 22일에 시작되었다. 첫 번째 PostgreSQL 릴리스는 1997년 1월 29일에 버전 6.0을 형성했다. 그 이후로 전 세계의 개발자와 자원봉사자들이 PostgreSQL 글로벌 개발 그룹으로서 소프트웨어를 유지 관리해 왔다.
이 프로젝트는 계속해서 자유-오픈소스 소프트웨어 PostgreSQL 라이선스에 따라 릴리스를 제공하고 있다.
2. 4. 한국에서의 PostgreSQL
PostgreSQL은 저장 프로시저라고 불리는 SQL문으로 작성된 함수를 서버 환경에서 사용할 수 있도록 지원한다. 다른 언어와 달리 제어문과 반복문을 직접 사용하지는 못하지만, 다른 언어와 결합하여 사용할 수 있다. 일부 언어는 트리거 내부에서 실행될 수도 있다.PostgreSQL에서 지원하는 언어는 다음과 같다.
- PL/pgSQL (오라클의 PL/SQL과 유사하다)
- 스크립트 언어 (예: PL/Python, PL/php, PL/Perl)
- 컴파일 언어 (예: C/C++, PL/Java)
- 통계적 언어 (예: PL/R)
PostgreSQL은 테이블에 대한 질의 결과를 반환하는 '행 반환 함수'를 지원한다. 함수의 실행 권한은 함수 작성자와 실행자 모두에게 있다.
3. 특징
PostgreSQL은 사용자가 직접 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 SQL 차원에서 만들 수 있다는 특징이 있다.[21] 이는 단순한 자료 저장소를 넘어, 새로운 프로그래밍 언어처럼 개발자의 창의성에 따라 다양한 기능을 쉽게 구현할 수 있게 한다.
java나 C++처럼 테이블을 만들고 상속 기능을 이용해 하위 테이블을 만들 수 있다. 상위 테이블을 조회하면 하위 테이블의 모든 자료를 조회할 수 있으며, 하위 테이블을 만들 때 상위 테이블의 칼럼을 상속받으면서 하위 테이블에만 있는 칼럼을 추가할 수도 있다.
PostgreSQL은 일러스트라(Illustra)와 인포믹스(Informix)의 객체 관계형 데이터베이스 관리 시스템 구현을 계승했다.[109] SQL을 질의어로 사용하며, SQL92, SQL:1999 대부분과 SQL:2003, SQL:2008 일부를 지원한다.[110]
FreeBSD, OpenBSD, 리눅스, macOS, 솔라리스 등 유닉스 계열 운영체제와 마이크로소프트 윈도우에서 동작한다. 윈도우에서는 7.4 버전까지 Cygwin이 필요했지만, 8.0 이후 버전부터는 네이티브로 동작한다. MinGW-w64[116] 및 Cygwin[117]에서도 윈도우 버전이 배포된다.
32비트/64비트 아키텍처를 모두 지원한다. 32비트 버전은 공유 버퍼 크기가 최대 2GB로 제한되지만, 64비트 버전에는 제한이 없다.
소스 코드, RPM, APT 외에 엔터프라이즈DB 사에서 GUI 설치 프로그램을 제공한다. 이 패키지에는 GUI 관리 도구인 pgAdmin과 드라이버 등이 포함되어 있다.
3. 1. 확장성 및 유연성
PostgreSQL은 다른 관계형 데이터베이스 시스템과 달리, 사용자가 직접 연산자, 복합 자료형, 집계 함수, 자료형 변환, 확장 기능 등 다양한 데이터베이스 객체를 만들 수 있는 기능을 SQL 차원에서 제공한다.[21] 이러한 특징은 단순한 자료 저장소를 넘어, 개발자의 창의성에 따라 새로운 프로그래밍 언어처럼 무한한 기능을 쉽게 구현할 수 있게 해준다.PostgreSQL은 다음과 같은 다양한 기본 데이터 형식을 지원한다.
| 데이터 형식 종류 |
|---|
또한, 사용자는 PostgreSQL의 인덱싱 인프라(GiST, GIN, SP-GiST)를 통해 자체 데이터 형식을 생성하고, 일반적으로 완전하게 색인 가능하도록 만들 수 있다. 예를 들어, PostgreSQL용 PostGIS 프로젝트의 지리 정보 시스템(GIS) 데이터 형식이 있다.
도메인이라는 데이터 형식은 다른 데이터 형식과 동일하지만, 도메인 생성자가 정의한 선택적 제약 조건이 있다. 즉, 도메인에 입력된 모든 데이터는 도메인의 일부로 정의된 제약 조건을 준수해야 한다.
범위 형식은 데이터 범위를 나타내는 데이터 형식으로, 이산 범위(예: 1에서 10까지의 정수) 또는 연속 범위(예: 오전 10시에서 오전 11시 사이의 시간)를 표현할 수 있다. 기본 제공 범위 형식에는 정수, 큰 정수, 십진수, 타임스탬프(시간대 포함 및 미포함), 날짜의 범위가 포함된다.
사용자 지정 범위 형식을 만들어 새로운 유형의 범위를 사용할 수 있다. 예를 들어, inet 형식을 기반으로 하는 IP 주소 범위 또는 float 데이터 형식을 기반으로 하는 부동 소수점 범위를 만들 수 있다. 범위 형식은 `[]` (포함) 및 `()` (배타) 문자를 사용하여 범위 경계를 지원하며, 겹침, 포함, 오른쪽 등을 확인하는 데 사용되는 기존 연산자와 호환된다.
데이터베이스 내의 거의 모든 객체에 대해 새로운 유형을 생성할 수 있으며, 여기에는 다음이 포함된다.
- 캐스트
- 변환
- 데이터 유형
- 데이터 도메인
- 함수 (집계 함수 및 윈도우 함수 포함)
- 색인 (사용자 정의 유형에 대한 사용자 정의 색인 포함)
- 연산자 (오버로딩 가능한 기존 연산자 포함)
- 절차적 언어
절차적 언어를 통해 개발자는 사용자 정의 서브루틴(함수) (''저장 프로시저''라고도 함)으로 데이터베이스를 확장할 수 있다. 이러한 함수는 데이터베이스 트리거(특정 데이터 수정 시 호출되는 함수)와 사용자 정의 데이터 형식 및 집계 함수를 구축하는 데 사용될 수 있다.[35] 절차적 언어는 함수를 정의하지 않고도 SQL 수준에서 DO 명령어를 사용하여 호출할 수도 있다.[36]
언어는 ''안전한'' 언어와 ''안전하지 않은'' 언어로 나뉜다. 안전한 언어로 작성된 프로시저는 샌드박스화되어 모든 사용자가 안전하게 생성하고 사용할 수 있다. 안전하지 않은 언어로 작성된 프로시저는 데이터베이스의 보안 제한을 우회할 수 있지만, 데이터베이스 외부 소스에도 액세스할 수 있기 때문에 슈퍼유저만 생성할 수 있다. 일부 언어(예: Perl)는 안전한 버전과 안전하지 않은 버전을 모두 제공한다.
PostgreSQL은 세 가지 절차적 언어를 내장 지원한다.
- 일반 SQL (안전): 더 간단한 SQL 함수는 인라인으로 전개되어 호출하는 SQL 쿼리에 통합될 수 있다. 이는 함수 호출 오버헤드를 절약하고 쿼리 최적화 프로그램이 함수 내부를 "볼 수 있게" 해준다.
- PL/pgSQL (Procedural Language/PostgreSQL, 안전): Oracle의 PL/SQL (Procedural Language for SQL) 절차적 언어 및 SQL/PSM (SQL/Persistent Stored Modules)과 유사하다.
- C (안전하지 않음): 하나 이상의 사용자 정의 공유 라이브러리를 데이터베이스에 로드할 수 있다. C로 작성된 함수는 최상의 성능을 제공하지만, 코드의 버그는 데이터베이스를 충돌시키고 손상시킬 수 있다. 대부분의 내장 함수는 C로 작성된다.
PostgreSQL은 확장을 통해 절차적 언어를 데이터베이스에 로드할 수 있도록 허용한다. PostgreSQL에는 Perl, Tcl, Python을 지원하는 세 가지 언어 확장이 포함되어 있다. Python의 경우 현재 Python 3영어이 사용되며, PostgreSQL 15부터는 더 이상 지원되지 않는 Python 2영어는 사용되지 않는다. 이전에는 두 버전 모두 지원되었고 Python 2영어가 기본값이었으며, 이전 버전과 새 버전을 동일한 세션에서 사용할 수 없었다.[37] 외부 프로젝트는 PL/Java, 자바스크립트(PL/V8), PL/Julia,[39] PL/R,[40] PL/Ruby 등 다른 많은 언어에 대한 지원을 제공한다.[38]
PostgreSQL에 대한 비공식적인 성능 연구가 많이 수행되었다. 확장성 향상을 목표로 한 성능 개선은 버전 8.1부터 본격적으로 시작되었다. 버전 8.0과 버전 8.4 간의 간단한 벤치마크 결과, 후자는 읽기 전용 작업 부하에서 10배 이상, 읽기 및 쓰기 작업 부하 모두에서 최소 7.5배 이상 빠른 것으로 나타났다.
최초의 업계 표준이자 동료 검토를 거친 벤치마크는 2007년 6월에 완료되었으며, Sun Java System Application Server (프로프라이어터리 버전의 GlassFish) 9.0 Platform Edition, UltraSPARC T1 기반 Sun Fire 서버 및 PostgreSQL 8.2를 사용했다. 이 결과는 778.14 SPECjAppServer2004 JOPS@Standard로, Itanium 기반 HP-UX 시스템에서 Oracle 10을 사용한 874 JOPS@Standard와 비교적 우수한 성능을 보여준다.
2007년 8월, Sun은 813.73 SPECjAppServer2004 JOPS@Standard의 향상된 벤치마크 점수를 제출했다. 시험 대상 시스템의 가격이 낮아짐에 따라 가격/성능 비율이 84.98USD/JOPS에서 70.57USD/JOPS로 향상되었다.
PostgreSQL의 기본 구성은 데이터베이스 블록 캐싱 및 정렬과 같은 성능에 중요한 목적에 대해 소량의 전용 메모리만 사용한다. 이러한 제한은 주로 이전 운영 체제에서 대규모 공유 메모리 블록 할당을 허용하려면 커널 변경이 필요했기 때문이다. PostgreSQL.org는 위키에서 기본적인 권장 성능 관행에 대한 조언을 제공한다.
2012년 4월, EnterpriseDB의 Robert Haas는 64코어 서버를 사용하여 PostgreSQL 9.2의 선형 CPU 확장성을 시연했다.
Matloob Khushi는 게놈 데이터를 처리하는 능력에 대해 PostgreSQL 9.0과 MySQL 5.6.15의 벤치마크를 수행했다. 그의 성능 분석에 따르면 PostgreSQL은 8만 개씩 두 개의 데이터 세트를 사용하여 무작위 인간 DNA 영역을 형성하여 MySQL보다 8배 빠르게 겹치는 게놈 영역을 추출한다. PostgreSQL에서의 삽입 및 데이터 업로드도 더 나았지만, 두 데이터베이스의 일반적인 검색 기능은 거의 동일했다.[51]
PostgreSQL은 유닉스 계열( FreeBSD , OpenBSD , 리눅스 , macOS , 솔라리스) 및 마이크로소프트 윈도우에서 동작한다. Windows의 경우, 7.4 이전 버전에서는 Cygwin이 필요했지만, 8.0 이후 버전부터는 네이티브로 동작한다. MinGW-w64[116] 및 Cygwin[117]에서도 Windows 버전이 배포되고 있다.
PostgreSQL은 32비트 / 64비트 아키텍처 모두에서 동작한다. 32비트 버전에서는 공유 버퍼 크기가 최대 2GB로 제한되지만, 64비트 버전에는 상한이 없다.
배포 형태는 소스 코드 및 RPM · APT 외에도 엔터프라이즈DB 사에서 GUI 설치 프로그램을 제공한다. 이 패키지에는 GUI 관리 도구인 pgAdmin 및 드라이버 등의 추가 설치 프로그램이 포함되어 있다.
버전 8.1 이후 CPU 확장성은 크게 향상되었다. 이후 지속적인 개선을 거쳐 중규모 하드웨어라면 충분한 확장성을 확보할 수 있는 RDBMS가 되었다.
PostgreSQL의 확장성 변천사는 다음과 같다.
- 7.4 이전: 확장성은 페이지 교체 알고리즘으로 채택되었던 LRU에 의해 제한되었다. 페이지 참조 시 버퍼 풀 전체를 배타적으로 잠가 확장성이 낮았으며, SMP 구성에서 4CPU 정도가 한계였다.
- 8.0: LRU 대신 ARC가 채택되었으나(특허 침해 회피를 위해 중간에 2Q로 변경[138]), 배타 제어 오버헤드와 서브 트랜잭션 지원을 위한 배타 제어로 인해 락 경합이 발생했다. 확장성은 오히려 저하되어 2CPU 정도에서 정체되었다.
- 8.1: 페이지 교체 알고리즘이 클록으로 변경되어 확장성이 크게 향상되었다. 페이지 참조에 공유 락만 필요하여 병렬 액세스가 가능해졌고, 8코어 정도가 상한선이 되었다.[139] [140]
- 8.2: 페이지 관리 해시 테이블 락이 16개로 분할되어 공유 락 구현에 사용되는 스핀락 액세스가 분산되었다. 스핀락 구현과 서브 트랜잭션 배타 제어 개선으로 16코어까지 확장성이 확인되었다.[141][142]
- 9.2: EnterpriseDB의 Robert Haas가 Linux 커널 3.2 및 PostgreSQL 9.2 개선으로 64코어(8코어×8CPU) 머신에서 CPU 확장성을 확인했다.[141]
- 9.5: LWLock (Lightweight lock)에서 일부 스핀락을 원자 명령어로 전환[143]하고, 공유 버퍼 매핑 해시 테이블 파티션 수를 16에서 128로 늘려[144] 병렬도 32~64 정도에서 성능을 개선했다.[145][146]
과거 버전의 PostgreSQL은 다른 관계형 데이터베이스 관리 시스템(RDBMS)과 비교하여 업데이트 처리 속도가 느리다는 평가를 받았다. 추가형 아키텍처를 채용하여 업데이트 처리가 삭제와 삽입의 조합으로 구현되었고, 특히 삽입 시 인덱스 키 추가로 성능 차이가 발생했다.
하지만 버전 8.3에서 Heap-Only Tuples(HOT) 기능이 도입되어, 인덱스 키가 되는 열의 값이 변경되지 않은 경우 인덱스 업데이트를 회피할 수 있게 되었다. HOT를 통해 약 2배의 처리량 향상이 확인되었다.[147]
업계 표준 규격에 따른 벤치마크 결과로 2007년 8월 썬 마이크로시스템즈(Sun Microsystems)(Sun)의 보고서가 있다. PostgreSQL 8.2.4, 썬 자바 시스템 애플리케이션 서버(Sun Java System Application Server) 9.1 (상용판 글래스피시(GlassFish)), 솔라리스(Solaris) 10, 썬 파이어(Sun Fire) T2000 (울트라스파크 T1(UltraSPARC T1) 1.2GHz: 4스레드 × 8코어 × 1개) 환경에서 813.73 SPECjAppServer2004 JOPS@Standard를 기록했다.[148]
3. 2. 표준 준수 및 ACID 속성
PostgreSQL은 다중 버전 동시성 제어(MVCC)를 사용하여 동시성을 관리한다. MVCC는 각 트랜잭션에 데이터베이스의 "스냅샷"을 제공하여, 다른 트랜잭션에 영향을 주지 않고 변경 사항을 적용할 수 있도록 한다. 이를 통해 읽기 잠금의 필요성이 줄어들고 데이터베이스가 ACID 원칙을 따르도록 보장한다. PostgreSQL은 트랜잭션 격리 수준으로 읽기 언커미티드(Read Uncommitted), 읽기 커미티드(Read Committed), 반복 가능 읽기(Repeatable Read), 직렬화 가능(Serializable)의 네 가지 수준을 제공한다. PostgreSQL은 더티 리드(Dirty Read)에 영향을 받지 않으므로, 읽기 언커미티드 트랜잭션 격리 수준을 요청하면 읽기 커미티드가 제공된다. PostgreSQL은 직렬화 가능한 스냅샷 격리(SSI)를 통해 완전한 직렬화 가능성을 지원한다.PostgreSQL은 최신 SQL 표준을 높은 수준으로 준수한다고 주장하지만, 완벽하지는 않다. 2024년 9월 17번째 릴리스 기준으로, PostgreSQL은 SQL:2023 핵심 준수를 위한 177개의 필수 기능 중 최소 170개에 부합하며, 다른 어떤 데이터베이스도 완전히 부합하지 않는다.[50] 예를 들어, 테이블이나 열 이름과 같은 따옴표가 없는 식별자는 PostgreSQL에서 내부적으로 소문자로 변환되지만, 표준에서는 대문자로 변환해야 한다고 명시되어 있다. 따라서 표준에 따르면 `Foo`는 `FOO`와 동일해야 하며 `foo`와는 동일하지 않다.
3. 3. 동시성 제어
PostgreSQL은 다중 버전 동시성 제어(MVCC, Multiversion concurrency control)를 통해 동시성을 관리한다.[20] MVCC는 각 트랜잭션에 데이터베이스의 "스냅샷"을 제공하여, 다른 트랜잭션에 영향을 주지 않고 변경 사항을 적용할 수 있도록 한다. 이를 통해 읽기 잠금의 필요성이 크게 줄어들고 데이터베이스가 ACID 원칙을 유지하도록 보장한다.PostgreSQL은 트랜잭션 격리 수준으로 읽기 언커미티드(Read Uncommitted), 읽기 커미티드(Read Committed), 반복 가능 읽기(Repeatable Read), 직렬화 가능(Serializable)의 네 가지 수준을 제공한다. PostgreSQL은 더티 리드(Dirty Read)에 영향을 받지 않으므로, 읽기 언커미티드 트랜잭션 격리 수준을 요청하면 읽기 커미티드가 제공된다. PostgreSQL은 직렬화 가능한 스냅샷 격리(SSI, snapshot isolation) 방법을 통해 완전한 직렬화 가능성을 지원한다.
3. 4. 다양한 인덱스 지원
PostgreSQL은 기본적으로 B-트리, 해시 테이블 인덱스를 지원하며, 일반화된 탐색 트리(GiST), 일반화된 역색인(GIN), 공간 분할 GiST(SP-GiST), 블록 범위 색인(BRIN)[131] 등 네 가지 인덱스 접근 방식을 제공한다. 사용자 정의 색인 방법을 만들 수도 있지만, 이는 상당히 복잡하다.PostgreSQL 색인은 다음과 같은 기능을 지원한다.
- 표현식 색인: 열의 값 대신 표현식이나 함수의 결과를 색인하여 만들 수 있다.
- 부분 색인: `CREATE INDEX` 문의 끝에 `WHERE` 절을 추가하여 테이블의 일부만 색인한다. 이를 통해 더 작은 색인을 만들 수 있다.
- 쿼리 최적화기는 임시 메모리 내 비트맵 색인 연산을 사용하여 복잡한 쿼리를 만족시키기 위해 여러 색인을 함께 사용할 수 있다. (대규모 팩트 테이블을 더 작은 차원 테이블 (예: 스타 스키마로 구성된 테이블)에 조인하는 데이터 웨어하우스 애플리케이션에 유용함).
- k-최근접 이웃(k-NN) 색인 (KNN-GiST라고도 함)은 지정된 값에 가장 가까운 "가장 가까운 값"을 효율적으로 검색하는 데 유용하며, 유사한 단어나 지리 공간 데이터를 가진 가까운 객체나 위치를 찾는 데 유용하다.
- 색인 전용 스캔을 통해 시스템은 메인 테이블에 접근할 필요 없이 색인에서 데이터를 가져올 수 있다.
- 블록 범위 색인(BRIN).
- 역순으로 스캔할 수 있다. 역순 스캔을 위한 별도의 색인을 정의할 필요가 없다.
3. 5. 절차적 언어 지원
PostgreSQL은 SQL 외에도 다양한 절차적 언어를 지원하여, 사용자가 서버 측에서 실행되는 함수(때로는 '저장 프로시저'라고도 함)를 정의할 수 있게 한다. 이러한 함수는 데이터베이스 내에서 복잡한 로직을 처리하거나, 특정 이벤트 발생 시 자동으로 실행되는 트리거를 생성하는 데 사용될 수 있다.PostgreSQL에서 지원하는 절차적 언어는 다음과 같다.[121]
- PL/pgSQL: 오라클의 PL/SQL과 유사한 절차적 언어이다.
- 스크립트 언어: PL/Python, PL/Perl 등과 같은 스크립트 언어를 통해 함수를 작성할 수 있다.
- 컴파일 언어: C/C++, PL/Java와 같이 컴파일된 언어를 사용하여 성능이 중요한 함수를 개발할 수 있다.[122]
- 통계 언어: PL/R과 같은 통계 분석에 특화된 언어를 활용할 수 있다.[124]
- PL/Lua[123]
- PL/sh[125]
- PL/v8[126]
이러한 언어를 사용하여 작성된 함수는 일반 SQL 함수처럼 사용할 수 있으며, 분기 및 반복문과 같은 제어 구조를 포함할 수 있다. 또한, 함수의 실행 권한을 함수 작성자 또는 실행자 중 누구에게 부여할지 지정할 수 있다.
함수는 여러 행(튜플)을 반환하도록 정의할 수도 있다. 이러한 '행 반환 함수'의 출력은 쿼리에서 일반 테이블처럼 처리될 수 있다.
3. 6. 복제 및 고가용성
PostgreSQL은 9.0 버전부터 스트리밍 복제를 기본적으로 지원한다.[134] 트랜잭션 로그를 전송하여 모든 데이터베이스 파일의 변경 사항을 커밋 후 다른 서버로 비동기적으로 전송한다. 단일 마스터와 다중 슬레이브 구성이 가능하며, 슬레이브는 조회 질의를 수락한다. 여러 노드에서 조회 처리를 부하 분산하는 스케일 아웃이 가능하다.PostgreSQL 10부터는 논리적 복제를 기본적으로 지원한다.[135] 데이터베이스 전체가 아닌, 지정된 부분만 복제할 수 있다.
PostgreSQL은 9.0 버전부터 복제를 표준으로 지원하지만, 써드파티의 선택적 소프트웨어도 사용할 수 있다.
| 이름 | 방식 | 개발원 | 특징 |
|---|---|---|---|
| Slony-I | 비동기형 마스터-슬레이브 | 얀 비크(Jan Wieck) | 버전 업 및 백업에도 사용 가능하다. |
| Mammoth Replicator[154] | 비동기형 마스터-슬레이브 | Command Prompt, Inc. | BSD 라이선스. |
| Londiste[155] | 비동기형 마스터-슬레이브 | Skype | 강건성과 사용 편의성을 목표로 하는 도구. 파이썬으로 개발됨. |
| Bucardo[156] | 비동기형 멀티마스터 | Greg Sabino Mullane | BSD 라이선스. |
| PGCluster[157] | 동기형 멀티마스터 | 미타니 아츠시(三谷篤) | 로드 밸런서 기능을 갖춤. |
| Postgres-R[158] | 동기형 멀티마스터 | Markus Wanner | 지속적으로 개발 중. |
| Cybercluster[159] | 동기형 멀티마스터 | Cybertec | BSD 라이선스. |
| pgpool-II[160] | 동기형 프록시 서버 | SRA OSS Inc. | 장애 조치(failover) 기능을 갖춤. |
| Sequoia[161] | 동기형 프록시 서버/드라이버 | Continuent Inc. | 다른 DBMS에도 연결 가능. |
| PostgresForest[162] | 동기형 프록시 드라이버 | NTT 데이터 | JDBC 래퍼. |
| Fermion[163] | 동기형 멀티마스터 | 株式会社Murakumo | 검색 및 업데이트 처리의 부하 분산, 자동 장애 조치(failover) 기능, 멀티캐스트를 이용한 노드의 자동 추가 처리 기능을 갖춤. |
3. 7. 기타 기능
PostgreSQL은 다른 관계형 데이터베이스 시스템과 달리 사용자가 직접 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 만들 수 있는 기능을 SQL 차원에서 제공한다.[21] 이러한 특징은 데이터베이스를 단순한 자료 저장소를 넘어 마치 새로운 프로그래밍 언어처럼 활용하여 개발자가 창의적인 기능을 쉽게 구현할 수 있게 해준다.java나 C++ 프로그래밍 언어처럼 테이블을 만들고 상속 기능을 이용하여 하위 테이블을 만들 수 있다. 상위 테이블을 조회하면 하위 테이블에 포함된 모든 자료를 조회할 수 있으며, 하위 테이블을 만들 때 상위 테이블의 칼럼을 상속받으면서 하위 테이블에만 속하는 칼럼을 추가할 수 있다.
기본적인 관리 도구는 명령어 기반 인터페이스인 `psql`이다. `psql`은 셸과 유사한 자동완성 및 스크립트를 통한 자동화 기능을 제공한다.
PostgreSQL 스키마는 네임스페이스 역할을 하여, 같은 종류의 같은 이름을 가진 객체들이 단일 데이터베이스에 공존할 수 있게 한다. 이는 모든 테이블의 데이터가 다른 테이블 내 데이터와 어떻게 관련되는지를 정의하는 추상적인 구조인 데이터베이스 스키마와는 다르다. 역할 및 테이블스페이스와 같은 몇 가지 글로벌 객체를 제외한 모든 PostgreSQL 데이터베이스 객체는 스키마 내에 존재한다. 스키마는 중첩될 수 없으며, 권한 시스템은 스키마와 그 내용에 대한 접근을 제어한다. 기본적으로 새로 생성된 데이터베이스에는 'public'이라는 단일 스키마만 있지만, 다른 스키마를 추가할 수 있으며 public 스키마는 필수가 아니다.
`search_path` 설정은 PostgreSQL이 접두사가 없는 객체에 대해 스키마를 확인하는 순서를 결정한다. 기본적으로 `$user, public`로 설정되어 있으며, `$user`는 현재 연결된 데이터베이스 사용자를 나타낸다. 이 기본값은 데이터베이스 또는 역할 수준에서 설정할 수 있지만, 세션 매개변수이므로 클라이언트 세션 중에 자유롭게 변경할 수 있으며 그 세션에만 영향을 미친다.
search_path에 나열되어 있지만 존재하지 않거나 로그인한 사용자가 액세스할 수 없는 다른 스키마는 객체 조회 중에 자동으로 건너뛴다. 새 객체는 search_path에 가장 먼저 나타나는 유효한 스키마에 생성된다.
PostgreSQL에서 지원되는 기본 데이터 형식은 다음과 같다.
- 부울(Boolean)
- 임의 정밀도 숫자
- 문자 (텍스트, varchar, char)
- 바이너리
- 날짜/시간 (타임스탬프/시간대 포함/미포함 시간, 날짜, 간격)
- 화폐
- 열거형(Enum)
- 비트 문자열
- 텍스트 검색 형식
- 복합형
- PostgreSQL 내부의 확장 가능한 키-값 저장소인 HStore[21]
- 최대 1GB의 총 저장 용량을 가진 배열(가변 길이이며 텍스트 및 복합형을 포함한 모든 데이터 형식일 수 있음)
- 기하 원시체
- IPv4 및 IPv6 주소
- 클래스 없는 도메인 간 라우팅(CIDR) 블록 및 MAC 주소
- XPath 쿼리를 지원하는 XML
- 범용 고유 식별자(UUID)
- 자바스크립트 객체 표기법(JSON) 및 더 빠른 바이너리 JSONB(BSON과 다름)
사용자는 PostgreSQL의 인덱싱 인프라(GiST, GIN, SP-GiST)를 통해 일반적으로 완전하게 색인 가능하도록 만들 수 있는 자체 데이터 형식을 생성할 수도 있다. 예를 들어 PostgreSQL용 PostGIS 프로젝트의 지리 정보 시스템(GIS) 데이터 형식이 있다.
도메인이라는 데이터 형식도 있는데, 이는 다른 데이터 형식과 동일하지만 도메인 생성자가 정의한 선택적 제약 조건이 있는 데이터 형식이다. 즉, 도메인을 사용하여 열에 입력된 모든 데이터는 도메인의 일부로 정의된 제약 조건을 준수해야 한다.
범위 형식이라고 하는 데이터 범위를 나타내는 데이터 형식을 사용할 수 있다. 이러한 범위는 이산 범위(예: 1에서 10까지의 모든 정수 값) 또는 연속 범위(예: 오전 10시와 오전 11시 사이의 모든 시간)일 수 있다. 사용 가능한 기본 제공 범위 형식에는 정수, 큰 정수, 십진수, 타임스탬프(시간대 포함 및 미포함) 및 날짜의 범위가 포함된다.
inet 형식을 기반으로 하는 IP 주소 범위 또는 float 데이터 형식을 기반으로 하는 부동 소수점 범위와 같이 새로운 유형의 범위를 사용할 수 있도록 사용자 지정 범위 형식을 만들 수 있다. 범위 형식은 `[]` 및 `()` 문자를 사용하여 포함 및 배타적 범위 경계를 지원한다. (예: `[4,9)`은 4를 포함하고 9를 제외한 모든 정수를 나타낸다.) 범위 형식은 겹침, 포함, 오른쪽 등을 확인하는 데 사용되는 기존 연산자와도 호환된다.
데이터베이스 내의 거의 모든 객체에 대해 새로운 유형을 생성할 수 있다. 여기에는 다음이 포함된다.
- 캐스트
- 변환
- 데이터 유형
- 데이터 도메인
- 함수(집계 함수 및 윈도우 함수 포함)
- 색인(사용자 정의 유형에 대한 사용자 정의 색인 포함)
- 연산자(오버로딩 가능한 기존 연산자 포함)
- 절차적 언어
절차적 언어는 개발자가 사용자 정의 서브루틴(함수)(''저장 프로시저''라고도 함)으로 데이터베이스를 확장할 수 있게 해준다. 이러한 함수는 데이터베이스 트리거(특정 데이터 수정 시 호출되는 함수)와 사용자 정의 데이터 형식 및 집계 함수를 구축하는 데 사용될 수 있다.[35] 절차적 언어는 함수를 정의하지 않고도 SQL 수준에서 DO 명령어를 사용하여 호출할 수도 있다.[36]
언어는 ''안전한'' 언어와 ''안전하지 않은'' 언어로 나뉜다. 안전한 언어로 작성된 프로시저는 샌드박스화되므로 모든 사용자가 안전하게 생성하고 사용할 수 있다. 안전하지 않은 언어로 작성된 프로시저는 데이터베이스의 보안 제한을 우회할 수 있지만, 데이터베이스 외부의 소스에도 액세스할 수 있기 때문에 슈퍼유저만 생성할 수 있다. Perl과 같은 일부 언어는 안전한 버전과 안전하지 않은 버전을 모두 제공한다.
PostgreSQL은 세 가지 절차적 언어를 내장 지원한다.
- 일반 SQL(안전). 더 간단한 SQL 함수는 인라인으로 전개되어 호출하는 (SQL) 쿼리에 통합될 수 있으며, 이는 함수 호출 오버헤드를 절약하고 쿼리 최적화 프로그램이 함수 내부를 "볼 수 있게" 해준다.
- Procedural Language/PostgreSQL(PL/pgSQL)(안전). 이는 Oracle의 Procedural Language for SQL(PL/SQL) 절차적 언어와 SQL/Persistent Stored Modules(SQL/PSM)과 유사하다.
- C(안전하지 않음). 이를 통해 하나 이상의 사용자 정의 공유 라이브러리를 데이터베이스에 로드할 수 있다. C로 작성된 함수는 최상의 성능을 제공하지만, 코드의 버그는 데이터베이스를 충돌시키고 손상시킬 수 있다. 대부분의 내장 함수는 C로 작성된다.
PostgreSQL은 확장을 통해 절차적 언어를 데이터베이스에 로드할 수 있도록 허용한다. PostgreSQL에는 Perl, Tcl 및 Python을 지원하는 세 가지 언어 확장이 포함되어 있다. 파이썬의 경우 현재 Python 3이 사용되며, PostgreSQL 15부터는 더 이상 지원되지 않는 Python 2는 사용되지 않는다. 이전에는 두 버전 모두 지원되었고 Python 2가 기본값이었으며, 이전 버전과 새 버전을 동일한 세션에서 사용할 수 없었다.[37] 외부 프로젝트는 PL/Java, 자바스크립트(PL/V8), PL/Julia,[39] PL/R,[40] PL/Ruby 등 다른 많은 언어에 대한 지원을 제공한다.[38]
PostgreSQL은 일러스트라(Illustra)와 일러스트라를 인수하여 그 기술을 도입한 인포믹스(Informix)와 함께 객체 관계형 데이터베이스 관리 시스템을 구현해 왔다.[109] 질의어 언어로는 SQL을 사용하며, SQL92, SQL:1999의 대부분과 SQL:2003, SQL:2008의 일부를 지원한다.[110]
- 유닉스 계열( FreeBSD , OpenBSD , 리눅스 , macOS , 솔라리스) 및 마이크로소프트 윈도우에서 동작한다. Windows의 경우, 7.4 이전 버전에서는 Cygwin이 필요했지만, 8.0 이후 버전부터는 네이티브로 동작한다. MinGW-w64[116] 및 Cygwin[117]에서도 Windows 버전이 배포되고 있다.
- 32비트 / 64비트 아키텍처 모두에서 동작한다. 32비트 버전에서는 공유 버퍼 크기가 최대 2GB로 제한되지만, 64비트 버전에는 상한이 없다.
- 배포 형태는 소스 코드 및 RPM · APT 외에도 엔터프라이즈DB 사에서 GUI 설치 프로그램을 제공한다. 이 패키지에는 GUI 관리 도구인 pgAdmin 및 드라이버 등의 추가 설치 프로그램이 포함되어 있다.
규칙을 통해 SQL의 내부 표현인 "쿼리 트리"를 변경할 수 있다. 일반적인 규칙의 용도는 갱신 가능 뷰를 구현하는 것이며, 표준 SQL에서 규정하는 "INSTEAD OF" 트리거 대신 사용된다.
PostgreSQL 8.1부터는 파티셔닝을 기본적으로 지원한다. 버전이 올라갈수록 기능이 추가되고 있다.
테이블 파티셔닝은 상속을 이용하여 구현한다. 이는 오라클 데이터베이스 7의 파티션 뷰와 유사한 구현 방식이다.
테이블을 생성할 때 다른 테이블을 "부모" 테이블로 지정하여 상속 관계를 정의할 수 있다. "자식" 테이블에 삽입된 행은 부모 테이블을 참조할 때에도 가져온다. 부모 테이블에 대한 열 추가나 CHECK 제약 조건 정의는 자동으로 자식 테이블에도 반영되지만, 외부 키나 유일성 제약 조건은 상속을 지원하지 않는다.
파티셔닝된 테이블에는 부모 테이블을 통해 접근한다. SELECT, UPDATE, DELETE 문은 자식 테이블을 포함하도록 전개되지만, 쿼리 조건이 CHECK 제약 조건에 맞지 않는 자식 테이블은 설정에 따라 자동으로 제외할 수 있으므로 효율적으로 처리할 수 있다.
INSERT의 경우, 10 버전 이후부터는 선언적 테이블 파티셔닝을 통해 자식 테이블에 분산할 수 있다.[133] 9.6 버전까지는 자식 테이블을 직접 지정하거나 부모 테이블에 트리거를 생성하여 삽입 위치를 지정하여 분산할 수 있다.
LIKE 술어와 정규 표현식을 이용한 문자열 검색 외에 전문 검색 기능을 제공한다. 8.3 버전 이후부터는 기본으로 포함되어 있으며, 그 이전 버전에서는 contrib/tsearch2로 제공되었다. 이 전문 검색은 문자열에서 단어를 추출하여, 전치 테이블(GIN) 또는 단어 공간을 다차원 트리(GiST)로 하는 색인을 생성할 수 있다. SQL/MM의 전문 검색과 달리, "@@" 연산자를 사용하는 고유한 문법으로 검색을 수행한다.
```sql
SELECT * FROM 테이블 WHERE to_tsvector(문자열컬럼) @@ to_tsquery('검색 쿼리')
```
표준에서는 일본어 문자열에서 단어를 추출하는 파서를 제공하지 않지만, 외부 확장인 [http://textsearch-ja.projects.postgresql.org/index-ja.html textsearch-ja]를 사용하면 형태소 분석을 통한 검색이 가능해진다.
또한, 표준 전문 검색 외에도, [https://pgroonga.github.io/ja/ PGroonga](Groonga 사용), Ludia, [http://textsearch-ja.projects.postgresql.org/textsearch_senna.html textsearch_senna](Senna 사용), [http://pgestraier.projects.postgresql.org/ pgestraier](Hyper Estraier), [http://pgfoundry.org/projects/pgrast/ pgRast]([http://projects.netlab.jp/rast/ Rast]) 등이 외부 확장으로 존재한다.
PostgreSQL 9.5부터 데이터의 신규 삽입 또는 업데이트를 수행하는 "UPSERT" 기능이 구현되었다.[136] "UPSERT" 기능이란, 데이터의 신규 삽입(INSERT)이 가능하면 삽입을 수행하고, 신규 삽입이 불가능하면 업데이트(UPDATE)를 수행하는 기능이다. "ON CONFLICT" 절을 지정하면 데이터 변경 충돌을 적절히 처리할 수 있다.
- 부질의(서브쿼리)
- 결합(자연결합, 왼쪽외부결합, 오른쪽외부결합, 완전외부결합)
- 제약(외부키, 유일성 제약, CHECK 제약)
- 트랜잭션 / 서브트랜잭션(SAVEPOINT) / 2상 커밋
- 백업 직후부터 데이터 장애 직전까지의 임의 시점으로의 복구(en:Point-in-time recovery)
- SSL 연결
- 표 영역
백업에는 크게 세 가지 방법(SQL 덤프, 파일 시스템 레벨 백업, 연속 아카이브)이 있으며, 각각 장단점이 있다. SQL 덤프는 `pg_dump`와 같은 클라이언트 애플리케이션으로 백업을 수행하며, 원격 호스트에서의 백업이 가능하지만 데이터베이스 전체 백업의 경우 거의 항상 슈퍼유저 권한이 필요하다. 파일 시스템 레벨 백업은 bash 명령어로 데이터 파일을 백업한다. 이 경우 온라인 백업이나 테이블 개별 백업은 불가능하다. 연속 아카이브는 WAL(Write-Ahead Log)을 이용하는 방법으로 관리자에게는 복잡하지만, 백업 시 내부 불일치가 로그 재생(log replay)으로 해결되고 WAL 파일만 아카이브하면 연속 백업이 가능하다는 장점이 있다. 하지만 이 방법은 데이터베이스 클러스터 전체 백업이 되므로 필요한 저장 공간이 크다.[137]
4. 데이터베이스 관리 도구
PostgreSQL은 PostgreSQL 전용 또는 다양한 데이터베이스에서 공통적으로 사용하는 데이터베이스 연결 클라이언트를 이용하여 관리할 수 있다.
4. 1. 서버 도구
PostgreSQL은 PostgreSQL 전용 또는 다양한 데이터베이스에서 공통적으로 사용하는 데이터베이스 연결 클라이언트를 이용하여 관리할 수 있다.4. 2. 클라이언트 도구
pgAdmin[149]은 여러 컴퓨터 플랫폼에서 지원되는 PostgreSQL을 위한 무료 오픈소스 그래픽 사용자 인터페이스(GUI) 관리 도구이다. 이 프로그램은 12개 이상의 언어로 제공된다. pgManager라는 이름의 첫 번째 프로토타입은 1998년 PostgreSQL 6.3.2용으로 작성되었으며, 나중에 GNU 일반 공중 사용 허가서(GPL)에 따라 pgAdmin으로 다시 작성되어 출시되었다. 두 번째 버전(pgAdmin II)은 완전히 다시 작성된 것으로, 2002년 1월 16일에 처음 출시되었다. 세 번째 버전인 pgAdmin III는 원래 Artistic License에 따라 출시된 후 PostgreSQL과 동일한 라이선스로 출시되었다. Visual Basic으로 작성된 이전 버전과 달리 pgAdmin III는 wxWidgets[57] 프레임워크를 사용하는 C++로 작성되어 대부분의 일반적인 운영 체제에서 실행될 수 있다. 쿼리 도구에는 관리 및 개발 작업을 지원하는 pgScript라는 스크립팅 언어가 포함되어 있다. 2014년 12월, pgAdmin 프로젝트 설립자이자 주요 개발자인 Dave Page[58]는 웹 기반 모델로의 전환과 함께 클라우드 배포를 용이하게 하기 위해 pgAdmin 4 작업을 시작했다고 발표했다.[59] 2016년에 pgAdmin 4가 출시되었다. pgAdmin 4 백엔드는 파이썬으로 작성되었으며, 플라스크와 Qt 프레임워크를 사용한다.[60]phpPgAdmin[150]은 PHP로 작성되고 원래 MySQL 관리를 위해 작성된 인기 있는 phpMyAdmin 인터페이스를 기반으로 하는 PostgreSQL을 위한 웹 기반 관리 도구이다.
PostgreSQL 전용 또는 다양한 데이터베이스에서 공통적으로 사용하는 데이터베이스 연결 클라이언트를 이용하여 관리할 수 있다.
psql은 PostgreSQL에 포함된 명령줄 프로그램이다. SQL을 직접 입력하거나 파일에서 읽어 실행하는 것 외에도, 스키마 정보 표시 등의 메타 명령어를 가지고 있다. 또한, SQL 구문이나 테이블 이름 등을 탭 키로 입력 보완할 수 있다.
5. 활용 사례
PostgreSQL을 주요 데이터베이스로 사용하는 주목할 만한 기관 및 제품은 다음과 같다.
| 기관/제품 | 설명 |
|---|---|
| 마이크로소프트(Microsoft) | 페타바이트 규모의 “릴리스 품질 보기”(RQV) 분석 대시보드에 사용. 8억 개 이상의 Windows 기기에서 수집된 2만 가지 유형의 지표를 분석하여 Windows 업데이트 품질을 추적. |
| 마이스페이스(Myspace) | 2009년, 수정되지 않은 PostgreSQL을 기반으로 구축된 데이터 웨어하우징을 위해 Aster Data Systems의 nCluster 데이터베이스를 사용. |
| Geni.com | 주요 계보 데이터베이스에 사용. |
| 오픈스트리트맵(OpenStreetMap) | 전 세계의 무료 편집 가능한 지도를 만들기 위한 협업 프로젝트. |
| 아필리아스(Afilias) | .org, .info 등의 도메인 레지스트리.[67] |
| 소니 온라인(Sony Online) | 멀티플레이어 온라인 게임. |
| BASF(BASF) | 농업 사업 포털을 위한 쇼핑 플랫폼. |
| 레딧(Reddit) | 소셜 뉴스 웹사이트. |
| 스카이프(Skype) | VoIP 애플리케이션, 중앙 비즈니스 데이터베이스.[65] |
| Sun xVM | Sun의 가상화 및 데이터센터 자동화 제품군. |
| 뮤직브레인즈(MusicBrainz) | 온라인 공개 음악 백과사전. |
| 국제우주정거장(International Space Station) | 궤도에서 원격 측정 데이터를 수집하고 지상으로 복제하는 데 사용. |
| 마이이어북(MyYearbook) | 소셜 네트워킹 사이트. |
| 인스타그램(Instagram) | 모바일 사진 공유 서비스. |
| 디스쿼스(Disqus) | 온라인 토론 및 댓글 서비스. |
| 트립어드바이저(TripAdvisor) | 대부분 사용자 생성 콘텐츠로 구성된 여행 정보 웹사이트. |
| 얀덱스(Yandex) | 러시아 인터넷 회사로, Yandex.Mail 서비스를 Oracle에서 Postgres로 전환.[66] |
| 아마존 레드시프트(Amazon Redshift) | AWS의 일부로, ParAccel의 Postgres 수정 사항을 기반으로 하는 열 지향형 온라인 분석 처리(OLAP) 시스템. |
| 미국 국립기상청(National Weather Service)(NWS) | NEXRAD 기상 레이더, 지표면 및 수문학 시스템의 데이터를 통합하여 상세한 지역 예보 모델을 구축하는 대화형 예보 준비 시스템(IFPS)에 사용.[67][68] |
| 영국 기상청(Met Office) | 더 많은 오픈소스 기술을 배포하기 위한 전략으로 Oracle을 PostgreSQL로 교체하기 시작.[68][69] |
| WhitePages.com | Oracle과 MySQL을 사용해 왔지만, 핵심 디렉토리를 사내로 이전하는 과정에서 PostgreSQL로 전환. WhitePages.com은 여러 소스의 대규모 데이터 세트를 결합해야 하므로, PostgreSQL의 높은 속도로 데이터를 로드하고 인덱싱하는 기능이 주요 요인.[67] |
| 플라이트어웨어(FlightAware) | 항공편 추적 웹사이트.[70] |
| 그로퍼스(Grofers) | 온라인 식료품 배달 서비스.[71] |
| 가디언(The Guardian) | 2018년 MongoDB에서 PostgreSQL로 마이그레이션.[72] |
| YugabyteDB | 기본 SQL 모드로 PostgreSQL 쿼리 계층을 구현. |
| OpenAI | 주요 API 서비스의 일부로 PostgreSQL을 사용.[73] |
다음은 주목할 만한 일부 공급업체에서 서비스형 소프트웨어(서비스형 소프트웨어)로 제공하는 PostgreSQL 목록이다.
| 공급업체 | 서비스 |
|---|---|
| 헤로쿠 | 2007년 출시 이후부터 PostgreSQL을 지원. 전체 데이터베이스 롤백(특정 시점의 데이터베이스 복원 기능)과 같은 부가 기능을 제공하며, 이는 헤로쿠가 개발한 오픈소스 소프트웨어인 WAL-E를 기반. |
| 엔터프라이즈DB | 2012년 1월, 장애 조치, 복제, 부하 분산 및 확장을 위한 자동 프로비저닝 기능을 갖춘 PostgreSQL과 자체 독점 Postgres Plus Advanced Server의 클라우드 버전을 출시. 2015년부터 Postgres Advanced Server는 알리바바 클라우드의 관계형 데이터베이스 서비스인 ApsaraDB for PPAS로 제공.[74] |
| VM웨어 | 2012년 5월부터 VM웨어 v스피어 상의 프라이빗 클라우드용 vFabric Postgres(vPostgres라고도 함) 제공.[75] 2014년에 제품의 제공 종료(EOA)를 발표.[76] |
| 아마존 웹 서비스 | 2013년 11월, 자사의 관계형 데이터베이스 서비스에 PostgreSQL을 추가. |
| 아마존 웹 서비스 | 2016년 11월, 자사의 클라우드 네이티브 관리형 데이터베이스 서비스인 아마존 오로라에 PostgreSQL 호환성을 추가.[77] |
| 마이크로소프트 애저 | 2017년 5월, Azure Databases for PostgreSQL을 발표.[78] |
| 알리바바 클라우드 | 2019년 5월, PolarDB for PostgreSQL을 발표.[79] |
| 젤라스틱 | 2011년부터 컨테이너 기반 PostgreSQL 지원을 제공. PostgreSQL의 자동 비동기 마스터-슬레이브 복제도 제공. |
| IBM 클라우드 | 2019년 6월, IBM Cloud Hyper Protect DBaaS for PostgreSQL을 발표.[80] |
| 크런치 데이터(Crunchy Data) | 2020년 9월, 크런치 브리지(Crunchy Bridge)를 발표.[81] |
| 네온닷테크(Neon.tech) | 2022년 6월, 네온 서버리스 포스트그레스(Neon Serverless Postgres)를 발표.[82] |
| 나일(Nile) | 2023년 10월, 나일 포스트그레스 플랫폼(Nile Postgres Platform)을 발표.[83] |
Stack Overflow의 2023년[111] 및 2024년[112] 조사에 따르면, 2023년 MySQL을 넘어 세계에서 가장 많이 사용되는 데이터베이스였다.
DB-Engines.com의 시장 점유율 조사에 따르면, 2018년 2월 당시 Oracle Database, MySQL, Microsoft SQL Server에 이어 4위였으며,[113] MySQL과의 점유율 차이는 매년 줄어드는 추세였다.[114]
2012년 7월 당시, 클라우드 서비스 제공업체인 Jelastic에 따르면, 오픈소스 DB 중 PostgreSQL의 세계 시장 점유율은 Jelastic 사용자 내에서 약 14%였다(MySQL 계열 70%(MySQL 56%, MariaDB 14%), MongoDB 15%).[115] 일본 Jelastic 사용자 내에서는 8%였으며(MySQL 계열 66%(MySQL 50%, MariaDB 16%)), 세계적인 점유율과는 상황이 달랐다.[115]
6. 버전 및 릴리스
PostgreSQL 서버는 프로세스 기반(쓰레드 기반이 아님)이며, 데이터베이스 세션당 하나의 운영 체제 프로세스를 사용한다.[44] 여러 세션은 운영 체제에 의해 사용 가능한 모든 CPU에 자동으로 분산된다. 많은 유형의 쿼리는 여러 백그라운드 작업자 프로세스에 걸쳐 병렬 처리되어 여러 CPU 또는 코어를 활용할 수 있다.[44] 클라이언트 애플리케이션은 쓰레드를 사용하고 각 쓰레드에서 여러 데이터베이스 연결을 만들 수 있다.[45]
PostgreSQL의 배포 이력은 다음과 같다.
| 버전 | 첫 출시 | 최신 부 버전 | 최신 출시 | 지원 종료[84] | 주요 기능 |
|---|---|---|---|---|---|
| 6.0 | 1997년 1월 29일 | PostgreSQL의 첫 공식 출시, 고유 인덱스, pg_dumpall 유틸리티, ident 인증 | |||
| 6.1 | 1997년 6월 8일 | 1997년 7월 22일 | 다중 열 인덱스, 시퀀스, 통화 데이터 형식, GEQO(GEnetic Query Optimizer) | ||
| 6.2 | 1997년 10월 2일 | 1997년 10월 17일 | JDBC 인터페이스, 트리거, 서버 프로그래밍 인터페이스, 제약 조건 | ||
| 6.3 | 1998년 3월 1일 | 1998년 4월 7일 | 2003년 3월 1일 | SQL-92 하위 선택 기능, PL/pgTCL | |
| 6.4 | 1998년 10월 30일 | 1998년 12월 20일 | 2003년 10월 30일 | 뷰(당시에는 읽기 전용), 규칙, PL/pgSQL | |
| 6.5 | 1999년 6월 9일 | 1999년 10월 13일 | 2004년 6월 9일 | MVCC, 임시 테이블, 더 많은 SQL 문 지원(CASE, INTERSECT 및 EXCEPT) | |
| 7.0 | 2000년 5월 8일 | 2000년 11월 11일 | 2004년 5월 8일 | 외래 키, 조인에 대한 SQL-92 구문 | |
| 7.1 | 2001년 4월 13일 | 2001년 8월 15일 | 2006년 4월 13일 | 쓰기 전 로그, 외부 조인 | |
| 7.2 | 2002년 2월 4일 | 2005년 5월 9일 | 2007년 2월 4일 | PL/Python, 더 이상 필요하지 않은 OID, 메시지의 국제화 | |
| 7.3 | 2002년 11월 27일 | 2008년 1월 7일 | 2007년 11월 27일 | 스키마, 테이블 함수, 준비된 쿼리[85] | |
| 7.4 | 2003년 11월 17일 | 2010년 10월 4일 | 2010년 10월 1일 | 조인 및 데이터 웨어하우스 함수에 대한 최적화[86] | |
| 8.0 | 2005년 1월 19일 | 2010년 10월 4일 | 2010년 10월 1일 | Microsoft Windows의 기본 서버, 저장 지점, 테이블 공간, 특정 시점 복구[87] | |
| 8.1 | 2005년 11월 8일 | 2010년 12월 16일 | 2010년 11월 8일 | 성능 최적화, 2단계 커밋, 테이블 파티셔닝, 인덱스 비트맵 스캔, 공유 행 잠금, 역할 | |
| 8.2 | 2006년 12월 5일 | 2011년 12월 5일 | 2011년 12월 5일 | 성능 최적화, 온라인 인덱스 빌드, 자문 잠금, 웜 스탠바이[88] | |
| 8.3 | 2008년 2월 4일 | 2013년 2월 7일 | 2013년 2월 7일 | 힙 전용 튜플, 전체 텍스트 검색,[89] SQL/XML, 열거형, UUID 형식 | |
| 8.4 | 2009년 7월 1일 | 2014년 7월 24일 | 2014년 7월 24일 | 윈도우 함수, 열 수준 권한, 병렬 데이터베이스 복원, 데이터베이스별 대조, 공통 테이블 표현식 및 재귀 쿼리[90] | |
| 9.0 | 2010년 9월 20일 | 2015년 10월 8일 | 2015년 10월 8일 | 기본 제공 이진 스트리밍 복제, 핫 스탠바이, 현장 업그레이드 기능, 64비트 Windows[91] | |
| 9.1 | 2011년 9월 12일 | 2016년 10월 27일 | 2016년 10월 27일 | 동기 복제, 열별 대조, 로그되지 않은 테이블, 직렬화 스냅샷 격리, 쓰기 가능한 공통 테이블 표현식, SELinux 통합, 확장, 외래 테이블[92] | |
| 9.2 | 2012년 9월 10일[93] | 2017년 11월 9일 | 2017년 11월 9일 | 캐스케이딩 스트리밍 복제, 인덱스 전용 스캔, 기본 제공 JSON 지원, 향상된 잠금 관리, 범위 유형, pg_receivexlog 도구, 공간 분할 GiST 인덱스 | |
| 9.3 | 2013년 9월 9일 | 2018년 11월 8일 | 2018년 11월 8일 | 사용자 지정 백그라운드 작업자, 데이터 체크섬, 전용 JSON 연산자, LATERAL JOIN, 더 빠른 pg_dump, 새로운 pg_isready 서버 모니터링 도구, 트리거 기능, 뷰 기능, 쓰기 가능한 외래 테이블, 물질화된 뷰, 복제 개선 사항 | |
| 9.4 | 2014년 12월 18일 | 2020년 2월 13일 | 2020년 2월 13일 | JSONB 데이터 형식, 구성 값을 변경하기 위한 ALTER SYSTEM 문, 읽기를 차단하지 않고 물질화된 뷰를 새로 고칠 수 있는 기능, 백그라운드 작업자 프로세스의 동적 등록/시작/중지, 논리적 디코딩 API, GiN 인덱스 개선, Linux 대용량 페이지 지원, pg_prewarm을 통한 데이터베이스 캐시 다시 로드, 문서 스타일 데이터의 열 유형으로 Hstore 재도입[94] | |
| 9.5 | 2016년 1월 7일 | 2021년 2월 11일 | 2021년 2월 11일 | UPSERT, 행 수준 보안, TABLESAMPLE, CUBE/ROLLUP, GROUPING SETS 및 새로운 BRIN 인덱스[95] | |
| 9.6 | 2016년 9월 29일 | 2021년 11월 11일 | 2021년 11월 11일 | 병렬 쿼리 지원, 정렬/조인 푸시다운 기능이 향상된 PostgreSQL 외래 데이터 래퍼(FDW), 여러 동기 스탠바이, 대용량 테이블의 더 빠른 정리 | |
| 10 | 2017년 10월 5일 | 2022년 11월 10일 | 2022년 11월 10일 | 논리적 복제,[96] 선언적 테이블 파티셔닝, 향상된 쿼리 병렬 처리 | |
| 11 | 2018년 10월 18일 | 2023년 11월 9일 | 2023년 11월 9일 | 파티셔닝에 대한 향상된 강력성 및 성능, 저장 프로시저에서 지원되는 트랜잭션, 향상된 쿼리 병렬 처리 기능, 표현식에 대한 JIT(Just-in-Time) 컴파일[97][98] | |
| 12 | 2019년 10월 3일 | 2024년 11월 21일 | 2024년 11월 21일 | 쿼리 성능 및 공간 활용 개선; SQL/JSON 경로 표현식 지원; 생성된 열; 국제화 및 인증 개선; 새로운 플러그 가능 테이블 저장소 인터페이스.[99] | |
| 13 | 2020년 9월 24일 | 2024년 11월 21일 | 2025년 11월 13일 | B-트리 인덱스 항목 중복 제거를 통한 공간 절약 및 성능 향상, 집계 또는 파티션된 테이블을 사용하는 쿼리에 대한 성능 향상, 확장된 통계를 사용할 때 더 나은 쿼리 계획, 인덱스의 병렬화된 정리, 증분 정렬[100][101] | |
| 14 | 2021년 9월 30일 | 2024년 11월 21일 | 2026년 11월 12일 | 공통 테이블 표현식에 대한 SQL 표준 SEARCH 및 CYCLE 절 추가, DISTINCT를 GROUP BY에 추가할 수 있도록 허용[102][103] | |
| 15 | 2022년 10월 13일 | 2024년 11월 21일 | 2027년 11월 11일 | SQL 표준 MERGE 문 구현. PL/Python은 이제 Python 3만 지원하며, plpythonu는 이제 Python 3를 의미함. | |
| 16 | 2023년 9월 14일 | 2024년 11월 21일 | 2028년 11월 9일 | 논리적 복제 개선, pg_stat_io 뷰(I/O 메트릭용)[104] | |
| 17 | 2024년 9월 26일 | 2024년 11월 21일 | 2029년 11월 8일 | 정리 프로세스, I/O 계층 및 쿼리 실행에 대한 성능 향상, JSON 기능 확장, MERGE에 대한 더 많은 기능 및 COPY 개선; 고가용성 및 업그레이드를 위한 논리적 복제 향상, 보안, 운영, 모니터링 및 분석 개선[105] |
PostgreSQL 버전은 다음과 같이 표현된다.
참조
[1]
웹사이트
PostgreSQL
https://www.postgres[...]
2019-09-21
[2]
웹사이트
Debian -- Details of package postgresql in sid
https://packages.deb[...]
2021-01-25
[3]
웹사이트
Licensing:Main
https://fedoraprojec[...]
[4]
웹사이트
PostgreSQL
https://directory.fs[...]
[5]
웹사이트
FAQ: What is PostgreSQL? How is it pronounced? What is Postgres?
https://wiki.postgre[...]
PostgreSQL community
2021-10-02
[6]
웹사이트
Parquet and Postgres in the Data Lake {{!}} Crunchy Data Blog
https://www.crunchyd[...]
2024-09-19
[7]
웹사이트
PostGIS
https://postgis.net/
2023-12-18
[8]
웹사이트
Temporal Extensions
https://wiki.postgre[...]
2023-12-18
[9]
웹사이트
Orafce - Oracle's compatibility functions and packages
https://github.com/o[...]
2023-12-17
[10]
웹사이트
pg_dbms_job
https://github.com/M[...]
2023-11-08
[11]
웹사이트
WiltonDB
https://wiltondb.com[...]
2023
[12]
웹사이트
Babelfish for PostgreSQL
https://babelfishpg.[...]
2023-12-18
[13]
웹사이트
PostgreSQL Clients
https://wiki.postgre[...]
2023-10-18
[14]
웹사이트
Design Tools
https://wiki.postgre[...]
2023-10-23
[15]
웹사이트
Community Guide to PostgreSQL GUI Tools
https://wiki.postgre[...]
2023-12-01
[16]
웹사이트
Replication, Clustering, and Connection Pooling
https://wiki.postgre[...]
2020-07-13
[17]
웹사이트
Trademark Policy
https://www.postgres[...]
2020-12-08
[18]
웹사이트
Michael Stonebraker – A.M. Turing Award Winner
https://amturing.acm[...]
2018-03-20
[19]
웹사이트
A Brief History of PostgreSQL
https://www.postgres[...]
2020-03-18
[20]
블로그
The part of PostgreSQL we hate the most
https://ottertune.co[...]
2023
[21]
웹사이트
PostgreSQL, the NoSQL Database | Linux Journal
https://www.linuxjou[...]
[22]
웹사이트
PostgreSQL: Documentation: 9.0: pg_upgrade
https://www.postgres[...]
2020-06-09
[23]
서적
PostgreSQL: Up and Running
https://books.google[...]
O'Reilly Media, Inc.
2012
[24]
웹사이트
Frontend/Backend Protocol
https://www.postgres[...]
2023-11-09
[25]
웹사이트
libpq
https://www.postgres[...]
2023-11-09
[26]
웹사이트
Embedded SQL in C
https://www.postgres[...]
2023-11-09
[27]
웹사이트
Client Interfaces
https://www.postgres[...]
2023-11-09
[28]
웹사이트
libpqxx
https://pqxx.org/dev[...]
2020-04-04
[29]
웹사이트
PostgreSQL JDBC Driver
https://jdbc.postgre[...]
2020-04-04
[30]
웹사이트
[ANN] PostgresORM.jl: Object Relational Mapping for PostgreSQL
https://discourse.ju[...]
2021-08-26
[31]
웹사이트
GitHub - invenia/LibPQ.jl: A Julia wrapper for libpq
https://github.com/i[...]
2021-08-26
[32]
웹사이트
node-postgres
https://node-postgre[...]
2020-04-04
[33]
웹사이트
SQL database drivers
https://github.com/g[...]
golang.org
2015-06-22
[34]
웹사이트
Rust-Postgres
https://crates.io/cr[...]
2020-04-04
[35]
웹사이트
Server Programming
https://www.postgres[...]
2019-05-19
[36]
웹사이트
DO
https://www.postgres[...]
2019-05-19
[37]
웹사이트
PL/Python - Python Procedural Language
https://www.postgres[...]
2022-10-23
[38]
웹사이트
Procedural Languages
https://www.postgres[...]
postgresql.org
2016-03-31
[39]
웹사이트
PL/Julia extension ( minimal )
https://discourse.ju[...]
2021-08-26
[40]
웹사이트
postgres-plr/plr
https://github.com/p[...]
2021-06-17
[41]
웹사이트
System design hack: Postgres is a great pub/sub & job server
https://layerci.com/[...]
2019-11-24
[42]
웹사이트
Release 9.5
https://www.postgres[...]
2021-02-11
[43]
웹사이트
What is SKIP LOCKED for in PostgreSQL 9.5?
https://www.2ndquadr[...]
2019-11-24
[44]
웹사이트
PostgreSQL 9.6 Beta and PGCon 2016
https://lwn.net/Arti[...]
2016-06-02
[45]
웹사이트
FAQ – PostgreSQL wiki
https://wiki.postgre[...]
2017-04-13
[46]
웹사이트
SEPostgreSQL Documentation – PostgreSQL wiki
https://wiki.postgre[...]
[47]
웹사이트
NB SQL 9.3 - SELinux Wiki
https://selinuxproje[...]
[48]
웹사이트
https://www.postgres[...]
2022-03-01
[49]
웹사이트
PostgreSQL 10 Documentation: Appendix E. Release Notes
https://www.postgres[...]
2021-08-12
[50]
웹사이트
PostgreSQL: About
https://www.postgres[...]
2024-10-14
[51]
논문
Benchmarking database performance for genomic data
2015-06-01
[52]
웹사이트
PostgreSQL: Windows installers
https://www.postgres[...]
2021-08-26
[53]
웹사이트
postgresql-client-10.5p1 – PostgreSQL RDBMS (client)
http://ports.su/data[...]
2018-10-10
[54]
웹사이트
Installing and Configuring PostgreSQL - Oracle Solaris Cluster Data Service for PostgreSQL Guide
https://docs.oracle.[...]
2023-02-04
[55]
웹사이트
HP-UX Porting and Archive Centre postgresql-12.4
http://hpux.connect.[...]
2023-02-04
[56]
웹사이트
https://pygments.org[...]
[57]
웹사이트
Debian -- Details of package pgadmin3 in jessie
https://packages.deb[...]
2017-03-10
[58]
웹사이트
pgAdmin Development Team
http://www.pgadmin.o[...]
2015-06-22
[59]
웹사이트
The story of pgAdmin
http://pgsnake.blogs[...]
pgsnake.blogspot.co.uk
2014-12-07
[60]
웹사이트
pgAdmin 4 README
https://github.com/p[...]
2018-08-15
[61]
웹사이트
pgDevOps
https://web.archive.[...]
2017-05-04
[62]
웹사이트
pgbackrest/pgbackrest
https://github.com/p[...]
2021-11-21
[63]
웹사이트
pgaudit/pgaudit
https://github.com/p[...]
2021-11-21
[64]
웹사이트
wal-e/wal-e
https://github.com/w[...]
2021-06-24
[65]
웹사이트
PostgreSQL @Skype
https://wiki.postgre[...]
2019-01-16
[66]
웹사이트
Yandex.Mail's successful migration from Oracle to Postgres [pdf]
https://news.ycombin[...]
2016-09-28
[67]
서적
Beginning PHP and PostgreSQL 8: From Novice to Professional
https://books.google[...]
Apress
2017-08-30
[68]
서적
PostgreSQL 9 Administration Cookbook - Second Edition
https://books.google[...]
Packt
2017-09-05
[69]
뉴스
Met Office swaps Oracle for PostgreSQL
https://www.computer[...]
2017-09-05
[70]
웹사이트
Open Source Software
https://flightaware.[...]
2017-11-22
[71]
뉴스
Ansible at Grofers (Part 2) — Managing PostgreSQL
https://lambda.grofe[...]
2017-02-28
[72]
뉴스
Digital Blog: Bye bye Mongo, Hello Postgres
https://www.theguard[...]
2018-11-30
[73]
웹사이트
Elevated Errors on API and ChatGPT
https://status.opena[...]
2023-12-02
[74]
웹사이트
Alibaba Cloud Expands Technical Partnership with EnterpriseDB
https://www.mileston[...]
2018-09-26
[75]
서적
VMware Horizon Suite: Building End-User Services
https://books.google[...]
VMware Press
2014
[76]
웹사이트
VMware vFabric Suite EOA
https://www.vmware.c[...]
2014-09-01
[77]
웹사이트
Amazon Aurora Update – PostgreSQL Compatibility
https://aws.amazon.c[...]
2016-11-30
[78]
웹사이트
Announcing Azure Database for PostgreSQL
https://azure.micros[...]
2017-05-10
[79]
웹사이트
Aliyun PolarDB released major updates to support one-click migration of databases such as Oracle to the cloud
https://developpaper[...]
2019-07-06
[80]
웹사이트
IBM Cloud Hyper Protect DBaaS for PostgreSQL documentation
https://cloud.ibm.co[...]
2020-06-24
[81]
웹사이트
Crunchy Data Continues PostgreSQL Support with the Release of Crunchy Bridge
https://www.dbta.com[...]
2020-09-18
[82]
웹사이트
SELECT 'Hello, World' Serverless Postgres built for the cloud
https://neon.tech/bl[...]
2022-06-15
[83]
웹사이트
Introducing Nile, Serverless Postgres for modern SaaS
https://www.thenile.[...]
2023-10-25
[84]
웹사이트
Versioning policy
https://www.postgres[...]
PostgreSQL Global Development Group
2018-10-04
[85]
잡지
Databases Target Enterprises
https://www.eweek.co[...]
2002-12-02
[86]
잡지
PostgreSQL boosts open source database
https://www.infoworl[...]
2003-11-20
[87]
잡지
PostgreSQL open source database boasts Windows boost
https://www.infoworl[...]
2005-01-19
[88]
잡지
Version 8.2 of open-source PostgreSQL DB released
https://www.computer[...]
2006-12-05
[89]
잡지
PostgreSQL 8.3: Open Source Database Promises Blazing Speed
https://www.wired.co[...]
2008-02-05
[90]
잡지
PostgreSQL 8.4 Proves Feature-Rich
https://www.linux-ma[...]
2009-07-02
[91]
웹사이트
Five Enterprise Features in PostgreSQL 9
https://www.linux.co[...]
Linux Foundation
2010-09-30
[92]
잡지
PostgreSQL revs to 9.1, aims for enterprise
https://www.theregis[...]
2011-09-12
[93]
웹사이트
PostgreSQL: PostgreSQL 9.2 released
https://www.postgres[...]
2012-09-10
[94]
웹사이트
Reintroducing Hstore for PostgreSQL
https://www.infoq.co[...]
[95]
잡지
Say oops, UPSERT your head: PostgreSQL version 9.5 has landed
https://www.theregis[...]
2016-01-07
[96]
웹사이트
PostgreSQL: Documentation: 10: Chapter 31. Logical Replication
https://www.postgres[...]
2021-08-12
[97]
웹사이트
PostgreSQL 11 Released
https://www.postgres[...]
2018-10-18
[98]
웹사이트
PostgreSQLRelease Notes
https://www.postgres[...]
2018-10-18
[99]
뉴스
PostgreSQL: PostgreSQL 12 Released!
https://www.postgres[...]
2019-10-03
[100]
웹사이트
PostgreSQL 13 Release Notes
https://www.postgres[...]
2021-08-12
[101]
웹사이트
PostgreSQL 13 Released!
https://www.postgres[...]
2020-09-24
[102]
웹사이트
PostgreSQL 14 Release Notes
https://www.postgres[...]
2021-11-11
[103]
웹사이트
PostgreSQL 14 Released!
https://www.postgres[...]
2021-09-30
[104]
웹사이트
PostgreSQL 16 Released!
https://www.postgres[...]
2023-09-14
[105]
웹사이트
PostgreSQL 17 Released!
https://www.postgres[...]
2024-09-26
[106]
웹사이트
PostgreSQL: Documentation: 10: E.343. Release 6.0
https://www.postgres[...]
[107]
웹사이트
PostgreSQL: Documentation: 10: 2. A Brief History of PostgreSQL
https://www.postgres[...]
[108]
웹사이트
발음例
https://www.postgres[...]
[109]
서적
International Workshop on Object-Oriented Database Systems
IEEE Computer Society Press
1986
[110]
웹사이트
D.1. 지원되는 기능 / D.2. 지원되지 않는 기능
https://www.postgres[...]
[111]
웹사이트
Stack Overflow Developer Survey 2023
https://survey.stack[...]
2024-07-27
[112]
웹사이트
Technology 2024 Stack Overflow Developer Survey
https://survey.stack[...]
2024-07-27
[113]
웹사이트
DB-Engines Ranking - popularity ranking of database management systems
https://db-engines.c[...]
[114]
웹사이트
historical trend of the popularity ranking of database management systems
https://db-engines.c[...]
[115]
웹사이트
Software Stack Market Share: July 2012
https://jelastic.com[...]
2018-02-10
[116]
웹사이트
Package: mingw-w64-x86_64-postgresql - MSYS2 Packages
https://packages.msy[...]
2024-07-27
[117]
웹사이트
Cygwin Package Summary for postgresql
https://cygwin.com/p[...]
2024-07-27
[118]
웹사이트
PostgreSQL: Documentation: 10: Chapter 41. Procedural Languages
https://www.postgres[...]
[119]
웹사이트
PostgreSQL: Documentation: 10: 37.9. C-Language Functions
https://www.postgres[...]
[120]
웹사이트
pgFoundry: plpsm: Project Home
http://pgfoundry.org[...]
[121]
웹사이트
PostgreSQL: Documentation: 10: H.3. Procedural Languages
https://www.postgres[...]
[122]
웹사이트
PostgreSQL PL/Java – PL/Java: stored procedures, triggers, and functions for PostgreSQL™
https://tada.github.[...]
[123]
웹사이트
GitHub - pllua/pllua: Re-implementation of pllua, embedded Lua for postgresql
https://github.com/p[...]
[124]
웹사이트
Joseph Conway - PL/R
http://www.joeconway[...]
[125]
웹사이트
GitHub - petere/plsh: PL/sh is a procedural language handler for PostgreSQL that allows you to write stored procedures in a shell of your choice.
https://github.com/p[...]
[126]
웹사이트
GitHub - plv8/plv8: V8 Engine Javascript Procedural Language add-on for PostgreSQL
https://github.com/p[...]
[127]
웹사이트
11.2. 인덱스 종류
https://www.postgres[...]
[128]
웹사이트
61장 GiST 인덱스
https://www.postgres[...]
[129]
웹사이트
62장 SP-GiST 인덱스
https://www.postgres[...]
[130]
웹사이트
63장 GIN 인덱스
https://www.postgres[...]
[131]
웹사이트
64장 BRIN 인덱스
https://www.postgres[...]
[132]
웹사이트
8장 데이터 형식
https://www.postgres[...]
[133]
웹사이트
PostgreSQL: Documentation: 10: 5.10. Table Partitioning
https://www.postgres[...]
[134]
웹사이트
26장 고가용성, 부하 분산 및 복제
https://www.postgres[...]
[135]
웹사이트
PostgreSQL: Documentation: 10: Chapter 31. Logical Replication
https://www.postgres[...]
[136]
웹사이트
「PostgreSQL 9.5」릴리스
https://thinkit.co.j[...]
Impress Corporation
2016-01-09
[137]
웹사이트
Documentation, Chapter 25. Backup and Restore
https://www.postgres[...]
1996-2020 The PostgreSQL Global Development Group
2020-10-01
[138]
웹사이트
릴리스 8.0.2
http://www.postgresq[...]
[139]
웹사이트
DBT-1을 이용한 PostgreSQL 8.1의 32비트 머신(IA32)에서의 CPU 확장성 고찰(튜닝 포함)
http://ossipedia.ipa[...]
[140]
웹사이트
DBT-1을 이용한 패치를 적용한 PostgreSQL 8.1.2의 32비트 머신(IA32)에서의 CPU 확장성 고찰(튜닝 포함)
http://ossipedia.ipa[...]
[141]
웹사이트
Did I Say 32 Cores? How about 64?
http://rhaas.blogspo[...]
2012-11-03
[142]
간행물
Scaling PostgreSQL on SMP Architectures -- An Update
http://www.pgcon.org[...]
PGCon 2007
[143]
웹사이트
Improve LWLock scalability - git.postgresql.org Git - postgresql.git/commitdiff
https://git.postgres[...]
[144]
웹사이트
Increase the number of buffer mapping partitions to 128 - git.postgresql.org Git - postgresql.git/commitdiff
https://git.postgres[...]
[145]
웹사이트
Read Scalability in PostgreSQL 9.5 | EnterpriseDB
https://www.enterpri[...]
[146]
웹사이트
最新PostgreSQLはパフォーマンスが飛躍的に向上する!? – PostgreSQLのCPUスケーラビリティについて – | db tech showcase
https://www.db-tech-[...]
[147]
웹사이트
【PostgreSQLウォッチ】第35回 性能を大幅に改善するPostgreSQL 8.3の新機能「HOT」とは
https://xtech.nikkei[...]
[148]
웹사이트
SPECjAppServer2004 Result
http://www.spec.org/[...]
SPEC
2009-01-02
[149]
웹사이트
pgAdmin - PostgreSQL Tools
https://www.pgadmin.[...]
[150]
웹사이트
the premier web-based administration tool for postgresql
https://github.com/p[...]
[151]
웹사이트
Navicat for PostgreSQL | PostgreSQL のための強力な管理ツール
https://jp.navicat.c[...]
[152]
웹사이트
Database tools for MySQL, SQL Server, PostgreSQL, SQLite, Oracle, DB2, Firebird by SQL Maestro Group
https://www.sqlmaest[...]
[153]
웹사이트
Database Master - Nucleon Software
https://nucleonsoftw[...]
[154]
웹사이트
http://www.commandpr[...]
[155]
웹사이트
http://skytools.proj[...]
[156]
웹사이트
Bucardo.org Open Source Projects
https://bucardo.org
[157]
웹사이트
http://pgcluster.pro[...]
[158]
웹사이트
Postgres-R: a database replication system for PostgreSQL
https://postgres-r.o[...]
[159]
웹사이트
http://www.postgresq[...]
[160]
웹사이트
http://pgpool.projec[...]
[161]
웹사이트
http://www.continuen[...]
[162]
웹사이트
PostgresForest プロジェクト日本語トップページ - OSDN
https://ja.osdn.net/[...]
[163]
웹사이트
http://www.murakumo-[...]
[164]
웹사이트
第51章 フロントエンド/バックエンドプロトコル
https://www.postgres[...]
[165]
웹사이트
psycopg2 and the LGPL
http://initd.org/psy[...]
2019-08-19
[166]
웹사이트
日本PostgreSQLユーザ会の目的 | 日本PostgreSQLユーザ会
https://www.postgres[...]
[167]
웹사이트
リリースノート 8.0
http://www.postgresq[...]
2009-08-29
[168]
웹사이트
リリースノート 8.1
http://www.postgresq[...]
2009-08-29
[169]
웹사이트
リリースノート 8.2
http://www.postgresq[...]
2009-08-29
[170]
웹사이트
リリースノート 8.3
http://www.postgresq[...]
2009-08-29
[171]
웹사이트
リリースノート 8.4
http://www.postgresq[...]
2009-08-29
[172]
웹사이트
リリースノート 9.0
http://www.postgresq[...]
2010-10-06
[173]
웹사이트
リリースノート 9.1
http://www.postgresq[...]
2011-11-12
[174]
웹사이트
リリースノート 9.2
http://www.postgresq[...]
2012-11-03
[175]
웹사이트
Release 9.3
http://www.postgresq[...]
2013-09-09
[176]
웹사이트
Release 9.4
http://www.postgresq[...]
2015-08-19
[177]
웹사이트
Release 9.5
http://www.postgresq[...]
2016-05-23
[178]
웹사이트
E.1. Release 9.6
https://www.postgres[...]
2016-10-01
[179]
웹사이트
E.1. Release 10.0
https://www.postgres[...]
2017-10-08
[180]
웹사이트
E.2. Release 11
https://www.postgres[...]
2018-11-09
[181]
뉴스
PostgreSQL: PostgreSQL 12 Released!
https://www.postgres[...]
2024-04-30
[182]
웹사이트
PostgreSQL 13 Release Notes
https://www.postgres[...]
2024-04-30
[183]
웹사이트
PostgreSQL 13 Released!
https://www.postgres[...]
2024-04-30
[184]
웹사이트
PostgreSQL 14 Release Notes
https://www.postgres[...]
2024-04-30
[185]
웹사이트
PostgreSQL 14 Released!
https://www.postgres[...]
2024-04-30
[186]
웹사이트
PostgreSQL 15 Release Notes
https://www.postgres[...]
2024-04-30
[187]
웹사이트
PostgreSQL 15 Released!
https://www.postgres[...]
2024-04-30
[188]
웹사이트
PostgreSQL 16 Released!
https://www.postgres[...]
2024-04-30
[189]
서적
WEB+DB PRESS Vol.48
技術評論社
2009-01-25
[190]
웹사이트
Change in Version Numbering - New in postgres 10 - PostgreSQL wiki
https://wiki.postgre[...]
[191]
서적
Beginning PHP and PostgreSQL 8: From Novice to Professional
https://books.google[...]
Apress
2017-08-30
[192]
웹사이트
PostgreSQL @Skype
https://wiki.postgre[...]
2019-01-16
[193]
웹사이트
Yandex.Mail's successful migration from Oracle to Postgres [pdf]
https://news.ycombin[...]
2016-09-28
[194]
서적
PostgreSQL 9 Administration Cookbook - Second Edition
https://books.google[...]
Packt
2017-09-05
[195]
뉴스
Met Office swaps Oracle for PostgreSQL
https://www.computer[...]
2017-09-05
[196]
웹사이트
Open Source Software
https://flightaware.[...]
2017-11-22
[197]
뉴스
Ansible at Grofers (Part 2) — Managing PostgreSQL
https://lambda.grofe[...]
2018-09-05
[198]
뉴스
Digital Blog: Bye bye Mongo, Hello Postgres
https://www.theguard[...]
2018-11-30
[199]
웹사이트
PostgreSQL: Awards
https://www.postgres[...]
[200]
웹인용
PostgreSQL 15 RC 1 Released!
https://www.postgres[...]
The PostgreSQL Global Development Group
2022-09-30
[201]
웹인용
OS X Lion Server — Technical Specifications
http://support.apple[...]
2011-11-12
[202]
웹인용
Lion Server: MySQL not included
http://support.apple[...]
2011-11-12
[203]
웹인용
Mac OS X packages
https://www.postgres[...]
The PostgreSQL Global Development Group
2016-08-27
[204]
기타
[205]
웹인용
Versioning policy
https://www.postgres[...]
PostgreSQL Global Development Group
2018-10-04
[206]
웹인용
PostgreSQL: PostgreSQL 9.2 released
https://www.postgres[...]
2012-09-10
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com
