[DB] PostgreSQL

clo승·2023년 7월 26일
0

PostgreSQL 이란?

  • PostgreSQL이란 객체 관계형 데이터베이스(ORDBMS) 중 하나로 무료로 제공되고 있는 데이터베이스

  • 즉, 기본적으로는 관계형 데이터베이스(RDBMS)이지만 객체 데이터베이스와 연관되는 기능(ex:테이블 상속 및 함수 오버 로딩) 포함

  • 1985년 개발을 시작해서 1996년에 첫 출시 / Oracle DB와 유사함

  • 2022년 12월 기준 전 세계 DB 순위 4위


ORDBMS 이란?

  • ORDBMS(Object-Relational DataBase Management System)는 객체 지향 데이터베이스 모델을 가진 관계형 데이터베이스 관리 시스템

  • RDBMS와는 데이터의 저장 및 접근 방법에 대한 관점의 차이가 있다.

  • ORDBMS는 데이터가 객체로 저장된 것처럼 작동함


장/단점

장점

  • 표준 SQL을 준수
  • 다른 DB에 비해 트랜잭션 및 ACID가 월등히 뛰어남
  • 오픈 소스 및 커뮤니티가 이끄는 데이터베이스 (라이선스에 대한 비용 문제가 없음)
  • 안전성 및 신뢰성
  • 확장성이 뛰어남
  • 가볍게 돌아가고, 대용량 처리에도 큰 문제가 없음
  • PostgreSQL만의 독창적인 자료형이 있음
  • jsonb, json 형식으로 저장 가능
  • Oracle DB에 버금가는 통계 함수를 제공

단점

  • CRUD 성능이 RDBMS보다 좋지 않음
  • 독창적인 자료형 및 문법이 장점이지만 단점이 될 수 있음(새로운 개발자를 가르치는 비용 발생)
  • 메모리 성능이 떨어짐

설치방법

설치방법 참고하기
참고자료2
(참고로 나는 13버전을 설치했다)

비밀번호는 입력이 안된 것 처럼 보여도 걱정하지 말고 엔터를 누르자!

그 뒤에 나오는 stack builder는 설치 할 필요 없다


VSCode 연동하기

python 연동하기!1
python 연동하기!2
nest 연동하기!1
nest 연동하기!2

nest공식문서

나의 최종 코드

// app.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigValidator } from '../config/db.config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AuthModule } from './auth/auth.module';
import { ContentsModule } from './contents/contents.module';

@Module({
  imports: [TypeOrmModule.forRoot(ConfigValidator), AuthModule, ContentsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
// config/db.config.ts

import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import 'dotenv/config';

export const ConfigValidator: TypeOrmModuleOptions = {
  type: 'postgres',
  host: process.env.PG_HOST,
  port: parseInt(process.env.PG_PORT),
  username: process.env.PG_USERNAME,
  password: process.env.PG_PASSWORD,
  database: process.env.PG_DB,
  entities: [__dirname + '/../**/*.entity.{js,ts}'],
  synchronize: true,
};

명령어 참고

테이블생성, 삭제 등의 명령어 참고

예시)

CREATE TABLE "User" (
    "id" SERIAL PRIMARY KEY,
    "email" VARCHAR(200) NOT NULL,
    "name" VARCHAR(200) NOT NULL,
    "password" VARCHAR(200) NOT NULL,
    "level" INT,
    "created_at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE "File" (
    "id" SERIAL PRIMARY KEY,
    "original_name" VARCHAR(200) NOT NULL,
    "name" VARCHAR(200) NOT NULL,
    "length" INT,
    "topic" VARCHAR(200),
  	"sentence" TEXT,
    "created_at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
);

profile
무엇이든 해내는 사람

1개의 댓글

comment-user-thumbnail
2023년 7월 26일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기