문자열 처리를 할 때 토큰화 시키는 것이랑 trim 등은 매우 많이 쓰게 됩니다. 이번 시간에는 postgresql에서 특정 문자를 기준으로, split_part라는 함수를 이용해서 토큰화 시키는 방법을 알아보겠습니다. 먼저 3개의 인자를 받습니다. 원본 스트링, 그리고 delimeter 역할을 할 것 하나, 위치입니다. 저는 '-'를 기준으로 나누었기 때문에, a, b, c, d, efg, hi 순으로 나누어질 것이라는 것을 알 수 있습니다. 이 중 2번째는 b이므로 b가 출력되게 됩니다. 정말 그런지 보니, 'b'가 출력됨을 알 수 있어요. 다음에, 원본 문자열 'a-b-c-d-efg-hi'에서, '-'를 delimeter로 해서, 5번째 원소를 뽑으려고 합니다. 이 경우, a, b, c, d, ef..
코딩/Sql 검색 결과
postgres에서 at time zone 을 쓰는 방법을 간단하게 알아봅시다. 정말이지 시간대는 실수 하기도 정말 좋고, 삽질 하기도 너무 좋은 듯 합니다. 먼저, 쿼리를 실행할 때 리턴하는 type 정보들을 알아봅시다. pg_typeof로 조회할 수 있는데요. 요래 입력해 봅시다. 그러면, now() at time zone 'HKT'의 리턴 타입은 timestamp without time zone이고, now()의 리턴 타입은 timestamp with time zone임을 알 수 있습니다. 먼저, timezone을 보겠습니다. Asia/Seoul입니다. 서버 시간이 서울 시간대인 셈입니다. now() at time zone 'HKT'의 결과는 어떻게 될까요? 먼저 postgres에서 now()는 문..
특정 조건을 만족하는 레코드에 대해서 집계되게 하게 하는 것은 어렵지 않습니다. 그런데, 이런 경우가 있을 수 있습니다. 1월에 카데고리별로 몇 개나 쓰여졌고, 2월에는 몇 개나 쓰여졌고, 이러한 것들을 집계해야 할 경우가 있을 텐데요. 사실 case when 등으로 처리를 할 수 있겠습니다만 postgres에서는.. aggregate filter를 처음 알게 되어서 여기에 쓰고자 합니다. 먼저, 포스트의 데이터들입니다. 포스트에는 점수와 post 내용, id와 category가 있습니다. 이들 중 post에 bye가 포함되는 것들을 모두 얻어와 봅시다. 1번 카데고리에 1개, 3번 카데고리에 2개가 있습니다. 그리고 1번 카데고리의 총 점수는 18점, 3번 카데고리는 87점입니다. 다음에 gahui가 ..
dbeaver에서 postgres나 mysql db를 빠르게 백업하고 복구하는 방법을 알아봅시다. 중요한 것은 db 서버 버전하고 dbeaver쪽이 인식하는 client 버전하고 맞춰줘야 한다는 점이 있긴 하겠네요. 먼저 db를 우클릭 한 다음에 도구 - 백업을 선택합니다. 그러면 export를 할 오브젝트를 선택하라고 나옵니다. public 데이터베이스를 선택했습니다. 그랬더니, auth_group, auth_user 등 테이블들이 있는데요. 이들을 선택하면 테이블에 있는 데이터들을 쉽고 빠르게 백업할 수 있게 됩니다. 다음을 누르면, Format을 설정하고, 옵션들을 선택하는 것이 나옵니다. 옵션 선택지는 디폴트로 설정하였습니다. 그리고 Format은 Custom으로 설정하였습니다. Custom으로 ..
postgresql에는 partial index가 있습니다. 문서에 있는 것을 간단하게 요약하면, 조건을 만족하는 것만 indexing 하기 위해 쓰입니다. To avoid indexing common values가 중요한 부분입니다. django에서 email 필드에 대해, 널 값인 경우 unique 제약조건을 먹히지 않게 하는 방법을 찾다가 아래의 방법을 찾게 되었는데요. 35 ~ 39번째 의미는, 제약 조건을 추가할 텐데 UniqueConstraint를 추가할 거라는 의미입니다. field는 email, name은 email_idx, 중요한 것은 Q 조건입니다. email__isnull이 False인 것에 대해서만 적용하겠다는 의미입니다. 장고에서 이것을 어떻게 쓰는지에 대해, 이 글에서는 언급을 ..
최근댓글