Skip to content

도커 컴포즈를 사용한 PGVector 환경 구축

PostgreSQLPGVector 확장을 추가해서 랭체인 벡터 저장소로 활용한다.

  • Directoryvector-search/
    • docker-compose.yaml
    • Directorypostgres/
      • schema.sql
  1. 작업 디렉토리 생성 및 docker-compose.yaml 파일 생성
    Terminal window
    mkdir vector-search
    cd vector-search
    touch docker-compose.yaml
    mkdir postgres
    cd postgres
    touch schema.sql
  2. schema.sql 파일 편집
    schema.sql
    -- Enable pgvector extension
    CREATE EXTENSION IF NOT EXISTS vector;
    -- Create sample table
    CREATE TABLE items (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    item_data JSONB,
    embedding vector(1536) -- vector data
    );
  3. docker-compose.yaml 파일 편집
    docker-compose.yaml
    services:
    pgvector-db:
    image: pgvector/pgvector:pg17
    container_name: pgvector-db
    environment:
    POSTGRES_USER: langchain
    POSTGRES_PASSWORD: langchain
    POSTGRES_DB: langchain
    ports:
    - "5432:5432"
    volumes:
    - pgdata:/var/lib/postgresql/data
    - ./postgres/schema.sql:/docker-entrypoint-initdb.d/schema.sql
    volumes:
    pgdata: # Stores data outside the container to ensure persistence
  4. PostgreSQL 기동
    Terminal window
    docker-compose up -d
  1. PostgreSQL 연결
    Terminal window
    docker exec -it pgvector-db psql -U langchain -d langchain
  2. 확장 목록 조회
    Terminal window
    -- Check installed extensions
    \dx
    Name | Version | Schema | Description
    ---------+---------+------------+------------------------------------------------------
    plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
    vector | 0.8.1 | public | vector data type and ivfflat and hnsw access methods
    (2 rows)
  3. 테이블 생성 확인
    -- Check table creation
    \dt
    Schema | Name | Type | Owner
    --------+-------+-------+-----------
    public | items | table | langchain
    (1 row)
  4. items 테이블 구성 조회
    -- Check table structure
    \d items
    Column | Type | Collation | Nullable | Default
    -----------+------------------------+-----------+----------+-----------------------------------
    id | integer | | not null | nextval('items_id_seq'::regclass)
    name | character varying(255) | | not null |
    item_data | jsonb | | |
    embedding | vector(1536) | | |
    Indexes:
    "items_pkey" PRIMARY KEY, btree (id)

Build Your Own AI Search Engine (3 Part Series)

  1. Part 1: Setup with PostgreSQL and pgvector
  2. Part 2: Implementing Vector Search with OpenAI
  3. Part 3: Implementing Vector Search with Ollama