본문 바로가기

PostgreSQL

2019년 1월 4째주 로그 #Pocket - DjangoA. Where to Put Business Logic in Django이거슨 길어져서 요기에 정리해두었다.B. Python @property루비에서는 get_XXX 메서드를 사용하지 않았다. 파이썬에서는 Property와 get_XXX메서드를 구분해서 써서, 어떤 경우에 Property를 써야하는지 궁금해졌다.요 글을 후르르륵 읽고, 대충 내가 정한 기준은 다음과 같다.property..
(PostgreSQL) 테이블에 제약사항이 있는 컬럼 추가하기 Postgresql 테이블에 컬럼을 추가하는 작업은 신중하게 처리해야한다.  사이즈가 큰 테이블에 기본값이 있거나, 제약사항이 있는 컬럼을 추가하는 작업은 리스크가 있기 때문이다. 이번 포스트에서는 제약사항이 있는 컬럼을 추가할 때 발생하는 리스크와 이를 분산시키는 방법에 대해서 정리해보고자 한다. PostrgreSQL 컬럼 추가 동작 방식 ALTER ADD COLUMN 명령문을 실행하면, PostgreSQL은 아래와 같은..
(PostgreSQL) JSON VS JSONB RDB에 JSON 포맷을 저장할 때, 평소처럼 텍스트 포맷으로 저장할지, JSON Format을 적용할지 고민하게 된다. 뫼비우스의 띠 같은 삶을 사는 나는 딱 1년전에도 비슷한 고민을 했었다.( 작년에 조사한 글 :  👉 [MariaDB]RDB 속에서 NOSQL 사용하기 👈)작년에는 리서치만 해보고 말았는데, 올해에는 PostgreSQL에 JSON 타입을 실제로 적용해봐야겠다. 🐜🐜🐜고..
(PostgreSQL) Transaction과 Lock에 대한 이모저모 Table Lock Mode Table Lock Mode에 따라 공존할 수 있는 Lock이 있고, Conflict나는 Lock이 있다. SELECT를 막는 Table Lock은 ACCESS EXCLUSIVE 뿐이다. Lock Mode의 최종보스다. SELECT FOR SHARE는 FOR UDPATE, FOR SHARE 쿼리에서 필요하다.EXCLUSIVE는 UDPATE / DELETE 등의 쿼리에서 필요하다. EXCLUSIV..
(PostgreSQL) DB Lock을 줄이는 7가지 팁 해당 글은 When Postgres blocks: 7 tips for dealing with locks을 보고 정리한 글입니다  1. Default 값이 있는 필드를 추가하면 안된다PostgreSQL 10버전 이하를 쓰고 있다면, Default 값이 있는 필드를 추가하면, 테이블 락이 걸릴 수 있다. 그리고 엄청 느리다. 그래서 이런 쿼리를 날리면 안된다. ALTER TABLE items ADD COLUMN up..
(PotgreSQL) ROW SHARE Lock이란? ROW SHARE Lock이란? Table Level Lock의 일종이다. Row라는 이름이 들어간다고 Row Lock이 아니다. SELECT FOR UPDATE, SELECT FOR SHARE 명령문을 날릴 때, 대상이 되는 테이블에 락을 잡는다. UPDATE, DELETE 명령문을 날릴 때, RowShareLock이 잡히는 경우도 있다. UPDATE / DELETE 명령문을 날릴 때, RowShareL..
(Django) Django ORM에서 Row Lock 잡기 - select_for_update Row Lock과 SELECT * FOR UPDATEUPDATE / DELETE 없이, SELECT 만으로 Row Lock을 잡고 싶을 때는, "SELECT * FOR UPDATE" 쿼리를 사용하면 된다.이렇게 Row Lock을 잡고있는 도중에는 다른 트랜잭션에서 해당 Row를 변경 / 삭제할 수 없다. select_for_updateDjango에서 SELECT * FOR UPDATE 쿼리를 사용할 때는, Django ORM sel..
(PostgreSQL) 슬로우쿼리를 잡아내는 3가지 방법 해당 글은 Weekly Postgres에서 보내준 3 WAYS TO DETECT SLOW QUERIES IN POSTGRESQL을 보고 정리한 글입니다 😀슬로우쿼리를 잡아내는 3가지 방법PostgreSQL에서 슬로우쿼리를 잡아내는 방법은 크게 3가지가 있다.1. 슬로우 쿼리가 발생하면 로그 남기기2. 쿼리 실행계획 로그에 남기기3. 쿼리 실행 통계 보기1. 슬로우 쿼리가 발생하면 로그 남기기어느정도 느려지면, 쿼리 실행문을 로그에 ..