으쌰으쌰
얼른 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)
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
3. WSL에서 접근 테스트WSL 쪽 IP는 Windows에서 ipconfig 시 vEthernet (WSL) 어댑터에 할당된 값이 보일 겁니다(예: 172.29.192.1).
4. PostgreSQL 설정WSL 안에서 PostgreSQL이 실행 중이라면, pgsql-openai 혹은 http 확장을 이용해서 Ollama를 호출할 때 아래처럼 포트를 11435로 지정해야 합니다:결과적으로
|
좀 느리긴하지만, 답장은 온다.. 신기허네
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 |