본문 바로가기

Database

(3)
[PostgreSQL] Sequence: 정의, 활용 방법, 그리고 정렬 방식 사용 사례 이번 포스팅을 작성한 이유일반적으로 드래그 앤드 드롭 정렬을 구현하는 데에는 Integer 방식, GreenHopper 방식, Linked List 방식 그리고 Atlassian Jira의 랭킹 알고리즘, LexoRank 정도가 있는 것으로 알고 있다(LexoRank 방식이 궁금하다면, 여기에서 자세히 알 수 있다). 나는 사이드 프로젝트에서 아이템 정렬 및 순서 변경 기능을 구현할 때, Integer와 순서가 변경되는 위치에 따른 분기 조건을 고려하는 방식의 쿼리를 사용하였다(링크). 하지만, 현재 회사에서는 PostgreSQL의 Sequence를 활용하여 아이템 정렬 및 순서 변경 기능을 구현하고 있다. 이에, 다소 생소했었던 PostgreSQL Sequence에 대해서 더 자세히 알아보고, 어떤 방..
[PostgreSQL] WITH TIES 옵션: 정의, 활용 방법, 그리고 효율적인 사용 사례 이번 포스팅을 작성한 이유회사 프로젝트에서 Cron 방식으로 데이터를 주기적으로 조회하는 쿼리를 커서 기반 페이지네이션으로 구현했고, 커서는 데이터 생성 시간을 뜻하는 created 컬럼(Datetime)을 대상으로 했다. 데이터 생성 시간이 동일한 케이스는 없을 것이라고 판단하였기에 쿼리는 단순 ORDER BY, LIMIT으로 구현했다. 하지만, 개발을 마치고 테스트 하던 중 일부 데이터가 조회되지 않고 누락되는 케이스가 발생했고, 원인을 파악해보니 특정 데이터를 일괄로 등록할 때 청크 단위로 동일한 생성 시간을 넣어주고 있는 케이스가 발견되었다(역시, 섣부른 판단은 이런 결과를..). 따라서, 커서 기반 페이지네이션의 조건을 변경해야 되는 상황이었고 복합 인덱스 설정과 WITH TIES 옵션 중 고민..
[Alembic] Auto Generating Migrations autogenerate 란? Alembic에서 제공하는 autogenerate 옵션은 SQLAlchemy의 ORM을 이용하여 정의한 메타데이터를 읽어 변경된 모델과 현재 데이터베이스 스키마를 비교하여 자동으로 마이그레이션 스크립트를 생성 해주는 옵션이다. autogenerate 옵션을 사용하기 위해서는 실제 데이터베이스 스키마를 선언한 모델로 부터 Base를 호출하여 target_metadata 변수에 설정해주어야 한다(초기값은 None). # alembic/env.py # add your model's MetaData object here # for 'autogenerate' support from myapp import mymodel target_metadata = mymodel.Base.metada..