문자열 처리를 할 때 토큰화 시키는 것이랑 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..
postgresql 검색 결과
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()는 문..
postgresql에는 partial index가 있습니다. 문서에 있는 것을 간단하게 요약하면, 조건을 만족하는 것만 indexing 하기 위해 쓰입니다. To avoid indexing common values가 중요한 부분입니다. django에서 email 필드에 대해, 널 값인 경우 unique 제약조건을 먹히지 않게 하는 방법을 찾다가 아래의 방법을 찾게 되었는데요. 35 ~ 39번째 의미는, 제약 조건을 추가할 텐데 UniqueConstraint를 추가할 거라는 의미입니다. field는 email, name은 email_idx, 중요한 것은 Q 조건입니다. email__isnull이 False인 것에 대해서만 적용하겠다는 의미입니다. 장고에서 이것을 어떻게 쓰는지에 대해, 이 글에서는 언급을 ..
postgresql에서 random 함수를 쓰면서 generate_series 함수를 썼습니다. 오늘 이 함수에 대해서 조금 더 자세히 알아보도록 하겠습니다. 먼저, 숫자형에 대해서는, 이렇게 2가지 인자를 줄 수 있습니다. 이 때에는 step이 1입니다. 1씩 증가한다는 의미입니다. start가 1이고, end가 10인데요. 1부터 10까지 순서대로 결과에 나타납니다. 1부터 10까지 출력됨을 볼 수 있어요. 그런데 4씩 증가하게 할 수 없을까요? 3번째 인자로 4를 주면 됩니다. start가 1이고, end가 10, step이 4이므로, 1, 5, 9만 출력됩니다. 9 다음에 13인데요. 13은 10보다 크기 때문에, 출력되지 않습니다. 결과를 보면 1, 5, 9만 나왔음을 알 수 있습니다. 반대로,..
안녕하세요. 이번 시간에는 postgresql에서 random 함수를 알아보겠습니다. random 함수는 꽤 간단하게 쓸 수 있습니다. 그냥 random(). 끝입니다. 결과를 보시면 0.1816107987이 나옵니다. 또 다시 호출해 보겠습니다. 이번에는 0.3785214382가 나오네요. 문서에 따르면 이 함수는 0 이상 1 미만인 실수를 돌려준다고 되어 있어요. 추가로 언급된 부분은, security한 랜덤을 원한다면 crypto를 알아보라고 되어 있어요. 그러면 위 쿼리는 무엇을 하는 것일까요? 일단 random()*100이면, 0이상 100미만인 랜덤 실수를 뽑습니다. 그런데 floor가 붙었네요. 바닥 함수이므로, [0, 99]의 랜덤한 정수를 뽑습니다. 70은 0이상 99이하의 정수이니, 해..
최근댓글