PostgreSQL의 사용자 정의 연산자
0. 들어가며 PostgreSQL에서는 C++ 프로그래밍 언어처럼 데이터베이스 사용자가 자신이 쓸 연산자를 직접 만들어 쓸 수 있습니다. 데이터베이스에서 연산자까지 만들어 쓸 필요까지 있겠냐만은, 새로운 연산자가 있으면, 쿼리문 작성이 한결 간편해 집니다. 또한 쿼리문을 눈으로 읽는데도 한결 편해집니다. 물론 이 글에서 이야기하는 부분은 기업 내 표준화 된 자료 설계안에 완벽하게 반할 가능성이 큽니다. 하지만, 유용한 기능이니 특수 상황 - 예, 다른 종류의 데이터베이스에서 PostgreSQL로 데이터베이스를 옮기는 경우 - 에서 잘 쓰면 개발 비용을 많이 줄일 수 있습니다. 1. 연산자 ...
[강좌] 2016-06-22 17:39
PGDay.Seoul 2016 행사 날짜를 골라주세요!
페이스북 PostgreSQL Korea 맴버들과 함께 PGDay.Seoul 2016 행사를 준비하고 있습니다. http://pgday.postgresql.kr/ 페이지에서 행사하기 좋은 날을 골라 주세요. 많은 참여 바랍니다. ...
[새소식] 2016-06-21 17:45
9.5 버전이 나왔습니다.
이번 9.5 버전은 한 해를 넘겼습니다. (그래야지, 그래야 PostgreSQL이지. 크크) 새 버전의 가장 주목 받은 기능은 UPSERT 라고 흔히 말하는 자료 입력 방식의 기능입니다. 유니크 키 기준으로 해당 자료가 중복되어 INSERT 할 수 없다면, UPDATE 구문으로 바꾸어서 기존 자료를 변경하거나 INSERT 작업을 무시하는 기능입니다. 다른 관계형 데이터베이스 시스템에서는 오래전부터 제공하던 기능이었는데, 이제서야 구현되었습니다. 브린(BRIN) 인덱스라는 새로운 인덱스를 제공합니다. 대용량 자료에서 btree 보다 성능이 낫다는 이야기가 있네요. 이는 얼마나 더 나은지, 도입해서 얻는 점, 잃 ...
[새소식] 2016-01-18 17:00
PostgreSQL 장애 대응
PostgreSQL 장애 대응 이 글은 IT 운영 관점에서 본 장애 Incident 대응에 대한 글입니다. IT 운영 업무에서 장애라는 단어는 응용프로그램 개발자들이 생각하는 장애와는 전혀 다른 의미입니다. 극단적으로 이야기하면, 장애가 발생했을 경우 운영자는 그 장애원인을 해결하는 것이 첫번째 일이 아니라, 그 서버를 사용하는 이용자들에게 장애 발생 이전 상태와 같은 서비스를 최대한 빨리 제공하는 것이 첫번째 일입니다. 장애 원인 종류 장애는 단순히 서비스가 정상적이지 않다는 것을 뜻하지만, 그 원인은 IT 전체 환경에 다양하게 걸쳐 있습니다. 하드웨어 장애 영원한 건 절대 없어 특히나 장비는 그렇습 ...
[강좌] 2015-11-28 23:23
PostgreSQL 고가용성
0. 들어가며 데이터베이스 시스템이 장애 없이 잘 사용되고 있다는 지표를 고가용성 High Availability 이라는 용어로 설명 합니다. 예를 들어서 고가용성 99.999 % 라는 말은 1년 가운데, 99.999 %는 서비스 장애가 없음을 말합니다. (1년에 약 5분정도 됩니다.) 이 글은 이 부분에 대한 이야기입니다. 어떻게 하면 데이터베이스 서비스가 1년을 운영하면서 5분 미만의 장애 시간을 유지 할 수 있는지에 대한 답은 의외로 데이터베이스 밖의 문제를 함께 고민해야 합니다. 전력, 네트워크, 하드웨어, OS 등 이 부분의 문제가 모두 위에서 말한 고가용성에 대한 설계가 충실하지 않다면, 데이터 ...
[강좌] 2015-07-25 21:33
jsonb 자료형 다루기
들어가며 인터넷에서 자료를 전달할 때 그 자료 형식을 무엇으로 할 것인가에 대한 수 많은 방법이 등장했고, 앞으로도 등장 할 것이지만, 이 글을 쓰고 있는 현재 대세는 json 형식입니다. 데이터베이스에서 이 형식 그대로 저장하고, 더 나아가 그 자료에 대한 인덱스를 사용할 수 있다면, 응용 프로그램 개발 비용을 현저하게 줄일 수 있을 것입니다. jsonb 자료형이 만들어진 이유는 바로 이 점 때문입니다. PostgreSQL에서는 9.2 버전(2012년)부터 json 자료형을 기본 자료형으로 포함했습니다. 기본 자료형이라고 하는 것은 그 자료형을 사용하는 연산자들을 함께 제공함을 의미합니다. 예를 들어 ...
[강좌] 2015-05-27 02:44
9.4 버전이 나왔습니다.
PostgreSQL 개발 그룹에서는 몇 해 전부터해다마 새로운 메이져 버전을 발표했는데, 올 해도 어떻게든 한 해를 넘기지 않으려고 연말에 발표 했네요. 새로운 기능으로 단연 돋보이는 것은 json 자료 처리 방식입니다. 다음으로 9.3 버전에서 처음 등장한 사용자 정의 백그라운드 프로세스를 다루는 기능이 좀더 다양해졌습니다. 즉, 쿼리 병렬처리를 위한 작업이 한 발 더 나아갑니다. 물론 갈 길이 멀긴 합니다. 9.3 버전에 등장한 materialized view에 대한 기능들도 제법 추가 되었습니다. 또 하나 주목할 기능은 복제에 대한 논리적 디코딩이라는 용어로 트랜잭션 로그를 사용자가 임의로 자기 원하 ...
[새소식] 2014-12-21 01:44
textsearch-ja 모듈을 이용한 한글 full text search
들어가며 이 글에서는 PostgreSQL에서 한글 기반 전문 검색 full text search 기능을 사용하는 것에 대한 한 방법을 소개합니다. database.sarang.net에서는 아주 오래 전부터 한글 full text search에 대한 논의를 여러 번 해왔지만, 지금까지 뚜렷한 성과가 없었습니다. PostgreSQL에서 제공하는 full text search 기능은 꽤 쓸만한데, 한글 형태소 분석기와, 한국어 사전이 마땅치 않아서 아까운 기능을 못 쓰고 있었습니다. 우연찮게 은전한닢 프로젝트 를 알게 되었고, 이것을 PostgreSQL 안으로 녹일 가능성이 보여 이 작업을 ...
[강좌] 2014-11-24 18:30
대용량 자료 입력용 임시 서버 환경 설정
대용량 입력 작업을 가볍게 일반적으로 pg_dump 작업 결과물을 다시 데이터베이스에 넣는 작업은 꽤 많은 대량의 데이터베이스 입력 작업이 일어납니다. 근원적으로 가장 먼저 OS 파일시스템의 I/O 성능을 최대화 할 수 있는 튜닝이 먼저 되어야겠지만, 이 부분은 이 글의 범위를 벗어나서 여기서는 postgresql.conf 파일을 수정해서 데이터베이스 자료 입력 성능을 최대화 하는 부분만을 살펴보겠습니다. 환경 설정 바꾸기 이 글은 데이터베이스 자료 입력 성능에 관계된 환경 설정 매개변수들을 소개하는 것입니다. 즉 아래에서 설명하는 여러 환경 설정 값들을 변경하고 그것을 적용하기 위해서 재실행 할 ...
[강좌] 2014-09-30 17:47
관계형 데이터베이스 시스템과 지리 정보의 활용에 대한 토막글
들어가며 네비게이션을 쓰면서 지도 데이터에 대한 업데이트 방법은 두 가지입니다. 하나는 지도 전체 데이터를 내려 받아서 SD 카드에 주기적으로 옮기는 방법 다른 하나는 통신사에서 제공하는 툴이나 , 온라인 맵 서비스를 모바일 네트워크를 이용해서 원하는 부분만 실시간으로 업데이트를 신경 쓰지 않는 방법 엄격하게 따지면, 후자의 경우 그 업데이트 방법은 전자의 경우와 다르지 않는데, 그 작업을 단지 맵 서버가 한다는 것입니다. 현재 대부분의 지도 서비스는 지리 정보를 관계형 데이터베이스에 저장하고, 그것을 맵 서버에서 지도를 그리고 그것을 응용 프로그램에서 제공합니다. 오프라인 네비게이션인 경우 ...
[강좌] 2014-08-14 00:28
9.3.5 버전이 배포되었습니다.
지난주에 배포되었네요. 멀티 트랜잭션을 사용하는 환경에서 pg_upgrade 명령으로 업그레이드 했을 경우, vacuum 명령이 실패하는 문제점을 수정했습니다. PostgreSQL을 실무에서 사용하면서 이런 상황이 얼마나 빈번하게 발생할지는 모르겠지만, 지난 릴리즈 다음부터 여러 자잔한 문제점들을 수정한 것과 함께 배포되었네요. 눈에 띄는 부분은 gin, gist 인덱스 관련 부분이 많이 수정되었네요. 해당 인덱스를 사용한다면, 업그레이드 하셔야할 듯합니다. 아마, 9.3 버전의 마지막 버전이 될 것 같습니다. ...
[새소식] 2014-07-30 02:12
PostgreSQL 부가 확장 모듈 소개
0. 소개 PostgreSQL에서는 서버 기능을 확장하는 수 많은 부가 확장 모듈을 제공하고 있습니다. 데이터베이스 서버가 이런 일을 할 수 있을까? 생각한다면, 먼저 http://postgresql.kr/docs/current/contrib.html 페이지를 살펴보길 권장합니다. 해당 페이지에서 각 부가 확장 모듈에 대한 자세한 정보를 담고 있습니다. 이 글에서는 그 페이지에서 소개하고 있는 모듈들 가운데 실무에서 자주 쓰는, 사용하면 편한 모듈들을 예제와 함께 소개하고자 합니다. 1. adminpack pgAdmin 프로그램의 서버 관리 항목에서 내부적으로 사용하는 각종 함수들의 모음입니다. ...
[강좌] 2014-07-29 18:16
PostgreSQL 서버 로그 실시간 감시
시작하며 PostgreSQL의 서버 로그에 대한 기능이 막강한 것은 써본 사람은 대부분 동의할 것입니다. 일반적으로 서버 로그는 일반 텍스트 파일에 저장하고, 로그를 분석해야 하는 상황에서는 대부분 유닉스 텍스트 파일 도구(cat, grep, sed, perl, awk ....)들을 이용해서 분석합니다. 즉, 이런 텍스트 파일 분석하는 도구들을 잘 다루는 이들에게는 전혀 불편함을 느끼지 못하지만, 그렇지 않은 경우는 텍스트 파일로 되어 있는 로그를 어떻게 분석해야 할지 막막하기만 합니다. 이런저런 문제들 때문에, PostgreSQL 쪽에서는 서버 로그 분석 도구들이 여러 오픈 프로젝트로 진행되었거나 ...
[강좌] 2014-05-16 18:01
9.3.4 버전이 배포되었습니다.
지난주에 릴리즈 되었습니다. 9.3.x 버전에서, 대기 서버에서 인덱스 스캔 결과와 시퀀스 스캔 결과가 달리 나오는 버그가 수정된 패치판입니다. 즉, 9.3.3 이하 버전을 스트리밍 복제 방식으로 대기 서버를 운영하고 있었다면, 대기서버를 재구축 해야합니다. 그외 실무에서는 그리 치명적이지 않은 기능 버그 개선들과 성능 개선을 했네요. 자세한 내용은 릴리즈 노트를 참고하세요. 이제 9.3.x 버전은 실무에서 사용해도 되지 않을까싶습니다. ...
[새소식] 2014-03-24 00:40
CentOS에서 PostgreSQL 컴파일 해서 쓰기
CentOS에서 PostgreSQL 컴파일 필요성 시스템 관리자와 그 시스템 위에서 사용되는 서버 관리자가 분리되어 있는 경우, 대부분의 해당 서버 관리자는 시스템 관리 영역과 서버 관리 영역이 분리되길 원합니다. 또한 시스템 소프트웨어 업그레이드와 관계 없이 서버 업그레이드를 하길 원해서도, 분리되길 원합니다. 그래서, 이런 서버 프로그램들이 오픈소스라면 대개 그 소스를 구해서 직접 컴파일 해서 씁니다. 이 글은 CentOS에서 PostgreSQL 소스를 직접 컴파일 해서 설치하고, 데이터베이스 서버를 실행하는 것까지의 이야기를 다룹니다. 컴파일에 필요한 부가 패키지들 Ce ...
[강좌] 2014-03-14 11:18
9.3.3 버전이 배포되었습니다.
참조키 처리 부분에서 문제점이 수정되었네요. 기존 서비스에서 혹 없는 자료를 참조하고 있다고 잘못된 결과를 보여줄 가능성이 있습니다. 참조키를 사용하고 있다면, 참조키를 다시 만드는 작업을 한 번 해 주는 것이 안전할 것같습니다. 테이블 잠근 문제 때문에 참조키를 다시 만들 수 없는 환경이라면, 참조키를 사용하는 테이블과 그 관련 테이블의 자료 정합성을 확인해 봐야할 것 같습니다. (이 이야기는 9.3.x 버전에 한 합니다) wal 처리 부분이 변경되어 기존 대기서버는 새 운영서버의 그것을 수용할 수 없습니다. 트랜잭션 로그 전달 기반 복제를 사용하고 있다면, 대기 서버도 ...
[새소식] 2014-02-21 10:15
홈페이지가 개편 되었습니다.
일주일 정도에 걸쳐 홈페이지를 새롭게 만들었습니다. 전체틀은 기존 것을 그대로 하고, html, css, javascript는 모두 HTML5 기반으로 변경 했으며, 데이터베이스는 Berkeley DB를 이용했습니다. 동적인 자료들 가운데, 핵심 컨텐츠는 php를 이용해서 db에서 뽑아 html로 출력했으며, 그외 자료들은 모두 jquery + json 기반으로 동적 처리해서, 웹서버에서 해야할 할 일을 웹 블로우져쪽에서 하도록 했습니다. 홈페이지 방문객들과의 상호 소통은 무시 했습니다. 라즈베리 파이에서 운영 되다 보니, 방문객이 남긴 자료를 소중하게 지킬 환경을 구축할 수 없었습니다. ...
[새소식] 2014-02-10 14:13
홈페이지 이전 작업 중입니다.
몇년간 홈페이지 운영에 대해 물심양면으로 도와준 기업의 보안정책이 변경 됨에 따라 홈페이지 이전을 준비했습니다. 우여곡절 끝에 집에서 내부 인트라넷용 서버로 쓰고 있는 라즈베리 파이로 옮겨 왔습니다. 다들 잘 아시다시피 라즈베리 파이로 웹 서비스를 운영 하겠다는 것은 많이 느린 서비스를 충분히 참겠다는 것을 의미합니다. 인내심을 키울 만큼 충분히 느릴 것이며, 때때로 홈페이지가 한동안 안열리는 날도 있을 것입니다. 하지만, 어떻게 하면 최적의 서비스를 제공할 것인가에 대해 부단히 노력할 것이며, PostgreSQL에 대한 양질의 한국어 컨텐츠를 제공하겠다는 생각은 홈페이지를 처음 만들 때와 전 ...
[새소식] 2014-02-07 01:39