본문 바로가기

Database/Postgresql

(7)
[Postgresql] Synology Docker Postgresql 설치하기 시놀로지 720+ 도커 상에서 Postgresql 을 설치해보고 간단하게 데이터베이스, 스키마, 테이블을 만들어본다. 우선 시놀로지 도커 -> Registry 로 들어가서 postgres 로 검색하고 아래 이미지를 다운로드 받는다. 다운로드를 실행하고 완료되면 도커 -> Image 항목에 다운로드 목록에 보이게 된다. 이미지를 선택한 후 Launch를 수행해서 Container 를 만들어 본다. Network설정은 기본 bridge로 선택된 것 확인하고 다음으로 진행한다. 일반 설정은 그대로 가고 하단 Advanced Settings으로 들어간다. 초기 Launch 시 사용할 root 계정을 아래와 같이 입력해준다. 로컬 네트웍에서 시놀로지 도커 컨테이너에 접속할 Port를 지정해준다. 최종 설정 Sum..
[Postgresql] Sql 쿼리 수행 시간 늘리기 Postgresql 에서 수행시간이 긴 쿼리를 실행하면 쿼리 수행시간을 초과했다는 메세지가 출력 될 때가 있다. Postgresql에 기본으로 설정된 쿼리 수행시간이 있는데 이 기준을 넘어서서 쿼리를 수행했기 때문이다. 설정값은 아래와 같이 Postgresql DB 쿼리를 수행하면 볼 수 있다. 아래는 pg_settings 테이블에서 statement로 시작하는 레코드를 검색한 결과이다. 결과는 기본 30초로 설정되어 있는것을 볼 수 있다. 설정된 Timeout값을 현재 연결된 세션에서 변경하고자 한다면 다음 명령어를 수행하면 된다. 아래는 10분으로 타임아웃값을 설정한 예시이다. 위에서 설정한대로 적용되었는지 확인하기 위해 다시한번 pg_settings값을 조회해 본다. 10분으로 타임아웃 값이 변경되..
[Postgresql] max_connection 늘리기, 현재 connection 확인 (windows) postgresql db 를 실행하다 보면 connection pool이 다 차서 애플리케이션에서 연결을 못한다는 메세지를 볼 때가 있다. 현재 설치되어 있는 postgresql db의 설정값들을 쿼리로 쉽게 알아볼 수 있다. 현재 DB 설정값 조회 Heidisql 등의 DB Client 툴을 실행 시키고 Postgresql db에 접속 한다. 아래 쿼리를 수행하면 현재 설정되어있는 DB system 설정을 볼 수 있다 SELECT * FROM pg_settings; 여러가지 설정 중에 max_connections 값이 최대 동시 접속수를 지정하는 값이다. 기본값은 100으로 설정되어 있음을 볼 수 있다. 현재 사용되는 connection 정보 조회 최대 동시 접속 값은 찾았으나 여러 어플리케이션 수행중..
[Postgresql] RETURNING 활용 예제 Postgresql의 RETURNING 문을 사용하면 insert, delete, update 시 수행된 행을 return 받을 수 있고 이를 응용하여 여러 step을 하나의 쿼리로 수행해 볼 수 있다. 단일 Insert 예제 테스트 전 테이블 내용 CREATE TABLE users ( user_id serial PRIMARY KEY, NAME VARCHAR(20) ) CREATE TABLE users_backup ( user_id serial PRIMARY KEY, NAME VARCHAR(20) ) Insert returning 예제 WITH rows AS ( INSERT INTO users VALUES (10, '테스트') RETURNING user_id ) INSERT INTO users_backu..
[Postgresql] Upsert 구현 (insert ~ on conflict) DB 구현시 많이 쓰는 패턴중에 하나가 해당 row가 있으면 update, 없으면 insert를 하는 패턴일 것이다. Oracle의 경우는 merge ~ into 구문을 통해 한번의 명령으로 해당 로직을 구현할 수 있다. Postgres에서도 동일한 명령이 있지 않을까? 아래와 같이 insert ~ on conflict 구문을 활용하면 구현할 수 있다. 문법은 다음과 같다. INSERT INTO [TABLE] (COLUMN1, COLUMN2, ...) VALUES (VALUE1, VALUE2, ...) ON CONFLICT ([column_name / ON CONSTRAINT constraint_name/ WHERE predicate]) [DO NOTHING] [DO UPDATE SET column1 =..
[Postgresql] auto increment, sequence 처리방법 DB를 개발할때 초반에 고민하는 것중에 하나가 행 입력시 증가하는 일련번호, 시퀀스 번호를 어떻게 동작시킬것인가이다. Postgresql도 여러 방법으로 시퀀스 번호를 동작시키는 메커니즘을 가지고 있다. SEQUENCE 객체 활용 전통적인 방법으로 따로 SEQUENCE 객체를 생성하고 테이블에 붙여주는 방법이다. postgresql 기본적인 시퀀스 생성 CREATE SEQUENCE seq_user_id INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1; 시퀀스를 생성한 후에는 ALTER명령으로 속성을 변경할 수도 있다. 아래 링크에서 기능 설명이 되어 있다. ALTER SEQUENCE [ IF EXISTS ] 이름 [ AS 자료형 ]..
[Postgresql] Postgres db dump, restore 데이터 베이스를 개발, 또는 운영 중에 백업은 중요한 작업중에 하나이다. 본 절에서는 postgres 데이터베이스를 통으로 바이너리 레벨로 dump하고 이를 그대로 restore하는 명령을 살펴본다. pg_dump 명령어 옵션 PS C:\Program Files\PostgreSQL\13\bin> .\pg_dump.exe --help pg_dump 프로그램은 데이터베이스를 텍스트 파일 또는 기타 다른 형태의 파일로 덤프합니다. 사용법: pg_dump [옵션]... [DB이름] 일반 옵션들: -f, --file=파일이름 출력 파일 또는 디렉터리 이름 -F, --format=c|d|t|p 출력 파일 형식(사용자 지정, 디렉터리, tar, 일반 텍스트(초기값)) -j, --jobs=개수 덤프 작업을 병렬 처리 ..