PostgreSQL 9.4 공식 가이드 Vol.2 SQL 언어
- 원서명PostgreSQL Documentation 9.4.4
- 지은이The PostgreSQL Global Development Group
- 옮긴이(주)비트나인
- ISBN : 9788960778511
- 40,000원
- 2016년 04월 26일 펴냄 (절판)
- 페이퍼백 | 656쪽 | 188*235mm
- 시리즈 : 오픈소스 프로그래밍
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
요약
PostgreSQL 공식 가이드 9.4 버전 문서에서 '1부 튜토리얼과 2부 SQL 언어' 부분을 발췌해 한 권의 책으로 출간되었다. 이 책에서는 PostgreSQL을 처음 접하는 사용자들이 쉽게 따라할 수 있는 튜토리얼과 데이터베이스를 사용하는데 반드시 필요한 내용인 SQL 언어에 대하여 다룬다. 'PostgreSQL 공식 가이드’는 PostgreSQL 개발자 및 그 외 지원자가 PostgreSQL 소프트웨어 개발과 병행해 작성된 문서로서, 이번 책 'Vol.2 SQL 언어’에서는 일반적인 SQL 문법, 데이터 타입, 함수 및 연산자, 지워하는 인덱스, 동시성 제어 등을 설명한다. PostgreSQL 공식 가이드 9.4 버전 시리즈로서 『PostgreSQL 9.4 공식 가이드 Vol.1 서버 관리』(2015)가 출간되었으며, 향후 『PostgreSQL 9.4 공식 가이드 Vol.3 서버 프로그래밍』도 책으로 출간될 예정이다.
한국어판 출간에 부쳐
PostgreSQL의 공식 가이드가 한국어판 서적으로 번역 출간된다는 소식을 들으니 매우 기쁩니다. PostgreSQL 공식 가이드는 양이 방대하고 내용도 쉽지 않다 보니 몇 개의 언어로만 번역됐습니다. 이런 상황에서 한국어 버전이 나온다는 것은 대단한 일입니다.
복잡한 소프트웨어를 사용하는 사용자에게 확신을 주기 위해서는 자국어로 번역된 문서가 매우 중요합니다. PostgreSQL 프로젝트는 공식 가이드가 매우 훌륭하다는 평가를 받고 있으며, 이번 한국어판 출간 덕분에 한국의 사용자는 PostgreSQL의 전문 기술을 훨씬 빠르게 습득할 수 있을 것입니다.
PostgreSQL은 아시아 지역에서 오래 전부터 사용되어왔습니다. 이번 한국어판 출간을 기점으로, PostgreSQL이 한국에서도 광범위하게 도입되는 시작의 불씨가 되길 바랍니다.
-브루스 몸지안(Bruce Momjian) / The PostgreSQL Global Development Group 공동설립자, EnterpriseDB 수석 데이터베이스 아키텍트
이 책에서 다루는 내용
일반적인 RDBMS의 개념, SQL 언어 등 전반적인 PostgreSQL 개념에 대한 이해
테이블 생성 및 수정, 권한, 스키마, 파티셔닝 등 데이터베이스 구조 생성 방법
데이터베이스로부터 데이터를 어떻게 반환받는지 등에 대한 방법
PostgreSQL에서 사용가능한 데이터 타입들
배열, JSON, 날짜 타입 등 다양하게 사용되는 함수 및 연산자에 대한 설명
PostgreSQL에서 지원하는 다양한 인덱스 타입들에 대한 설명
동시성 제어를 PostgreSQL 내에서 어떻게 수행하는지 등에 대한 내용
이 책의 대상 독자
오픈소스 DBMS를 구축하고 싶은 데이터베이스 사용자
PostgreSQL DBMS를 처음 사용해보는 데이터베이스 사용자
개인 용도로 PostgreSQL 서버를 구축하려는 사용자
이 책의 구성
이 책은 관리자 안내서로 PostgreSQL 데이터베이스 관리자에게 필요한 주제를 다룬다. 소프트웨어 설치 및 셋업, 서버 환경 설정, 사용자와 데이터베이스 관리, 정기적인 관리에 대한 내용이 들어 있다. PostgreSQL 서버를 개인 용도로 쓰거나 특히 운영상 사용해야 하는 경우, 이 주제들에 익숙해야 한다. 이 책은 처음 PostgreSQL 사용 시 읽으면 좋은 순서로 정리해 놓았다. 각 장의 내용은 독립적이기 때문에 개인의 선호에 따라 읽으면 된다. 내용은 주제 단위로 기술되어 있으며, PostgreSQL 데이터베이스 시스템 기본 사용법에 익숙한 독자들이 읽을 수 있다.
목차
목차
- 1부 튜토리얼
- 1장 시작
- 1.1 설치
- 1.2 기본적인 아키텍처
- 1.3 데이터베이스 생성
- 1.4 데이터베이스 액세스
- 2장 SQL 언어
- 2.1 소개
- 2.2 개념
- 2.3 새 테이블 생성
- 2.4 테이블을 행으로 채우기
- 2.5 테이블에서 쿼리 사용
- 2.6 테이블 간 조인
- 2.7 집계 함수
- 2.8 업데이트
- 2.9 삭제
- 3장 고급 기능
- 3.1 소개
- 3.2 뷰
- 3.3 외래 키
- 3.4 트랜잭션
- 3.5 Window 함수
- 3.6 상속
- 3.7 결론
- 2부 SQL 언어
- 4장 SQL 구문
- 4.1 어휘 구조
- 4.1.1 식별자 및 키워드
- 4.1.2 상수
- 4.1.2.1 스트링 상수
- 4.1.2.2 C 스타일 이스케이프를 사용한 스트링 상수
- 4.1.2.3 유니코드 이스케이프를 사용한 스트링 상수
- 4.1.2.4 달러 인용 스트링 상수
- 4.1.2.5 비트 스트링 상수
- 4.1.2.6 숫자 상수
- 4.1.2.7 다른 타입의 상수
- 4.1.3 연산자
- 4.1.4 특수 문자
- 4.1.5 주석
- 4.1.6 연산자 우선 순위
- 4.2 값 표현식
- 4.2.1 컬럼 참조
- 4.2.2 위치 매개변수
- 4.2.3 첨자
- 4.2.4 필드 선택
- 4.2.5 연산자 호출
- 4.2.6 함수 호출
- 4.2.7 집계 표현식
- 4.2.8 Window 함수 호출
- 4.2.9 타입 캐스트
- 4.2.10 콜레이션 표현식
- 4.2.11 스칼라 서브쿼리
- 4.2.12 배열 생성자
- 4.2.13 행 생성자
- 4.2.14 표현식 평가 규칙
- 4.3 함수 호출
- 4.3.1 위치 표시법 사용
- 4.3.2 지명 표시법 사용
- 4.3.3 혼합 표시법 사용
- 5장 데이터 정의
- 5.1 테이블 기초
- 5.2 기본값
- 5.3 제약 조건
- 5.3.1 CHECK 제약 조건
- 5.3.2 NOT NULL 제약 조건
- 5.3.3 UNIQUE 제약 조건
- 5.3.4 기본 키
- 5.3.5 외래 키
- 5.3.6 제외 제약 조건
- 5.4 시스템 컬럼
- 5.5 테이블 수정
- 5.5.1 컬럼 추가
- 5.5.2 컬럼 삭제
- 5.5.3 제약 조건 추가
- 5.5.4 제약 조건 삭제
- 5.5.5 컬럼의 기본값 변경
- 5.5.6 컬럼의 데이터 타입 변경
- 5.5.7 컬럼 이름 변경
- 5.5.8 테이블 이름 변경
- 5.6 권한
- 5.7 스키마
- 5.7.1 스키마 생성
- 5.7.2 공용 스키마
- 5.7.3 스키마 검색 경로
- 5.7.4 스키마 및 권한
- 5.7.5 시스템 카탈로그 스키마
- 5.7.6 사용 패턴
- 5.7.7 이식성
- 5.8 상속
- 5.8.1 주의점
- 5.9 파티셔닝
- 5.9.1 개요
- 5.9.2 파티셔닝 구현
- 5.9.3 파티션 관리
- 5.9.4 파티셔닝 및 제약 조건 제외
- 5.9.5 대체 파티셔닝 방법
- 5.9.6 주의점
- 5.10 외래 데이터
- 5.11 기타 데이터베이스 개체
- 5.12 종속성 추적
- 6장 데이터 조작
- 6.1 데이터 삽입
- 6.2 데이터 업데이트
- 6.3 데이터 삭제
- 7장 쿼리
- 7.1 개요
- 7.2 테이블 표현식
- 7.2.1 FROM 절
- 7.2.1.1 조인된 테이블
- 7.2.1.2 테이블 및 컬럼 별칭
- 7.2.1.3 서브쿼리
- 7.2.1.4 테이블 함수
- 7.2.1.5 LATERAL 서브쿼리
- 7.2.2 WHERE 절
- 7.2.3 GROUP BY 및 HAVING 절
- 7.2.4 Window 함수 처리
- 7.3 선택 목록
- 7.3.1 선택 목록 항목
- 7.3.2 컬럼 라벨
- 7.3.3 DISTINCT
- 7.4 쿼리 결합
- 7.5 행 정렬
- 7.6 LIMIT 및 OFFSET
- 7.7 VALUES 목록
- 7.8 WITH 쿼리(공통 테이블 표현식)
- 7.8.1 WITH의 SELECT
- 7.8.2 WITH에서의 데이터 수정 문구
- 8장 데이터 타입
- 8.1 숫자 타입
- 8.1.1 정수 타입
- 8.1.2 임의의 전체 자릿수 숫자
- 8.1.3 부동소수점 타입
- 8.1.4 시리얼 타입
- 8.2 금액 타입
- 8.3 문자 타입
- 8.4 바이너리 데이터 타입
- 8.4.1 bytea 16진수 형식
- 8.4.2 bytea 이스케이프 형식
- 8.5 날짜/시간 타입
- 8.5.1 날짜/시간 입력
- 8.5.1.1 날짜
- 8.5.1.2 시각
- 8.5.1.3 타임 스탬프
- 8.5.1.4 특수 값
- 8.5.2 날짜/시간 출력
- 8.5.3 시간대
- 8.5.4 간격 입력
- 8.5.5 간격 출력
- 8.6 Boolean 타입
- 8.7 열거형 타입
- 8.7.1 열거형 타입의 선언
- 8.7.2 순서
- 8.7.3 타입 안전성
- 8.7.4 구현 세부 사항
- 8.8 기하학적 타입
- 8.8.1 점
- 8.8.2 선
- 8.8.3 선분
- 8.8.4 상자
- 8.8.5 경로
- 8.8.6 다각형
- 8.8.7 원
- 8.9 네트워크 주소 타입
- 8.9.1 inet
- 8.9.2 cidr
- 8.9.3 inet vs. cidr
- 8.9.4 macaddr
- 8.10 비트 스트링 타입
- 8.11 텍스트 검색 타입
- 8.11.1 tsvector
- 8.11.2 tsquery
- 8.12 UUID 타입
- 8.13 XML 타입
- 8.13.1 XML 값 생성
- 8.13.2 인코딩 처리
- 8.13.3 XML 값 액세스
- 8.14 JSON 타입
- 8.14.1 JSON 입력 및 출력 구문
- 8.14.2 효율적으로 JSON 도큐먼트 설계
- 8.14.3 jsonb 제약 조건 및 존재
- 8.14.4 jsonb 인덱싱
- 8.15 배열
- 8.15.1 배열 타입의 선언
- 8.15.2 배열 값 입력
- 8.15.3 배열 액세스
- 8.15.4 배열 수정
- 8.15.5 배열에서의 검색
- 8.15.6 배열 입력 및 출력 구문
- 8.16 컴포지트 타입
- 8.16.1 컴포지트 타입의 선언
- 8.16.2 컴포지트 값 입력
- 8.16.3 컴포지트 타입 액세스
- 8.16.4 컴포지트 타입 수정
- 8.16.5 컴포지트 타입 입력 및 출력 구문
- 8.17 범위 타입
- 8.17.1 기본 제공 범위 타입
- 8.17.2 예제
- 8.17.3 경계 포함 및 제외
- 8.17.4 무한(무경계) 범위
- 8.17.5 범위 입력/출력
- 8.17.6 범위 생성
- 8.17.7 불연속 범위 타입
- 8.17.8 새 범위 타입 정의
- 8.17.9 인덱싱
- 8.17.10 범위에 대한 제약 조건
- 8.18 개체 식별자 타입
- 8.19 pg_lsn 타입
- 8.20 의사 타입
- 9장 함수 및 연산자
- 9.1 논리 연산자
- 9.2 비교 연산자
- 9.3 수학 함수 및 연산자
- 9.4 스트링 함수 및 연산자
- 9.4.1. format
- 9.5 바이너리 스트링 함수 및 연산자
- 9.6 비트 스트링 함수 및 연산자
- 9.7 패턴 일치
- 9.7.1. LIKE
- 9.7.2. SIMILAR TO 정규 표현식
- 9.7.3. POSIX 정규 표현식
- 9.7.3.1. 정규 표현식 디테일
- 9.7.3.2. 대괄호 표현식
- 9.7.3.3. 정규 표현식 이스케이프
- 9.7.3.4. 정규 표현식 Metasyntax
- 9.7.3.5. 정규 표현식 일치 규칙
- 9.7.3.6. 제한 및 호환성
- 9.7.3.7. 기본 정규 표현식
- 9.8 데이터 타입 서식 지정 함수
- 9.9 날짜/시간 함수 및 연산자
- 9.9.1. EXTRACT, date_part
- 9.9.2 date_trunc
- 9.9.3 AT TIME ZONE
- 9.9.4 현재 날짜/시간
- 9.9.5 실행 지연
- 9.10 Enum 지원 함수
- 9.11 기하학적 함수 및 연산자
- 9.12 네트워크 주소 함수 및 연산자
- 9.13 텍스트 검색 함수 및 연산자
- 9.14 XML 함수
- 9.14.1 XML 콘텐츠 생성
- 9.14.1.1 xmlcomment
- 9.14.1.2 xmlconcat
- 9.14.1.3 xmlelement
- 9.14.1.4 xmlforest
- 9.14.1.5 xmlpi
- 9.14.1.6 xmlroot
- 9.14.1.7 xmlagg
- 9.14.2 XML 조건자
- 9.14.2.1 IS DOCUMENT
- 9.14.2.2 XMLEXISTS
- 9.14.2.3 xmliswell_formed
- 9.14.3 XML 처리
- 9.14.4 테이블을 XML에 매핑
- 9.15 JSON 함수 및 연산자
- 9.16 시퀀스 조작 함수
- 9.17 조건 표현식
- 9.17.1 CASE
- 9.17.2 COALESCE
- 9.17.3 NULLIF
- 9.17.4 GREATEST 및 LEAST
- 9.18 배열 함수 및 연산자
- 9.19 범위 함수 및 연산자
- 9.20 집계 함수
- 9.21 윈도우 함수
- 9.22 서브쿼리 표현식
- 9.22.1 EXISTS
- 9.22.2 IN
- 9.22.3 NOT IN
- 9.22.4 ANY/SOME
- 9.22.5 ALL
- 9.22.6 단일 행 비교
- 9.23 행 및 배열 비교
- 9.23.1 IN
- 9.23.2 NOT IN
- 9.23.3 ANY/SOME (배열)
- 9.23.4 ALL(배열)
- 9.23.5 행 생성자 비교
- 9.23.6 컴포지트 타입 비교
- 9.24 집합 리턴 함수
- 9.25 시스템 정보 함수
- 9.26 시스템 관리 함수
- 9.26.1 구성 설정 함수
- 9.26.2 서버 시그널링 함수
- 9.26.3 백업 제어 함수
- 9.26.4 복구 제어 함수
- 9.26.5 스냅샷 동기화 함수
- 9.26.6 복제 함수
- 9.26.7 데이터베이스 개체 관리 함수
- 9.26.8 일반 파일 액세스 함수
- 9.26.9 경고성 잠금 함수
- 9.27 트리거 함수
- 9.28 이벤트 트리거 함수
- 10장 타입 변환
- 10.1 개요
- 10.2 연산자
- 10.3 함수
- 10.4 값 저장
- 10.5 UNION, CASE 및 관련 구문
- 11장 인덱스
- 11.1 소개
- 11.2 인덱스 타입
- 11.3 멀티컬럼 인덱스
- 11.4 인덱스 및 ORDER BY
- 11.5 복수 인덱스 조합
- 11.6 고유 인덱스
- 11.7 표현식의 인덱스
- 11.8 부분 인덱스
- 11.9 연산자 클래스 및 연산자 패밀리
- 11.10 인덱스 및 콜레이션
- 11.11 디스크 사용 검사
- 12장 전체 텍스트 검색
- 12.1 소개
- 12.1.1 도큐먼트란
- 12.1.2 기본 텍스트 일치
- 12.1.3 구성
- 12.2 테이블 및 인덱스
- 12.2.1 테이블 검색
- 12.2.2 인덱스 생성
- 12.3 전체 텍스트 제어
- 12.3.1 도큐먼트 파싱
- 12.3.2 쿼리 파싱
- 12.3.3 검색 결과 순위 지정
- 12.3.4 결과 강조 표시
- 12.4 추가 기능
- 12.4.1 도큐먼트 조작
- 12.4.2 쿼리 조작
- 12.4.2.1 쿼리 재작성
- 12.4.3 자동 업데이트의 트리거
- 12.4.4 도큐먼트 통계 모으기
- 12.5 파서
- 12.6 사전
- 12.6.1 불용어
- 12.6.2 간단 사전
- 12.6.3 동의어 사전
- 12.6.4 유의어 사전
- 12.6.4.1 유의어 구성
- 12.6.4.2 유의어 예제
- 12.6.5 Ispell 사전
- 12.6.6 Snowball 사전
- 12.7 구성 예제
- 12.8 텍스트 검색 테스트 및 디버깅
- 12.8.1 구성 테스트
- 12.8.2 파서 테스트
- 12.8.3 사전(dictionary) 테스트
- 12.9 GiST 및 GIN 인덱스 타입
- 12.10 psql 지원
- 12.11 제한
- 12.12 8.3 이전 텍스트 검색에서 마이그레이션
- 13장 동시성 제어
- 13.1 소개
- 13.2 트랜잭션 격리
- 13.2.1 읽기 커밋됨 격리 레벨
- 13.2.2 반복 가능 읽기 격리 레벨
- 13.2.3 직렬화 가능 격리 레벨
- 13.3 명시적 잠금
- 13.3.1 테이블 레벨 잠금
- 13.3.2 행 레벨 잠금
- 13.3.3 페이지 레벨 잠금
- 13.3.4 데드락
- 13.3.5 경고성 잠금
- 13.4 애플리케이션 레벨에서 데이터 일관성 검사
- 13.4.1 직렬화 가능 트랜잭션을 이용한 일관성 강제
- 13.4.2 명시적 차단 잠금을 사용한 동시성 강제
- 13.5 잠금 및 인덱스
- 14장 성능 팁
- 14.1 EXPLAIN 사용
- 14.1.1 EXPLAIN 기초
- 14.1.2 EXPLAIN ANALYZE
- 14.1.3 주의점
- 14.2 플래너에 의해 사용되는 통계
- 14.3 명시적 JOIN 절을 사용해 플래너 제어
- 14.4 데이터베이스 채우기
- 14.4.1 자동 커밋 비활성화
- 14.4.2 COPY 사용
- 14.4.3 인덱스 삭제
- 14.4.4 외래 키 제약 조건 삭제
- 14.4.5 maintenanceworkmem 증가
- 14.4.6 checkpoint_segments 증가
- 14.4.7 WAL 아카이브 및 스트리밍 복제 비활성화
- 14.4.8 나중에 ANALYZE 실행
- 14.4.9 pg_dump에 대한 몇 가지 주의 사항
- 14.5 비영속적 설정
도서 오류 신고
정오표
[p.52: 주석]
그러나 SQL 표준에서는 이것이 불필요하며
->
그러나 SQL 표준에서는 이를 요구하지 않으며
[p.58: 5행]
SET temp_hi = temp_hi 2, temp_lo = temp_lo 2
->
SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
[p.63: 아래에서 2행]
UPDATE accounts SET balance = balance 100.00
->
UPDATE accounts SET balance = balance - 100.00
[p.64: 첫 행]
UPDATE branches SET balance = balance 100.00
->
UPDATE branches SET balance = balance - 100.00
[p.125: 팁]
no null
->
not null
[p.407: 8행]
mloption
->
xmloption
[p.427: 참고]
4.2.14절에서 설명한 대고,
->
4.2.14절에서 설명한 대로,
[p.518: 7행]
컬럼이 개 이상
->
칼럼이 3개 이상
[p.598: 5행]
반본 가능 읽기
->
반복 가능 읽기
[p.621: 아래에서 6행]
저의 흡사하다
->
거의 흡사하다.
#2016. 11. 1 수정 사항
[p.112 9~10행]
이것은 테이블의 모든 행이 x > 0이더라도 런타임 시 절대 ELSE에 들어가지 않도록 플래너가 상수 하위 표현식을 단순화하기 때문에 결과적으로 0 으로 나누기 실패가 된다.
->
이것은 테이블의 모든 행이 x > 0이더라도 절대 ELSE 런타임에 입력되지 않을 것임에도 불구하고, 상수 하위 표현식을 단순화하려는 플래너 때문에 0으로 나누는 데 오류가 발생할 가능성이 높다.
[p.180: 아래에서 5행]
t2:
->
t2
[p296: 아래에서 5행]
(1108, '[2010-01-01 14:30, 2010-01-01 15:30)');
->
(1108, '[2010-01-01 14:30, 2010-01-01 15:30]');
[p.632: 12행]
플래너는 이 샘플 테이블이 너무 작아서 인덱스 스캔이 성가시지 않다고 생각하기 때문에(아주 정확하게),
->
플래너는 이 샘플 테이블이 인덱스 스캔을 방해하기엔 너무 작기 때문에