
DataBase/PostgreSQL 2025. 1. 14.
[PostgreSQL] 문자열 끝에서 구분자로 문자열 가져오는 방법
문자열 끝에서 읽어서 처음 만나는 구분자로 잘라서 문자열을 가져와야하는 상황이었다.postgreSQL에서 제공해주는 함수 중에서 앞에서부터 잘라오는 함수는 있지만 뒤에서 잘라오는 함수가 없어서 직접 구현했다.-- Description : 구분자 마지막 스트링값 가져오는 함수CREATE OR REPLACE FUNCTION core.fn_db_get_last_str(val text, part text) RETURNS text LANGUAGE plpgsqlAS $function$ DECLARE _RET text; BEGIN _RET := left(val, -1 + length(val) - position(part IN reverse(val))); RETURN _RET;END$fun..

DataBase/PostgreSQL 2022. 8. 1.
[PostgreSQL] WITH ORDINALITY를 사용하여 원하는 순서로 정렬하기
WITH ORDINALITY 절이 함수 호출에 추가되면 각 행에 대해 번호가 매겨진 모든 함수의 출력 열 뒤에 새 열이 추가된다. table처럼 별칭도 추가할 수 있다. 예제 1 SELECT * FROM unnest(ARRAY['a','b','c','d','e','f']) WITH ordinality; 예제 2 별칭 추가 예제 SELECT * FROM unnest(ARRAY['a','b','c','d','e','f']) WITH ordinality t(id, ord); 예제 3 정렬 순서를 변경하고 싶을 경우 원하는 순서 : 'c', 'e', 'f', 'd', 'b', 'e' SELECT * FROM unnest(ARRAY['a','b','c','d','e','f']) as t1(id) INNER joi..

DataBase/PostgreSQL 2022. 8. 1.
[PostgreSQL] USING
using은 join의 양쪽이 조인 열에 대해 동일한 이름을 사용하는 특정 상황에서 활용할 수 있는 양식이다. 예를 들어, T1과 T2를 USING(a, b)으로 조인하면 조인 조건은 on T1.a = T2.a and T1.b = T2.b가 된다. 예제 1 select * from unnest(array[1,2,3,4,5]) as t1(id) inner join unnest(array[1,3,5]) as t2(id) using(id) -- 동일한 쿼리문 select * from unnest(array[1,2,3,4,5]) as t1(id) inner join unnest(array[1,3,5]) as t2(id) on t1.id = t2.id 예제 2 select * from unnest(array[1,..

DataBase/PostgreSQL 2022. 3. 11.
[PostgreSQL] 이전 행 및 다음 행을 비교하는 방법 - Lag와 Lead
📢 들어가며 전 행의 데이터를 비교하여 같으면 ''을 다르면 원래 값을 리턴하는 로직 구현해야 했다. Ag Grid 라이브러리에서 제공하는 valueFormatted, valueGetter, cellClassRulers 등을 사용할 때, 같은 데이터가 중복으로 2번 이상 타는 것이 문제였다. 중복으로 타면서 전 행의 데이터를 비교해야 하는데 자기 자신과 비교하게 되는 등의 문제가 발생했다. 이를 해결하고자 params.node.rowIndex를 받아서 체크하면서 해당 index보다 작으면 실행이 안되게 구현하였다. 적은 데이터일 때는 문제 없이 작동하는 듯 보였으나 무한 스크롤을 사용하는 서버 사이드 그리드이기에 스크롤할 때 문제가 발생한다. 결국, 이 문제는 서버에서 해결해야 했다. 알아보니 쿼리문에서..

DataBase/PostgreSQL 2022. 2. 21.
[PostgreSQL] 구분자로 구분된 문자열을 array 배열로 받기(split_part, string_to_array, unnest)
fruit table이 아래와 같은 데이터가 있다고 가정하자. id data 과일 사과|수박|딸기|오렌지|바나나 1. split_part :: 문자열을 구분자로 나눈 다음 몇 번째에 위치한 데이터를 가져오는 함수 먼저, split_part 를 사용하여 구분자로 구분하고 2번째에 위치한 데이터를 불러보자. select split_part(data,'|',2) as 두번째_과일 from fruit where id='과일' * 2를 뺄 경우, 오류가 발생한다. 2. string_to_array :: 문자열을 구분자로 구분하여 배열로 만드는 함수 문자열을 '|'로 구분하여 배열로 반환하는 쿼리문을 만들어보자. select string_to_array(data, '|') from fruit where id='..

DataBase/PostgreSQL 2022. 2. 21.
[PostgreSQL] drop, delete, truncate의 차이점
1. DROP 명령어 개념 : 테이블 자체를 삭제하는 명령어 설명 - 해당 테이블 자체가 삭제된다. - 해당 테이블에 생성되어있던 인덱스, 제약조건 등도 삭제된다. - 삭제 후 되돌릴 수 없다. - DROP TABLE [테이블명] 2. TRUNCATE 명령어 개념 : 테이블의 데이터를 전부 삭제하고 사용하고 있던 공간을 반납하는 명령어 설명 - 해당 테이블의 데이터만 모두 삭제되며 테이블 자체가 삭제되는 것은 아니다. - 해당 테이블에 생성되어있던 인덱스도 함께 삭제된다. - 조건을 걸지 못해 데이터를 한꺼번에 다 지운다. - 삭제 후 되돌릴 수 없다. - DDL이다. - TRUNCATE TABLE [테이블명] 3. DELETE 명령어 개념 : 테이블의 조건이 맞는 데이터를 삭제한다. 설명 - 데..

DataBase/PostgreSQL 2021. 12. 27.
[PostgreSQL] 프로시저(Procedure)
프로시저 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다. 프로시저 사용 시 장점 하나의 요청으로 여러 SQL문을 실행할 수 있다. (네트워크에 대한 부하를 줄일 수 있다.) 미리 구문 분석 및 내부 중간 코드로 변환을 끝내야 하므로 처리 시간이 줄어든다. 데이터베이스 트리거와 결합하여 복잡한 규칙에 의한 데이터의 참조 무결성 유지가 가능하게 된다. 간단히 말하면 응용 프로그램 측 로직을 가지지 않고도 데이터베이스의 데이터 앞뒤가 맞게 될 수 있다. JAVA 등의 호스트 언어와 SQL 문장이 확실하게 분리된 소스 코드의 전망이 좋아지는 것, 또한 웹사이트 등 운용 중에도 저장 프로시저의 교체에 의한 수정이 가능하기 때문에 보수성이 뛰어나다. 웹 패치를 할 때 프로시저만 변경되었다면 웹 ..

DataBase/PostgreSQL 2021. 11. 21.
[PostgreSQL] row_to_json VS json_agg 의 차이
개발할 때 data를 json형태로 만들어서 보낼 일들이 꽤 있었다. row_to_json을 주로 사용하였지만 다른 쿼리문들을 보니 json_agg을 사용하는 경우도 있었다. 둘 다 json형태로 보내지만 어떤 차이가 있는 지를 알아보았다. 1. ROW_TO_JSON ROW_TO_JSON은 한 행을 json형태로 만든 것으로 하나의 칼럼에 한 로우(row)씩 들어가 있다. select row_to_json(T)::text as json from ( select 'kim' as name, '2020' as year union all select 'shin' as name, '2021' as year ) as T 2. JSON_AGG JSON_AGG은 한 행을 json형태로 만들고 하나의 칼럼에 모든 로우(..
