테이블 생성 및 JSONB 필드 인덱싱
이 단계에서는 JSONB 데이터 타입을 사용하여 제품 정보를 저장할 테이블을 생성하고, 이 데이터에 대한 쿼리를 최적화하기 위해 GIN 인덱스를 생성합니다. JSONB는 JSON 데이터를 분해된 이진 형식으로 저장하므로 입력은 약간 느리지만 처리 속도는 훨씬 빠릅니다. GIN(Generalized Inverted Index) 은 JSONB 컬럼의 값과 같은 복합 값을 인덱싱하는 데 이상적입니다.
먼저 터미널을 열고 psql 대화형 쉘을 사용하여 PostgreSQL 데이터베이스에 연결합니다.
sudo -u postgres psql
이제 postgres=#와 같이 보이는 PostgreSQL 프롬프트가 표시됩니다.
다음으로 id 컬럼과 JSONB 타입의 data 컬럼을 가진 products라는 테이블을 생성합니다.
CREATE TABLE products (
id SERIAL PRIMARY KEY,
data JSONB
);
이제 products 테이블에 샘플 제품 데이터를 삽입합니다.
INSERT INTO products (data) VALUES
('{"name": "Laptop", "price": 1200, "tags": ["electronics", "computer"]}'),
('{"name": "Keyboard", "price": 75, "tags": ["electronics", "accessory"]}'),
('{"name": "Mouse", "price": 30, "tags": ["electronics", "accessory"]}'),
('{"name": "Monitor", "price": 300, "tags": ["electronics", "display"]}');
data 컬럼 내 검색 속도를 크게 높이려면 해당 컬럼에 GIN 인덱스를 생성합니다.
CREATE INDEX idx_products_data ON products USING GIN (data);
\di 명령을 사용하여 인덱스가 성공적으로 생성되었는지 확인할 수 있습니다. 이 명령은 모든 인덱스를 나열합니다.
\di
아래 출력과 유사하게 관계 목록에서 idx_products_data를 볼 수 있습니다.
List of relations
Schema | Name | Type | Owner | Table | Size | Description
--------+---------------------+-------+----------+-----------+------------+-------------
public | idx_products_data | index | postgres | products | 16 kB |
public | products_pkey | index | postgres | products | 16 kB |
(2 rows)
테이블 설정 및 JSONB 컬럼 인덱싱을 성공적으로 완료했습니다. 다음 단계를 위해 psql 쉘에 계속 머물러 있습니다.