안녕하세요. 이번 주제는 postgresql의 upsert를 구현해보는 포스팅입니다. 흔히 jpa를 쓸때 save() 메소드는 없으면 insert, 있으면 update를 한다고 알고 있는데요. JPA는 대략 아래처럼 SimpleJpaRepository에 구현되어 있습니다. @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } entity 정보가 isNew에 참이면 persist ..
MSA를 준비하는 도중에 도메인 분리를 해야하는데..! 그러기 위해서는 Dababase에 있는 테이블들부터 우선 구분을 할 필요가 있었다..! 따라서 전체 테이블이 800개가 넘어가는 모놀리틱한 데이터베이스의 전체 테이블을 파일로 저장하기 위해서 아래의 쿼리를 확인해보았더니 SELECT * FROM pg_catalog.pg_tables; 전체 schema의 테이블이 조회되어 시스템 테이블도 함께 조회된다. (pg_catalog) 따라서 where절에 다음과 같은 조건을 붙여 결과를 확인했다. SELECT * FROM pg_catalog.pg_tables where schemaname = 'public'; 그러니 현재 관리하고 있는 모든 데이터베이스 테이블의 목록을 구할 수 있었다!
안녕하세요. 오늘은 exists() 연산자에 대해서 포스팅을 해보고자 합니다. 사실 함수인지 연산자인지 개인적으로 혼란이 오는 부분이 있었지만 알아본 결과.. operator라는 단어로 서술되어있는 documentation이 많이있더라구요. 따라서 이 포스팅 내에서도 연산자로 서술하였습니다. 문법일단은 매개변수를 table 형태의 객체를 받고, bool 타입의 값을 리턴하는 형태의 구조를 띄고 있습니다.EXISTS (subquery)- 서브쿼리라함은 그 자체로 테이블 형태의 결과를 도출하기 때문에 Table 객체 타입으로 봐도 무방할 것 같습니다. exists 연산자를 사용할 때에는 이 subquery를 어떻게 간결하게 표현하느냐가 그 성능을 좌우하기도 합니다. 반환 타입bool (true/false) ..
오늘은 Postgresql에서 특정날짜부분을 추출하는 extract() 함수를 소개해보고자 합니다. 이미 이전 포스팅에서 extract() 함수에 대해서 사용법을 설명한 적이 있었는데요!sas-study.tistory.com/387[Postgresql] 날짜시간 추출, EXTRACT() 함수 사용법 정리오늘은 Postgresql에서 특정날짜부분을 추출하는 extract() 함수를 소개해보고자 합니다. extract() 함수는 날짜/시간 데이터에서 year(년도), month(월), day(일) 과 같은 요소를 추출/검색하는 함수입니다. sas-study.tistory.com거의 유사한 기능을 제공해서 사실 큰 의미는 없지만 편하신 방법 혹은 표현을 사용하시면 좋을 것 같아요! 문법해당 함수는 아래와 같이..
오늘은 Postgresql에서 특정날짜부분을 추출하는 extract() 함수를 소개해보고자 합니다. extract() 함수는 날짜/시간 데이터에서 year(년도), month(월), day(일) 과 같은 요소를 추출/검색하는 함수입니다. 예를 들면, '2021년 01월 01일 14시 23분 55초' 일때, 현재의 year(2021), month(1), day(1) 의 값을 추출할 수 있습니다. 문법해당 함수는 아래와 같이 사용할 수 있습니다.EXTRACT(field FROM source)field란 year, month, day 따위의 날짜/시간 데이터 요소를 말하고source란 실제 timestamp 값을 의미합니다. '2021-01-01 15:00:00' 와 같은 값입니다. 간단히 문법은 살펴보았으니..
이전에 Postgresql 관련 내용에서 1개의 컬럼으로 10개의 레코드가 1~10형태로 나올 recursive 문을 짜시오.라는 문제를 내며 postgresql의 recursive문에 대해서 포스팅을 한 적이 있었는데요. sas-study.tistory.com/165[Postgresql] recursive 문이란?? 개념 및 예제신입으로 처음 들어간 회사에서 oracle DB말고 postgresql이라는 DB를 사용해서 Postgresql을 처음 배웠을때 recursive 문을 배웠습니다. 자바의 for문과 비슷한 원리로 돌아가는 반복문인데 구조는 다음과 sas-study.tistory.com당시 하나의 컬럼에 대해서 1부터 10의 row를 반환하도록 하는 방법이었습니다. 즉, 일련의 숫자를 테이블형태..
서론 개발하다가 DB에서 데이터를 Select 하는 경우가 가장 빈번하다. 그 다음은 데이터를 가공하거나 테스트 데이터를 생성하는 등 DML 데이터 조작 SQL을 작성하는 경우다. 하지만 점점 직접 테이블을 생성하고 수정하며 제약사항을 걸고 기본값을 설정하거나 외래키, 외래키에 대한 옵션 등 자주 사용하지는 않지만 그로 인해 잊어버리기 쉬운 수정(ALTER) DDL을 정리하고자 한다. 컬럼 추가 ALTER TABLE 테이블명 ADD COLUMN 컬럼명 데이터타입 제약조건 자동증가(auto_increment) PK 컬럼 생성 예제 SQL : ALTER TABLE tblTest ADD COLUMN test_seq bigint PRIMARY KEY DEFAULT nextval('test_seq'); -> AL..
Postgresql DB에서 JSON 다루기 - 꼭 한번씩 본인 로컬 DB에서 실습을 해보시기 바랍니다!! 이번 포스팅에서는 PostgreSQL에서 JSON 데이터 타입으로 작업하는 방법을 다룹니다. 또한, JSON 데이터 타입을 다루기 위한 PostgreSQL 연산자 혹은 함수를 소개해보고자 합니다. JSON은 Javascript Object Notation의 약자입니다. JSON은 키-값 쌍으로 이루어진 개방형 표준형식입니다. JSON은 주로 서버와 웹 어플리케이션 사이에 데이터 이동에 사용됩니다. 다른 형식들과는 달리 사람이 읽고 파악할 수 있는 텍스트로 이루어졌습니다. PostgreSQL은 9.2버전부터 기본 JSON 데이터 타입을 지원하였습니다. JSON 데이터를 다루기 위해 많은 연산자와 함수..