Eat Study Love

먹고 공부하고 사랑하라

Data Science/Research & Paper

PostgreSQL SQL2NL(3) - PostgreSQL 코드 좀 더 일반화 하기 + Python 연결

eatplaylove 2025. 2. 7. 21:08

생각보다 SelectStmt SQL에서 따져야 할 Clause가 많진 않았다.

 

처음엔 일일히 모든 Case에 대해서 if 를 써 filtering 하는 것이 좀 비효율적으로 보였는데, 막상 따져보니 꼭 그렇지도 않다는 것.

 

📌 아래는 SelectStmt에 포함된 Clause 목록과 역할입니다.

SELECT targetList SELECT 절 (선택된 컬럼 및 집계 함수)
FROM fromClause FROM 절 (테이블 목록 및 JOIN)
WHERE whereClause WHERE 절 (조건 필터링)
GROUP BY groupClause GROUP BY 절 (그룹화 조건)
HAVING havingClause HAVING 절 (그룹화 이후 필터링)
ORDER BY sortClause ORDER BY 절 (정렬 기준)
LIMIT limitCount LIMIT 절 (최대 결과 개수)
OFFSET limitOffset OFFSET 절 (결과 건너뛰기)
DISTINCT distinctClause DISTINCT 절 (중복 제거)
WINDOW windowClause WINDOW 함수 사용 여부
WITH withClause WITH 절 (CTE - 공통 테이블 표현식)
FOR UPDATE / FOR SHARE lockingClause 레코드 잠금 (동시성 제어)
VALUES valuesLists VALUES 절 (INSERT ... VALUES와 유사)
UNION, INTERSECT, EXCEPT op, larg, rarg UNION, INTERSECT, EXCEPT 같은 집합 연산

 

오히려 귀찮은 건, Aggregation Function처럼 SELECT 절 안에 있는 targetList를 또 한 번씩 걸러내는 것이 귀찮을 뿐이다.

 

일단은 지금까지 작업한 Code에 Having과 같이 좀 특수한 코드만 좀 더 추가하고

 

이제 이 MODEL을 LLM에다가 연결시켜서 TEST를 진행한다.

 

그 전에, TEST를 진행해 볼 것

 

1. 기존 LLM이 SQL to NL을 잘 못하는 Case 파악

2. 이 때, LLM에 Table Schema + SQL to NL Parsing정보 (내 코드) 를 함께 주면 정확도가 올라가는 것 확인

 

첫 번째로 Ubuntu 환경 PostgreSQL에 Bird Bench Mark에 있는 데이터들 중에서

DB_id California_school에 해당하는 데이터를 Local PSQL에 깔아보기로 한다.

 

이걸 택한 이유는, 이 테이블이 좀 난이도가 있다고 생각하여서..!

https://bird-bench.github.io/

 

BIRD-bench

BIRD Mini-Dev A Lite version of developtment dataset, which is designed to facilitate efficient and cost-effective development cycles, especially for testing and refining SQL query generation models. For more details, please visit the GitHub repository. Fo

bird-bench.github.io

Train Set은 거의 8~9GB에 육박하는 대용량 데이터이다;; 근데 일단 SQL-NL Gold Pair 말고 Data Set만 구현하면 되니까 아무거나 다운 받는다.

 

기본적으로 Data 는 SQLlist 기반으로 되어있다. 하지만 요것을 PostgreSQL상으로 가져올 수 있다는 것!

 

 

california_schools.sql
13.49MB

 

sqlite3 california_schools.sqlite .dump > california_schools.sql

 

이렇게 Linux 환경에서 sqlite를 sql 파일로 dump를 뜰 수 있다.

그리고, 이 파일을 PostgreSQL에 입히면 되는데 과정에서, 따옴표 제거 등.. 전처리가 좀 필요한데 이건 그냥 GPT돌려서 One by One으로 해결해나갔다. ( GPT 없으면 어떻게 살아남누.. )

 

나는 Bird라는 database를 만들고, 위 sql 파일을 덧입혔다.

psql -d bird -f california_schools.sql

 

일단 이것으로, PostgreSQL에서의 Setting은 끝났다.

 

이제는 이 PostgreSQL 시스템을 Python과 연결하는 일만 남았는데.. 이 놈이 항상 불안허다 ㅠㅠ

 

역시나 꼬였다..

 

문제는 WSL로 PSQL 접속중이라 그런 거 같다. 그래서 각종 PSQL의 configure를 바꿔주는 중

 

-- Default 값 of pg_hba.conf
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

 

이걸 아래와 같이 바꿔준다. md5 는 굳이 안 바꿔도 무관(md5 : password 무조건 넣게 하는 것)

 

local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     md5
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

 

그리고 또 하나! psql에서 postgresql.conf 도 바꿔줘야 한다.

아래 부분과 같이!

 

드디어 보는 success 라는 문구..ㅠㅠㅠ

 

내친김에 SQL문도 하나 날려보자..!!!!

 

일단 여기까진 성공,

 

다음 난관은. 내가 지금 INFO log로 날리고 있는 그 LOG문을 Python으로 가져올 수 있는지가 관건이다..!

 

화이팅.. To be continued..

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

PostgreSQL SQL2NL(3)  (0) 2025.02.03
PostgreSQL SQL2NL(2)  (0) 2025.01.14
PostgreSQL SQL2NL(1)  (0) 2025.01.08
PostgreSQL 실습에 유용한 code  (1) 2025.01.02
PostgreSQL 설치 및 특징  (2) 2024.12.27