Database/PostgreSQL (10) 썸네일형 리스트형 PgBouncer: connection pool 관리 라이브러리 PostgreSQL의 pool을 관리하는 라이브러리 Connection Pool를 관리하여 postgresql의 부하를 줄여줄 수 있다. 더보기PgBouncer는 PostgreSQL을 위한 **경량(lightweight) 커넥션 풀러(Connection Pooler)**입니다. 수많은 클라이언트(애플리케이션)로부터 오는 데이터베이스 연결 요청을 소수의 실제 데이터베이스 연결로 효율적으로 중계하여, PostgreSQL 서버의 부하를 줄이고 전체 시스템의 성능을 향상시키는 역할을 합니다.쉽게 비유하자면, 인기 있는 클럽 입구에서 입장을 관리하는 **가드(Bouncer)**와 같습니다. 수백 명의 손님(애플리케이션 프로세스)이 한 번에 입장하려 하면 클럽 내부(DB 서버)가 혼잡해져 마비됩니다. 이때 가드(P.. PostgreSQL in Ubuntu - DB insert error: (psycopg2.DatabaseError) error with status PGRES_TUPLES_OK and no message from the libpq # Multi process # fork in Linux(Ubuntu) # spawn in Windows PostgreSQL을 이용하여 데이터베이스를 구축1. Windows에서는 정상2. Linux (Ubuntu) 에서는 아래 오류 발생하는 경우 DB insert error: (psycopg2.DatabaseError) error with status PGRES_TUPLES_OK and no message from the libpq 작업 환경과 사용 라이브러리는 다음과 같다OS: Ubuntu 22.04DB 연결: psycopg2-binaryORM: sqlalchemy 위 에러가 발생하는 코드는 insert query후 commit을 하는 단계에서 발생했다. 문제는 Windows에서는 발생하지 않는데, Ubuntu에서만 발생하는 에러라는 점이다.insert commit 단계에서 발생하는 에러임에도 inse.. PostgreSQL: Int id 충돌 문제 # auto increasement error # duplicate key value violates unique constraint PostgreSQL에서 int pk를 auto increment (숫자 자동 증가)로 부여하는 경우,종종 존재하는 id로 row를 추가하려는 경우가 있다. 예시 오류SQLSTATE[23505]: Unique violation: 7 ERROR: duplicate key value violates unique constraint "pages_pkey"DETAIL: Key (id)=(4) already exists. -> id auto increment를 마지막 int부터 다시 시작하도록 설정 psql shell을 진입 - 해당 데이터 베이스 사용 (\c database_name) 1.현재 sequence value를 확인하자(참고: table 명이 pages 인 경우이다)SELECT last_value, i.. PostgreSQL: password 안전하게 사용하기 # PGPASSWORD # .pgpass # .env Python에서 프레임워크가 아닌 Script를 통해 sql문을 사용하는 상황에서create table sql을 작성할 때 DB 접근을 위해 PASSWORD가 필요하다. .env에 기록을 해두고 load_dotenv로 사용할 수 있는데,psql command에 .env에서 불러온 password를 넣는 방식은 보안에 취약할 수 있다.비밀번호 등이 명령어 히스토리에 남을 수 있기 때문이다. 예제코드를 통해 살펴보자import subprocessimport osfrom pathlib import Pathfrom dotenv import load_dotenvload_dotenv()def create_table(): db_user = os.getenv('DB_USER') db_name = os.get.. PostgreSQL: query 기록하고 보기 - log파일로 보기 # /var/log/postgresql PostgreSQL에서 postgresql의 log를 봐보자 OS: ubuntu 22.04 기준 linux: 기본적으로 log들은 /etc/log에서 확인 가능 더보기 cd /etc/log/postgresql 위에서 로그들을 볼 수 있다. * 추가적으로 query들을, 자세하게 볼수 있도록 설정해보자 1. postgresql.conf에 아래와 같이 변경 - 대부분 주석 처리가 되있을 것이므로, 주석을 풀어서 기재하자. 없으면 직접 써줘도 된다. 더보기 log_statement = 'all' 위 설정으로 모든 sql statements에 대한 기록을 해주도록 한다고 한다. (주석으로 none으로 되어 있었음) 더보기 log_parameter_max_length = 0 위 설정은 모든 parameter va.. PostgreSQL: query 기록하고 보기 - table(view)로 보기 # ORM # raw query # extension # pg_stat_statements orm으로 query를 작성한 경우, orm이 실제 query로 어떻게 변했는지를 파악하고 싶을 때가 있다. PostgreSQL의 경우 실제 query를 table 형태로 저장해서 보도록 하자 OS: ubuntu 22.04 기준 1. postgresql.conf 에 shared_preload_libraries를 찾아서 주석을 풀고 다음과 같이 적자 ubuntu 기준 기본 postgresql.conf 위치: /etc/postgresql/[VERSION]/main/postgresql.conf 더보기 shared_preload_libraries = 'pg_stat_statements' 2. 쭉 내려서 아래에 다음도 추가 더보기 pg_stat_statements.track = all pg_stat_stateme.. DB Table 모두 지우고 리셋 # schema DB의 schema schema란 데이터베이스의 구조, 제약조건에 관한 전반적인 명세를 기술한 메타데이터의 집합 메타데이터? 일반적으로 저장될 데이터를 아울러서(초월해서) 적용될 데이터. DB에서는 모든 테이블들에 적용될 데이터(Rule)라고 보면 됨 - 쉽게 말해서 어떤 테이블의 필드를 Date값으로 받을지, Boolean 값으로 받을지 등의 조건을 명세한 데이터의 집합 -> 이러한 메타데이터의 집합이 그 DB의 Rule이 된다. -> Rule에 위반되는 데이터는 받을 수 없다고 보면 도니다. Rule에 위반되는 데이터는 입력을 받을 수 없다. 따라서 이미 규정한 schema와 다른 형태로 DB에 마이그레이션 해야할 때 Rule이 달라서 안되는 경우가 있다. DB의 데이터들을 날려도 되는 경우라면, 간.. PostgreSQL install ~ begin with Django: Linux(Ubuntu) WSL 환경에서 실행 (Ubuntu 22.04) Install $ sudo apt update $ sudo apt install postgresql postgresql-client $ systemctl status postgresql DB 생성 $ sudo -u postgres createdb mydatabase -u 옵션으로 user 선택, postgesql의 default user인 postgres로 실행 오류 발생: could not change directory to "/home/user": permission denied 해결책: $ sudo chmod 755 /home/user 위 명령어로 postgres user에게 /home/user directory 에 대해서 읽고 쓸 권한을 줍니다. 저.. 이전 1 2 다음