PostgreSQL:AlterTable
SERIAL 생성/제거 방법
SERIAL은 Sequance도 같이 생성된다.
컬럼 이름 변경 방법
특정 컬럼 NOT NULL 설정
특정 컬럼 NOT NULL 설정 및 기본값 설정
ALTER TABLE recc_info ALTER COLUMN value SET NOT NULL;
ALTER TABLE recc_info ALTER COLUMN value SET DEFAULT '';
Timstampz 기본값에 오늘 날짜 + 1DAY 하기
컬럼 이름 변경
컬럼 추가
ALTER TABLE public.recc_permission ADD "name" varchar(128) NULL;
ALTER TABLE public.recc_permission ADD hidden bool NOT NULL DEFAULT false;
ALTER TABLE public.recc_permission ADD "lock" bool NOT NULL DEFAULT false;
컬럼 제거
제약조건 제거
두 가지 키를 유니크로 제약조건 추가
-- Unique constraint `number, sock` in `recc_port` table.
ALTER TABLE recc_port
ADD CONSTRAINT recc_port_number_sock_key
UNIQUE (number, sock);
PRIMARY KEY 생성/제거 방법
위와 같은 테이블을 생성하면 다음과 같은 방법의 alter table 쿼리로 만들어진다.
ALTER TABLE recc_port ADD "number" int4 NOT NULL;
ALTER TABLE recc_port ADD CONSTRAINT recc_port_pkey PRIMARY KEY (number);
따라서 PRIMARY KEY만 제거하고 싶다면 CONSTRAINT 만 제거하면 된다.
그럼 결국 다음과 같은 테이블만 남게 된다.
ON DELETE CASCADE
- SQL 예제로 배우는 PostgreSQL (ver 0.91a): 중급편
- FOREIGN KEY 에 ON DELETE CASCADE 제약 사항 추가하기
- How to use the PostgreSQL DELETE CASCADE
ON DELETE CASCADE
옵션을 적용하면 부모 테이블에서 row 를 삭제할 경우 연결된 자식 테이블의 row 가 함께 삭제됩니다. 연결된 데이터를 한 번에 지울 수 있어 데이터의 관리가 편리해지고 일관성을 유지할 수 있습니다.
Syntax
ALTER TABLE 테이블명 ADD CONSTRAINT 포린키이름 FOREIGN KEY 자식속성 REFERENCES 부모테이블명(자식속성이 참고할 부모속성) ON DELETE CASCADE;
예시:
CREATE TABLE 적용 방법
CREATE TABLE IF NOT EXISTS group (
uid SERIAL PRIMARY KEY,
slug VARCHAR(128) UNIQUE NOT NULL,
name VARCHAR(128),
description TEXT,
features VARCHAR(128)[],
visibility INTEGER NOT NULL DEFAULT 0,
extra JSONB,
created_at TIMESTAMPTZ NOT NULL,
updated_at TIMESTAMPTZ
);
CREATE TABLE IF NOT EXISTS project (
uid SERIAL PRIMARY KEY,
group_uid INTEGER NOT NULL
REFERENCES group (uid)
ON DELETE CASCADE
ON UPDATE CASCADE,
slug VARCHAR(128) NOT NULL,
UNIQUE(group_uid, slug),
name VARCHAR(128),
description TEXT,
features VARCHAR(128)[],
visibility INTEGER NOT NULL DEFAULT 0,
extra JSONB,
created_at TIMESTAMPTZ NOT NULL,
updated_at TIMESTAMPTZ
);