postgresql에서 특정 컬럼을 못 보게 하는 role은 어떻게 설정해야 할까요? 요약하면 view를 생성해서 권한을 주는 것입니다. 먼저, 특정 테이블을 볼 수 있는 유저 viewer를 하나 생성하겠습니다. 뭔가 상당히 복잡해 보이는데요. 사실 어려운 것은 없습니다. viewer가 LOGIN이 가능하고, public.app_user에 대해 select 권한이 있다는 것을 의미합니다. dbeaver에서는 viewer의 권한을 app_user 테이블을 선택한 다음에 Permission을 SELECT만 선택하고 적용을 누르시면 됩니다. 권한 설정을 다 하면, app_user에 있는 데이터들을 모두 볼 수 있습니다. 그런데, auth_group에 대해서는 접근할 수 없습니다. 왜냐하면, 제가 'viewer..
코딩/Sql 검색 결과
저번에 group by week를 하는 방법을 알아보았습니다. to_char와 IYYY IW format을 이용해서 했었습니다. 그런데, 이 방법 말고도, date_trunc라는 함수를 이용해서 하는 방법도 있어요. 간단하게 알아보겠습니다. 문서에 따르면 field가 가능한 것 중 하나가 'week'가 있어요. 이는 "주"를 의미합니다. 2022년 11월 6일을 date_trunc의 soruce로, field로 'week'를 넘겨 보겠습니다. 그러면 2022년 10월 31일 00:00:00.000 +0900이 나오는데요. 이는 2022년 10월 31일이 월요일이기 때문입니다. 11월 1일이 화요일이고, 11월 6일이 일요일입니다. 한 주의 시작을 월요일이라고 하면 11월 6일은 10월 31일이 시작인 주..
postgresql에서 week 별로 통계치를 내라는 요구사항이 들어왔습니다. 물론 몇 번째 week인지도 표시되어야 하고요. week의 시작은 월요일, 끝나는 요일은 일요일이라 해 보겠습니다. 월이나 일 등은 date에서 substring으로 뽑아내도 되기 때문에 그리 어렵지 않습니다. 그런데, week는 yyyy-mm-dd 꼴에서 바로 알 수 있는 방법이 없습니다. 계산을 해서 알아내야 합니다. 그런데, 그걸 위해서 함수를 만들어서 계산하기에는 매우 복잡할 듯 합니다. 이미, 제가 그러한 문제를 출제 했는데요. 하나는 일본 노래들과 프로듀스 48이 예제에 쫙 깔린 것이였습니다. 까다롭다고 평가받았습니다. c++, java, python도 그런 판에 sql은 어떨까요? 직접 함수를 구현한다면 까다롭지 ..
postgresql에는 coalesce 함수가 있습니다. 어떤 함수인지 간단하게 알아보고 간단한 문제로 실습해 보겠습니다. 먼저 헷갈릴 법한 것 부터 정리합시다. nullif는 expr1과 expr2가 같으면 null을, 아니면 expr1을 리턴합니다. 위 예제에서는 1과 2가 다릅니다. 따라서, 결과값은 1이 나올 겁니다. 정말 1이 나옵니다. 그러면, colaesce는 무슨 함수인가? expr1, expr2, ... , expr(n)이 있을 때, 최초로 null이 아닌 값을 리턴합니다. 이게 무슨 소리인가? 예제를 보겠습니다. colaesce에 null, 1, 2가 들어와 있습니다. 최초로 null이 아닌 값은 1입니다. 따라서 1이 리턴됩니다. 만약에 그런 것이 없다면 어떤 값이 나올까요? 그런 경..
실무에서는 어떻게 쓸 지는 잘 모르겠습니다만 (아마도 어플리케이션에서 처리하겠지만), 생각보다 trim 함수는 (코딩테스트 등에서)절찬리에 써먹을 수 있으니 알아보도록 하겠습니다. postgresql의 trim은 말 그대로, 맨 앞과 맨 뒤에 연속된 특정 문자들을 제거하는 역할을 합니다. python 같은 언어에도 비슷한 것이 있기 때문에 매우 쉽게 와닿으실 겁니다. 먼저 1번째. trailing [character set] from [string] 구문입니다. 어려울 건 없고 차근차근 보면 됩니다. trailing은 따라온다는 의미입니다. 뒤에 따라오는 것. 그렇습니다. 끝 부분에 있는 [character set]을 제거한다는 의미입니다. [character set]에 '-'가 왔으므로 끝에 오는 '-..
최근댓글