
Geometric 타입은 이차원 공간 객체를 나타낸다
point (16 byte) : (x, y), 평면 위의 점은 좌표로 표현된다.
line (32 byte) : {A, B, C} / [(x1, y1), (x2, y2)], 직선은 선형 방적식 Ax + By + C = 0로 표현된다.
lseg (32 byte) : ((x1,y1),(x2,y2)), 선분은 두 점의 좌표로 표현된다.
box (32 byte) : ((x1,y1),(x2,y2)), 직사각형은 대각선이 되는 두 점의 좌표로 표현된다.
path (16+16n byte) : [( x1, y1) , ... , ( xn, yn)], 경로는 연결된 지점의 목록으로 표현된다. 경로는 첫번째 점과 마지막 점이 연결되지 않은 열린 경로일 수도 있고, 연결된 닫힌 경로일 수도 있다.
polygon (40+16n byte) : [( x1, y1) , ... , ( xn, yn)], 다각형은 꼭짓점의 좌표로 표현된다. 다각형은 닫힌 경로와 매우 유사하지만, 닫힌 경로는 그 경로 안의 영역을 포함하지 않는다.
circle (24 byte) : <(x, y) , r,> 원은 중심점과 반지름으로 표현된다.
PostgreSQL은 full text search를 지원하는 두가지 타입을 제공한다.
full text search 는 문서를를 전처리하여 빠르게 검색할 수 있도록 한다.
1. 문서를 토큰으로 나눈다.
Full text search에서 문서를 처리하기 위해 먼저 문서를 작은 단위(토큰)로 나눈다. 이 토큰들은 문서 내에서 검색 가능한 최소 단위로 생각할 수 있다
2. 토큰을 렉섬으로 변환한다.
렉섬(lexeme)은 토큰을 정규화한 형태로, 다양한 형태의 동일한 단어를 하나의 표준 형태로 나타낸다.
💡 정규화 작업
- 대소문자 통합 : 대문자를 소문자로 바꾼다.
- 접미사 제거 : 단어 뒤에 붙는 다양한 접미사 (예: -s, -es)
- 어근 추출: 단어의 기본 형태를 찾아낸다. (예: running과 ran은 어근 추출을 통해 run으로 정규화 된다.
- 불용어 제거 : 텍스트 검색에서 무시해야하는 불용어를 제거한다.
3. 정렬된 렉섬을 tsvector 타입으로 저장한다.
4. tsquery 타입으로, tsvector로 저장된 텍스트 데이터를 검색하기 위한 쿼리를 생성한다.
tsquery
💡 요약
tsvector: 문서를 토큰화하고 정규화하여 텍스트 데이터를 효율적으로 저장하기 위한 데이터 타입
tsquery: tsvector로 저장된 텍스트 데이터를 검색하기 위한 쿼리를 생성하는 데이터 타입
UUID 타입은 UUID를 저장한다.
PostgreSQL은 uuid-ossp 확장 모듈을 사용하여 UUID를 자동으로 생성할 수 있는 함수, uuid_generate_v4()를 제공한다.
// uuid-ossp 모듈 활성화
CREATE EXTENSION "uuid-ossp";
CREATE TABLE my_table (
id UUID PRIMARY KEY,
name VARCHAR(255)
);
INSERT INTO my_table (id, name) VALUES (uuid_generate_v4(), 'Example');
JSON 타입은 JSON 데이터를 저장한다.
JSON 데이터는 text 타입으로 저장될 수도 있지만, JSON 타입을 사용하면 데이터가 JSON 형식에 맞게 저장되고 유효한 JSON 객체나 배열을 포함하는지 검사할 수 있기 때문에 데이터의 일관성을 유지하고 부적절한 데이터를 방지할 수 있다.
또한, JSON 타입은 JSON 데이터를 쿼리하고 조작하기 위한 다양한 함수와 연산자를 제공하기 때문에 쿼리 결과에서 필요한 정보를 추출하기가 편리하며, 필터링 및 정렬과 같은 작업도 쉽게 수행할 수 있다.
PostgreSQL에서는 테이블의 column을 가변 길이 다차원 배열 타입로 정의할 수 있다.
배열 타입을 사용하면 동일한 데이터 유형의 여러 값을 하나의 열에 저장할 수 있으며, 배열을 다루는 다양한 함수와 연산자를 제공하므로, 배열을 효과적으로 사용할 수 있다.
💡 TIP
배열은 집합이 아니다.
특정 배열 요소를 검색하는 것은 데이터베이스 설계 오류의 징후일 수 있다.
특정 배열 요소를 검색하는 것이 필요한 경우, 배열 대신 별도의 테이블을 사용하는 것을 고려할 필요가 있다.
※ 배열 요소는 1부터 시작한다.
※ 자세한 사용 방법은 공식 문서를 참고하자.
PostgreSQL에서는 해당 포스팅에서 작성한 데이터 타입 외에도 네트워크 주소 타입, 비트 문자열 타입, XML 타입, 의사(Pseudo) 타입, 도메인 타입, 객체 식별자 타입, 복합 타입, 범위 타입 등 다양한 타입을 제공한다.
각 타입에 대한 자세한 설명은 공식 문서 에서 자세히 확인할 수 있다.