Intro liquibase를 사용하여 데이터베이스 스키마를 관리하고 있습니다. 주로 PostgreSQL을 사용하고 있는데, 테스트를 수행할 때 별도의 외부 DB를 사용하지 않고 인메모리 DB를 이용하고자 했습니다. 그런데 gen_random_uuid와 같은 일부 PostgreSQL 문법과 시퀀스 생성 등이 발목을 잡았습니다. 그래서 인메모리 DB로 테스트를 할 때는 liquibase를 사용하지 않고, data.sql 파일을 불러와서 DB스키마를 생성하려고 합니다. 이를 위해 먼저 liquibase를 사용하여 PostgreSQL 데이터베이스에 초기 데이터를 입력한 다음, 이를 SQL로 추출하여 H2에서 사용 가능하게 편집하려고 합니다. liquibase로 변경 로그를 불러와 SQL로 추출할 수도 있지만,..
Data/PostgreSQL 7
Intro 가끔 필요한 일이 돌아왔다. 데이터베이스에 직접 접속해서 뭔가를 변경 해야 한다. Docker 네트워크 내에서만 통신하고 외부로는 바인딩도, 포트 포워딩도 되어 있지 않으니, 번거롭게 다시 설정 하고 컨테이너 재시작 할 필요 없이 컨테이너 내부에 접속해서 바로 변경하면 되겠군. 얼른 마칠 생각을 하며 PostgreSQL 이 떠 있는 컨테이너에 접속하는중 docker exec -it postgres_container bash 이제 psql을 써볼까나..? psql 명령어와 함께 손에 익은 옵션을 기계적으로 붙이는중 psql -U postgres 앗.. postgres 유저가 없다..? 참. 나는 다른 이름으로 유저명을 지정했지 유저명을 변경해 재시도 하는 중 psql -U my_user_name..
Intro 여러가지 산출물 작업을 해야 하는데, 데이터베이스에 대한 내용들은 이미 워낙 방대하기 때문에 도저히 손으로 작업 할 엄두가 나지 않았습니다. 필요에 의해 쿼리를 작성 했으나 추후 또 필요할 경우가 생겼을 때 시간을 절약 하기 위해, 또한 비슷한 고민을 하고 있는 분들에게 도움이 되었으면 하는 마음에 글로 작성해 남겨두려 합니다. SQL 제가 산출물 작업 하면서 필요한 내용들 위주로 쿼리를 작성 하였기 때문에 필요한 자료가 조금씩 다를 경우에는 일단 실행 해본 후에 쿼리를 약간씩 수정해서 사용 하시면 됩니다. 전체 테이블 주석과 실제 테이블명 조회 테이블에 주석을 달아놓지 않았다면 NULL로 표기됩니다. 평소에 주석을 꼭 달아두어야 나중에 서류 작업 할 때 편합니다. 예시를 들기 위해 엉뚱한 D..
도커 컨테이너에 있는 Postgresql 데이터베이스에 접근해서 psql로 계층형 쿼리 조회하고 그 결과를 csv 파일로 저장해서 로컬로 가져오기 계층형 쿼리 상품 p 가 있고, 아이디는 product_id, 상위 product는 parent_product_id 라고 할 때, 아래와 같이 계층형 쿼리를 작성 할 수 있습니다. with recursive search_product(product_id) as ( select p.* from product p where product_id =21306 union all select p.* from product p, search_product sp where k.parent_product_id = sp.product_id ) select * from searc..
rownum Postgres 에서도 Oracle의 rownum을 사용 할 수 있을까요? 가능합니다. row_number()를 이용하면 됩니다. 그럼 아래 처럼 그냥 호출 하면 rownum을 사용 할 수 있을 것 같지만.. select row_number(), i.* from item i; 윈도우 함수 호출에는 OVER 절이 필요함 이라는 에러가 나옵니다. 딱히 조건을 걸 생각이 없었지만 그래도 over절은 넣어줘야 하나 봅니다. 그럼 이렇게 작성 한다면 rownum을 사용 할 수 있습니다. as로 alias 를 주는것도 좋겠네요. select row_number() over(), i.* from item i; Subquery를 통한 update 이제 rownum을 받아 왔으니, 서브쿼리에서 rownum을..