postgresql와 nestJS 연결 처음 해보는 중인데
삽질을 너무 많이 했다.
처음이라 더 어려운거겠지...?
https://www.postgresql.org/download/
사이트에서 postgres 다운받는 방법과 brew로 설치하는 방법이 있는 것 같다.
결국 brew로 설치한 후 비밀번호가 계속 틀려 삽질하다가,, uninstall
하고 다시 설치하니까 접속이 됐다.
brew install postgresql
postgres -V
제대로 설치가 되었는지 버전 확인하기
sudo -u postgres psql
로 사용자 비밀번호와 설정한 비밀번호를 입력한다.
import { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions';
const config: PostgresConnectionOptions = {
type: 'postgres',
host: 'localhost',
port: 5432,
username: '설정한 username',
password: '설정한 비밀번호',
database: 'DB 이름',
entities: [__dirname + '/**/*.entity{.ts, .js}'],
synchronize: true,
};
export default config;
을 이렇게 설정해줬을 때
ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)...
QueryFailedError: permission denied for schema public
계속 이 에러가 나서 어떻게 해결해주어야 하나 찾아봤다.
GRANT ALL PRIVILEGES ON SCHEMA public TO postgres;
PostgreSQL에서 public 스키마에 대한 모든 권한을 postgres 사용자에게 부여하는 SQL 명령인데 이를 사용하면 DB 연결이 성공적으로 될 것이고
synchronize
옵션을 true로 입력한 까닭에,
entity 파일에 설정한 컬럼들이 \dt
를 했을 때 뜰 것이다.
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity({ name: 'tags' })
export class TagEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
}
이렇게 설정해주니
\dt
는 PostgreSQL에서 데이터베이스 내의 테이블 목록을 조회하는 명령인데 설정한 tags 테이블이 조회되는 것을 알 수 있다.
\d tags
를 통해서는 tags 테이블의 상세 정보를 조회할 수 있다.
마이그레이션은 데이터베이스 스키마의 변경 사항을 관리하고 버전 관리하는 방법.
마이그레이션을 사용하는 이유는 데이터베이스 변경 내역을 안전하게 저장하고 관리하기 위해서. 마이그레이션 파일에는 변경 작업에 대한 설명이 포함되어 있으며, 이를 사용하여 데이터베이스를 업데이트. 이를 통해 변경 이력을 추적하고, 데이터베이스의 이전 상태와 새로운 상태를 파악 가능.
반면에 synchronize
옵션은 마이그레이션 없이 개발 중에 데이터베이스 스키마를 자동으로 동기화하는 기능 -> 이 옵션을 사용하면 개발 시 빠르게 결과를 얻을 수 있지만, 프로덕션 환경에서는 데이터 손실이 발생할 수 있으므로 안전하지 않다.