OS: Windows 11 + WSL2 (Ubuntu 22.04)
DB: PostgreSQL 17(Docker 이미지), PostgreSQL 18 (공식 사이트에서 다운 받은 zip파일 사용)
테스트 쿼리: SELECT COUNT(*) FROM test;
데이터베이스:
CREATE TABLE test(id int);
INSERT INTO test SELECT * FROM generate_series(0, 10000000);
io_method=syncio_method=workerversion: '3.8'
services:
pg17:
image: postgres:17
container_name: pg17
environment:
POSTGRES_DB: testdb
POSTGRES_USER: postgres
POSTGRES_PASSWORD: pass
ports:
- "5417:5432"
volumes:
- pg17data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
- ./test_data:/test_data
pg18:
build:
context: .
dockerfile: Dockerfile.pg18
container_name: pg18
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: pass
ports:
- "5434:5432"
volumes:
- pg18data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
- ./test_data:/test_data
stdin_open: true
tty: true
volumes:
pg17data:
pg18data:
FROM debian:bullseye
# 필수 패키지 설치 (pkg-config 포함)
RUN apt-get update && apt-get install -y \\
build-essential \\
libreadline-dev zlib1g-dev flex bison libssl-dev \\
libxml2-dev libxslt1-dev libcurl4-openssl-dev libicu-dev \\
libperl-dev wget git ca-certificates sudo pkg-config \\
libzstd-dev liblz4-dev libedit-dev libevent-dev \\
locales
# 환경 변수
ENV PATH="/usr/local/pgsql/bin:$PATH"
ENV PGDATA="/var/lib/postgresql/data"
# 작업 디렉토리 생성
WORKDIR /usr/local/src
# 베타 소스 압축 파일 복사
COPY postgresql-18beta1.tar.gz .
# 압축 해제 및 디렉토리 이름 변수 설정
RUN tar -xzf postgresql-18beta1.tar.gz && \\
mv postgresql-18beta1 postgresql && \\
rm postgresql-18beta1.tar.gz
WORKDIR /usr/local/src/postgresql
# 빌드 및 설치
RUN ./configure --prefix=/usr/local/pgsql \\
&& make -j$(nproc) \\
&& make install
# postgres 유저 생성, 데이터 디렉토리 생성 및 권한 부여
RUN useradd -m postgres && mkdir -p $PGDATA && chown -R postgres $PGDATA
USER postgres
# 초기화
RUN /usr/local/pgsql/bin/initdb -D $PGDATA
EXPOSE 5432
# 컨테이너 시작 시 postgres 실행, 설정 파일 경로 지정
CMD ["postgres", "-c", "config_file=/var/lib/postgresql/data/postgresql.conf"]
# 캐시 클리어
sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'
# 쿼리 실행 시간 측정 + 결과 저장
docker exec -i pg17 bash -c '
START=$(date +%s%3N)
RES=$(psql -U postgres -d testdb -c "SELECT COUNT(*) FROM test;" -tA)
END=$(date +%s%3N)
DURATION=$((END - START))
echo "{ \\"version\\": \\"17\\", \\"io_method\\": \\"sync\\", \\"count\\": \\"$RES\\", \\"duration_ms\\": $DURATION }" | tee /test_data/ver_17.json
'