[PostgreSQL] 테이블 생성 시 Auto Increment 적용

MySQL에서는 테이블 생성 시 Auto Increment 옵션이 존재하지만 PostgreSQL에서는 Auto Increment라는 옵션은 어디에도 찾아볼 수 없습니다. MySQL과는 다르게 Sequence를 사용하기 때문인데 검색해보면 Sequence를 생성하고 테이블 CREATE 문에 nextval(‘시퀀스명’) PRIMARY 옵션을 넣는 등 상대적으로 귀찮은 방법을 사용하는 것으로 확인됩니다.

좀 더 검색해보니 간단한 방법이 있었고 아래와 같이 Auto Increment로 적용할 컬럼에 serial 타입으로 지정해주면 Sequence를 자동으로 세팅해줍니다.

serial은 데이터 타입이 아닌 옵션에 가깝다고 보면 됩니다. DDL에서 serial 타입으로 지정 후 테이블을 생성하면 int 타입에 nextval 옵션이 세팅됩니다.

serial의 데이터 타입은 3가지로 나뉩니다.

DATA TYPESIZEMAX VALUE
SMALLSERIAL2 Bytes32,767
SERIAL4 Bytes2,147,483,647
BIGSERIAL8 Bytes9,223,372,036,854,775,807

아래는 DDL 예시 입니다.

CREATE TABLE public.SAMPLE_TABLE (
	SEQ serial NOT NULL, -- AUTO INCREMENT
	COLUMN1 int4 NULL,
	COLUMN2 varchar NULL,
	...
	CREATE_AT date NULL
);
COMMENT ON TABLE public.SAMPLE_TABLE IS '예제 테이블';

[CI] Session 데이터를 DB로 저장하는 방법

Session은 일반 적으로 파일로 저장하거나 DB에 저장할 수 있습니다. 기본 값으로는 파일로 저장되도록 설정이 되어있습니다.

이를 DB로 저장하는 방법을 소개드립니다.

1. /application/config/config.php 파일을 열어 아래 내용과 같이 수정 합니다.

sess_table_name은 ci_session으로 이름을 달리하고 싶은 경우 변경하셔도 무방합니다. 단, sess_cookie_name 의 값도 변경된 이름과 동일하게 맞춰주셔야 합니다.

2. ci_session 테이블을 만듭니다. 저장될 DB 테이블을 설정하셨다면 테이블이 필요하겠죠. ci_session 테이블의 스키마는 아래와 같습니다.

3. 로그인을 테스트해봅니다. 로그인을 시도해본 후 ci_session 테이블에 데이터가 쌓이는지 확인해보는 것으로 마무리가 됩니다.

 

 

 

[Linux] 파일시스템, DB 백업 쉘스크립트

간단하게 작성해본 쉘스크립트입니다.

일자별로 시스템 전체와 DB를 백업합니다. 시스템을 통으로 백업하는데 DB를 다시 따로 백업하는 이유는 DB 장애가 발생하는 시점에서 빠르게 DB만 복구 할 수 있게 하기 위해서 입니다. 물론 시스템 전체를 백업한다는 것은 동일 환경의 서버 환경에서 복구가 가능하다는 점이고 다른 환경의 서버에서는 문제가 발생 할 수있습니다.

기본적으로 /proc, /lost+found, /mnt, /media, /sys, 그리고 백업 파일이 저장될 /backup 디렉터리는 제외하고 백업됩니다. (각 상황에 맞춰 제외 디렉터리는 설정하면 됩니다.)

쉘스크립트를 실행하게 되면 /backup/ 디렉터리에 오늘 날짜로 디렉터리가 생기고 시스템 백업본 tar.gz 파일과 sql 덤프 파일이 생성됩니다.

이것을 주기적으로 백업을 돌리기 위해서는 crontab을 이용해야겠죠.

crontab -e 를 이용해 cron을 아래와 같이 등록합니다.

저 같은 경우는 매월 30일 00시 01분에 실행되도록 등록을 시켰고 bakcup.log 파일을 남기도록 설정 했습니다.

[Linux] 간단한 MySQL DB 백업과 복원

덤프파일 백업
# mysqldump -u 사용자아이디 -p 백업받을디비 > 백업파일명

덤프파일로 복원
# mysql -u 사용자아이디 -p 복구할디비 < 백업파일명

복원된 데이터베이스 확인
1. # mysql -u 사용자아이디 -p 접속할디비
2. > show databases;