라벨이 postgreSQL인 게시물 표시

docker-compose NodeJS(NestJS) 적용하기 -2

이미지
 이번에는 기존의 docker-compose를 이용하여 server에 postgers를 연결하도록 하겠습니다. 이전글 : docker-compose NodeJS(NestJS) 적용하기 -1 진행하기 전에 Docker와 Docker-Compose가 설치되 있어야 하고 OS는 Ubuntu(Linux)를 사용합니다.  docker install by terminal : ubuntu 20.04 docker-compose Ubuntu Install 먼저 해당 프로젝트에 '@nestjs/typeorm' 'pg'를 yarn으로 설치해 줍니다. $ yarn add @nestjs/typeorm pg typeorm copy 해당 typeorm 및 pg연결은 아래 링크를 참고해 주시기 바랍니다. mysql이라 하더라도 pg(postgres)으로 변경하면 됩니다. 링크1 : nest js -5 Connect to DataBase(mysql) with TypeORM 'docker-compose'파일에 변경사항이 있으니 참고해 주시기 바랍니다. --build를 추가하여 변경된 코드를 반영합니다. $ docker-compose up --build -d copy docker-compose up --build -d 이후 진행을 하면 database와 정상적으로 연결된 것을 알수 있습니다. 해당 gitHub(branch : docker-compose_NodeJS_NestJS_적용하기-1 -> docker-compose_NodeJS_NestJS_적용하기-2) 이후글 : docker-compose NodeJS(NestJS) 적용하기 -3

Docker PostgreSQL Container 생성하고 사용하기

이미지
 보통 DBMS를 셋팅하는데 많은 시간이 걸립니다. 특히 PostgreSQL을 처음 셋팅할때는 기본이 Local에서만 접속할수 있고 config파일을 수정하고 재시작 해야지만이 외부에서 접속이 가능합니다. 위 작업은 기본적으로 Docker가 설치되 있어야 합니다. 설치방법은 아래 링크를 참고해 주시기 바랍니다. 링크 : docker install by terminal : ubuntu 20.04 1) 도커 컨테이너로 postgres생성하기 - postgresql 이미지를 이용하여 DataBase 컨테이너를 만들기 $ sudo docker run -p [접속할려는 포트]:5432 --name [컨테이너 이름] -e POSTGRES_PASSWORD=[비밀번호] -e TZ=Asia/Seoul -d postgres:12 copy 사진1) postgres 컨테이너 생성 사진2) postgres 접속 TZ=Asia/Seoul은 서울 타임존을 말한다. 필요시 다른곳으로도 옮길수 있습니다. 그리고 '-d postgres:12'은 postgres버전 12를 사용한다는 뜻입니다. 다른버전도 사용할수 있습니다. 그리고 컨테이너 안에 있는 데이터는 '/var/lib/postgresql/data'안에 있습니다. 컨테이너 밖으로 저장해야 할시 '-v [로컬경로]:/var/lib/postgresql/data'를 컨테이너 생성할때 추가하면 됩니다. 더 좋은점은 초기 셋팅과 달리 외부에서도 DB에 접근이 가능하다는 것입니다.

SQL Postgres의 다중 tag검색하기 Many to Many

이미지
  위 사진처럼 커피(coffees)와 향(flavor) 테이블 사이에 Join 테이블이 있습니다. 해당 Join테이블은 한개의 row에 하나의 flavor만 조회가 가능합니다. 만약 2개 이상의 향이 있는 커피를 찾는다면 아래 쿼리문을 사용해야 합니다. -- SQL Query1  SELECT DISTINCT title   FROM coffees JOIN coffees_flavors_flavor ON coffees.id = "coffeesId"                 JOIN flavor ON flavor.id = "flavorId"  WHERE flavor.name = 'choco' OR flavor.name = 'banana'; Query1을 사용하면 Join, OR문을 이용하여 choco 또는 banana가 있는 레코드를 조회합니다. 문제는 choco는 있지만 banana가 없거나 반대의 경우도 모두 조회를 한다는 것입니다. 이를 위해서 GROUP BY를 사용하며 해당 갯수를 count해서 조회해야 합니다. -- SQL Query2   SELECT DISTINCT title, COUNT(*) as count   FROM coffees JOIN coffees_flavors_flavor ON coffees.id = "coffeesId"                 JOIN flavor ON flavor.id = "flavorId"  WHERE flavor.name = 'choco' OR flavor.name = 'banana'  GROUP BY title  HAVING flavor.count = 2; Query2를 사용하면 구할려고 하는 해당 title을 조회할수 있습니다.

PostgreSQL Column(컬럼)의 속성을 배열로 하고 생성, 조회, 수정, 삭제하기

이미지
 postgres의 컬럼 설정에서는 배열을 넣을수가 있다.  컬럼을 생성할때 위 사진처럼 컬럼 arr을 숫자형 배열로 지정할수 있다 하나의 레코드를 삽입하면 위 사진처럼 id및 arr이 배열로 저장되게 된다. 이때 동일한 배열을 찾을때 WHERE을 이용하여 찾는다. 하지만 모든 배열을 아는것이 아니면 위방법으로 레코드를 조회할수 없다. arr을 텍스트로 변환한 다음 LIKE을 이용하여 조회를 해야 합낟. 이때 arr은 배열에서 문자열로 조회할때만 전환된다. 문자열 배열또한 만들수 있다. 문자열 배열또한 생성, 수정 삭제, 조회가 가능하며 LIKE을 사용할려면 조회할 배열을 text로 변환후 확인해야 한다.

PostgreSQL Extension(확장 모듈) 설치하기 : UUID

이미지
이번 postgres을 사용하다가 해당 쿼리문을 사용할수 없어서 확인하다가 확장 모듈이 필요하다는 것을 알고 기록을 위해 블로그로 작성하였습니다.  테이블을 생성하는 도중 column의 데이터 타입을 uuid_generate_v4()로 설정을 하고 테이블을 생성할려고 할때 아래 사진과 같이 에러가 발생했습니다. 사진1) 에러 상황 위 에러가 발생하면 가장 먼저 해당 extension이 사용 가능하지 확인을 해야 합니다. psql에서 설치 가능한 extension을 확인한다. $ SELECT * FROM pg_available_extensions; copy 사진2) 설치 가능한 extension 사진2에서 가장 마지막에 있는 'uuid-ossp'이 있습니다. 이 확장 모듈이 uuid생성을 도와줍니다. 이제 'uuid-ossp'를 설치해 보도록 하겠습니다. psql에서 extension가 존재하지 않을때 설치. $ CREATE EXTENSION IF NOT EXISTS "extension name"; copy 위 블로그에서는 uuid를 생성할수 있어야 하기 때문에 'uuid-ossp'를 설치하도록 하겠습니다. 해당 sql문은 CREATE EXTENSION IF NOT EXISTS "uuid-ossp" 으로 실행하면 됩니다. 사진3) "uuis-ossp" 설치 사진4) 생성 완료 원하던 쿼리문이 정상적으로 실행 된것을 확인할수 있었습니다.  아래는 실행한 해당 쿼리문 입니다 CREATE TABLE users (   id UUID NOT NULL DEFAULT uuid_generate_v4(),   email VARCHAR NOT NULL,   password VARCHAR NOT NULL,   username VARCHAR NOT NULL,   socialSignUP Boolean NOT NULL DEFAULT false,   soc...

Error : PostgreSQL에서 세션 접속을 강제 종료하기(ERROR: database "DB Name" is being accessed by other users)

이미지
 PostgreSQL작업을 하다보면 DB를 지워야 할때가 있습니다. 그런데 아래와 같은 에러가 발생할때가 있습니다. 사진1) DB삭제시 발생에러 사진1과 같이 다른곳에서 DB의 세션으로 묶여있으면 그 세션을 종료할때까지 DB를 삭제할수가 없습니다. 그래서 강제 종료를 해야 합니다. PostgreSQL세션 강제 종료하기 $ SELECT      pg_terminate_backend(pid)  FROM      pg_stat_activity  WHERE      -- don't kill my own connection!     pid <> pg_backend_pid()     -- don't kill the connections to other databases     AND datname = 'test2'; copy 사진2) DB강제 접속 종료 이제 접속이 차단된 상태에서 DB를 지우도록 하겠습니다. 사진3) DB 정상 제거 이제 DB를 지울수가 있습니다. 위 코드는 DB 이름이 test1인 경우로 진행한 것입니다. 필요에 따라 변경이 가능합니다.

PostgreSQL CLI

  Ubunt Terminal을 이용하여 PostgreSQL제어 1. DB기능 1) Dump파일 받기 - 해당 RDS에 설치된 postgres서버의 Dump파일을 받습니다(AWS의 RDS에서 터미널로 받음), sql로 받음 $ pg_dump -h [RDS address] -U [DB user] [DB name] > [file name] copy 2) Dump파일 업로드하기 - 해당 RDS에 설치된 postgres서버의 Dump파일을 업로드 합니다.(AWS의 RDS의 DB는 비어있어야 합니다.), sql로 백업 $ psql -h [RDS address] -U [DB user] -d [upload DB name] -f [file name] copy tar확장자로 daump파일 백업하고 업로드 하기(click) 1) Dump파일 받기 - 해당 RDS에 설치된 postgres서버의 Dump파일을 받습니다(AWS의 RDS에서 터미널로 받음), tar로 받음 $ pg_dump -U [DB user] -h [PostgreSQL address] -p [Port Number] -d [DB name] -f [file path with .tar] -F t -W copy OR Including Password $ PGPASSWORD="password" pg_dump -U [DB user] -h [PostgreSQL address] -p [Port Number] -d [DB name] -f [file path with .tar] -F t -W copy 2) Dump파일 백업 - 해당 RDS에 설치된 postgres서버의 Dump파일을 업로드(AWS의 RDS에서 터미널로 받음), tar로 업로드 주의 : 해당 cli는 기존의 DB의 테이블을 지우고 다시 백업합니다. $ pg_restore -cC -h [Pos...