안녕하세요. 이번 시간에는 postgresql에서 쓰는 string_agg 함수에 대해 간단하게 알아보겠습니다. 그리고 정렬하는 것과 중복 제거하는 것도 같이 알아볼게요. 먼저, string_agg는 컬럼의 값들을 하나의 string으로 합쳐주는 역할을 합니다. 입력으로 들어오는 row의 속성들을 하나의 string으로 합칠 때 쓰입니다. 이게 무슨 말인가? 예제를 하나 보겠습니다. temp_data를 with 절로 정의했어요. 속성 t의 값이 'a'인 것과, t의 값이 'b'인 것과, 'Z'인 것을 union한 결과를 temp_data로 정의했어요. 이제, temp_data에 있는 내용을 출력해 봅시다. 'c', 'b', 'Z', 'b'가 나옵니다. 이제 이것을 string_agg로 합쳐 보겠습니다. ..
postgresql 검색 결과
postgresql에서 어제 날짜와 내일 날짜를 구하는 방법을 알아보겠습니다. 현재 시간을 구하는 함수는 now()입니다. 여기서 '1 days'::interval을 뺀 값을 yesterday로 명명하였습니다. 결과를 볼까요? 그랬더니, 2023년 5월 23일 22시 24분 16.752초 +0900이 나옵니다. now() 리턴값의 type을 pg_typeof라는 함수로 할 수 있습니다. timestamp with time zone이라고 되어 있습니다. 즉 timezone입니다. 이 문서에서 table 9.32는 Date와 Time을 연산할 때 어떤 결과가 나오지에 대해서 설명합니다. timestamp와 interval을 더하면 timestamp가 나오게 됩니다. now()에 '1 days'::interv..
postgresql에는 materialized view가 있습니다. 간단하게 실습하면서 알아보겠습니다. 먼저, materialized view는 아래와 같이 생성합니다. create materialized view ~ as ~. 위 문장은, m_a라는 이름의 view를 생성하는데요. select * from a가 들어왔습니다. 테이블 a의 내용을 모두 출력하는 쿼리에 대한 뷰를 만듭니다. 그러면 view와 같은 것이 아니냐? 라는 질문을 하실 수 있는데요. 쿼리의 결과가 사용된다는 점은 같습니다. 그런데, 차이가 있습니다. 먼저, 테이블 a에 들어있는 내용입니다. 이 테이블에 위 2개의 레코드를 추가해 보겠습니다. 그리고, view 하나를 생성해 보겠습니다. 이 view는 a의 전체 내용을 출력하는 쿼리..
postgresql에서 insert, update, delete를 할 때 정말 insert, delete, update 등이 되었는지 알고 싶습니다. 쿼리를 실행한 결과를 가지고 오고 싶을 때 returning을 쓰는데요. 이를 통해서 불필요한 쿼리를 방지할 수 있습니다. 간단하게 예제를 보면서 알아보겠습니다. 먼저, c 테이블에 필드 a의 값이 11인 레코드를 추가합니다. 추가된 레코드(Row)를 리턴하는데요. 이 레코드에서 어떤 속성을 가져올 것인지를 적어주면 됩니다. 결과는 id가 11이 나왔습니다. 이는 id가 11인 Row가 추가되었다는 것을 의미합니다. 이제, returning id, a를 입력해 보겠습니다. 그러면 어떻게 나올까요? id가 12이고 a가 11이라고 하네요? 이는 속성 id가 ..
postgresql를 docker로 올릴 때, 데이터베이스들을 초기화 할 수 있습니다. 이 방법을 알아보겠습니다. 그 전에 volumes에 대해 간단히 알아봅시다. 먼저, 폴더 구조는 아래와 같습니다. docker-compose.yml 파일이 있고, ddl 폴더 밑에 schema.sql이 있습니다. 이제 밑에 있는 compose 파일을 보겠습니다. 11 ~ 15번째 줄이 중요합니다. 11 ~ 13번째 줄부터 해석해 봅시다. 문서를 보면 12 ~ 13번째 줄은 VOLUME:CONTAINER_PATH임을 알 수 있어요. CONTAINER_PATH는 VOLUME이 마운트 되는 경로를 의미합니다. 실제로 처음 postgres가 초기화 되고 볼륨이 만들어 질 때 초기화 되게 하기 위해 13번째 줄을 넣었는데요. ..
최근댓글