Eat Study Love

먹고 공부하고 사랑하라

Data Science/Research

PostgreSQL, LLM 연결(4)

eatplaylove 2025. 3. 26. 20:49
1.https://github.com/cloudquery/pg_gpt
2.https://github.com/prabin-acharya/pg_gpt
3.https://github.com/JelteF/pg_human
4. https://github.com/pramsey/pgsql-openai
5.https://www.crunchydata.com/blog/accessing-large-language-models-from-postgresql

 

으쌰으쌰

 

얼른 PostgreSQL에 LLM을 연결해보자.

 

위 git-hub내용을 싸그리 검토해봅시다..

 

1. Extension을 사용해보기

내가 찾아본건, Paul Ramsey라는 양반이, 본인이 만든 PostgreSQL http extension을 가지고 PLpgSQL이란 언어로 PostgreSQL 내에서 LLM API를 불러오는 코드를 짠다.

 

PL/pgSQL은 PostgreSQL에서 제공하는 Procedural Language로 PostgreSQL 서버 안에서 동작하는 함수를 작성할 수 있게 해준다.
Create Function ... Language plpgsql 구문으로 함수를 작성할 수 있다.

아래는 예시 코드

CREATE OR REPLACE FUNCTION example_func(v_id INT)
  RETURNS TEXT
  LANGUAGE plpgsql
AS $$
DECLARE
  v_name TEXT;
BEGIN
  SELECT name INTO v_name 
    FROM my_table
   WHERE id = v_id;
  
  IF v_name IS NULL THEN
    RAISE EXCEPTION 'No name found for id %', v_id;
  END IF;
  
  RETURN v_name;
END;
$$;

SQL과 조건문, 변수, 예외 처리를 모두 PL/pgSQL 안에서 사용할 수 있다.

본래는, DB Level에서 Stored Procedure나 Trigger Logic를 추가하기 위해서 만들어진 언어이다.

 

장단점으론, 아무래도 DB 내부에서 Logic이 실행되니까 Run time 측면에서 성능이 좋고, Encapsulation 동작이니까 보안 측면에서 이점이 있다.

 

PostgreSQL - PL / pgSQL
Oracle - PL / SQL
SQL Server - T-SQL
참고로 위 3개는 문법적 특징을 공유한다.

 

Local에서 PostgreSQL Open-source를 다운받아 서버를 형성해서 실험을 진행하는거라 그런지, 일단 http extension이 쉽게 설치되지 않는다.

 

이렇게 PostgreSQL를 local 특정구역에다가 받아놓고 실험을 진행하는 경우, Extension설치시 PostgreSQL의 Default(?) 구역에 자동으로 설치되기 때문에 나의 PSQL Server에서 해당 Extension이 정상적으로 조회되지 않는 경우가 발생한다.

 

하여,

sudo apt install postgresql-17

 

이런 apt를 이용해서 설치하기보단(이 경우 Default Directory가 설정됨)

 

아래 Build / 설치 보조도구를 다운받고

sudo apt-get update
sudo apt-get install postgresql-server-dev-17 libcurl4-openssl-dev build-essential

-- postgresql-server-dev-17: PostgreSQL 17용 C 확장을 컴파일하는 데 필요한 헤더/라이브러리

-- libcurl4-openssl-dev: HTTP 요청 처리용 libcurl 헤더

-- build-essential: gcc, make 등 기본 빌드 도구

 

이 후 git-hub 소스를 통해 extension을 재설치 하는 것이 좋다.

 

pgsql-http Extension 기준, 소스 코드 내려 받기

git clone https://github.com/pramsey/pgsql-http.git
cd pgsql-http

 

그리고 build + 설치 하는데 Custom Server의 Directory에다가 build를 진행한다.

make clean
make PG_CONFIG=/home/(User이름)/pg_out/bin/pg_config
sudo make install PG_CONFIG=/home/(User이름)/pg_out/bin/pg_config
-- 위 경로는 그냥 내가 만든 예시 경로

 

그러면 PosgreSQL 환경에 Extension이 잘 설치된 것을 볼 수 있다!

CREATE EXTENSION http;

GPT와 달리 Ollama의 Setting은 아래와 같다.

그리고 ollama에서 Embedding을 지원하려면, Embedding용 모델을 별도로 받아야 한다.

 

참고로, 하다보니까 알게된 건데, openai 라는 extension도 설치해야한다.

이런... extension이라는 건 customize 된 것이라 이 사람이 일단 세팅해놓은 데로 따라가야 하는 거 같다.

 

결국 나도 이 extesnion이라는 것을 만드는 지경(C or Rust coding)까지 가야할듯;;

 

CREATE EXTENSION openai;
-- 설치법은 위 http extension 설치할 때와 크게 다르지 않다.

 

근데 또 WSL 환경에서 실행중이라 Local에 있는 Llama가 PostgreSQL에서 연동이 되지 않는다.

 

WSL에서 실행 => Windows ipconfig -> 이더넷 어댑터 vEthernet (WSL) 의 IPv4 주소를 참고할 것!!

SET openai.api_uri = 'http://172.29.192.1:11434/v1/';

 

뭔가 WSL의 연결이 빡세서 이것저것 방화벽 / IP를 옮겨주는 조건을 주었다. 아 괜히 WSL로 했나 이거;;

1. Ollama 구버전 구동 (기본 127.0.0.1:11434)

  1. 우선 다른 ollama 프로세스가 11434 포트를 점유 중이지 않은지 확인
    • 만약 이미 실행 중인 ollama가 있으면 종료(taskkill /F /PID <pid>)
  2. ollama 실행 (구버전)
    • 이 상태에서 ollama는 127.0.0.1:11434 로컬 호스트에만 바인딩됨
    • PowerShell에
      라고 표시될 것
  3. 테스트: 같은 Windows(호스트)에서
    이 잘 동작하면, Ollama는 로컬(127.0.0.1) 상태로는 정상임

2. netsh를 이용한 포트포워딩 설정

이제 WSL이 Windows 호스트 127.0.0.1:11434로 직접 들어갈 수 없으니, Windows IP(또는 0.0.0.0)에 다른 포트를 열고, 거기 들어온 트래픽을 Ollama로 중계해야 합니다.
예시: WSL에서 172.29.x.x:11435 → Windows → 127.0.0.1:11434
  1. Windows PowerShell(관리자 권한)에서 실행:
  • 이 설정은 “0.0.0.0:11435에서 들어온 TCP 연결을 127.0.0.1:11434로 넘긴다”는 의미
  • 즉, 외부(IP, WSL 등등)에서 Windows 호스트 IP(예: 172.29.192.1:11435)로 접근하면, 로컬 Ollama(127.0.0.1:11434)로 중계
  1. 확인
    • 해당 규칙이 표시되고, “Listen on 0.0.0.0:11435 -> Connect to 127.0.0.1:11434” 형태가 나오면 성공

3. WSL에서 접근 테스트

WSL 쪽 IP는 Windows에서 ipconfig 시 vEthernet (WSL) 어댑터에 할당된 값이 보일 겁니다(예: 172.29.192.1).
  • WSL 터미널에서:
  • 만약 정상 모델 목록 JSON이 뜬다면, 포트포워딩이 성공적으로 작동 중입니다.

4. PostgreSQL 설정

WSL 안에서 PostgreSQL이 실행 중이라면, pgsql-openai 혹은 http 확장을 이용해서 Ollama를 호출할 때 아래처럼 포트를 11435로 지정해야 합니다:
결과적으로
  1. WSL PostgreSQL → (172.29.192.1:11435) →
  2. Windows netsh 포트포워딩(0.0.0.0:11435 → 127.0.0.1:11434) →
  3. Ollama(127.0.0.1:11434)
이 경로로 요청이 전달되어 응답을 받을 수 있습니다.

 

좀 느리긴하지만, 답장은 온다.. 신기허네

SELECT openai.prompt(
  'You are a helpful AI assistant.',
  'Write a short poem about a cat.'
);

일단 여기까지는 어찌 어찌 실행이 된다. 즉 Extension으로 Llama를 불러오는 거가 된다는 것을 알았다.

이제 할 것은, 이 기능을 내가 Customize 할 수 있겠나...?

 

일단 Llama가 PostgreSQL 환경에서 불러진다는 것을 확인했다. 단지 언어가 pl/pgSQL, RUST, C 라는 쉽지 않은 녀석들인게 문제다..

 

To do :

1. NL2SQL / SQL2NL Finetuning 용 Data 수집 ( A.k.A 노가다 ㅠㅠ)

2. PostgreSQL에서 Llama 이용할 수 있는 Extension Code 짜보기..( A.k.A GPT 외주..)

 

'Data Science > Research' 카테고리의 다른 글

PostgreSQL, LLM 연결(5)  (0) 2025.04.01
SQL2NL 용 Data set 만들기  (0) 2025.03.31
PostgreSQL, LLM 연결(3)  (0) 2025.03.25
PostgreSQL, LLM 연결(2)  (0) 2025.03.25
PostgreSQL, LLM 연결(1)  (0) 2025.03.24