Skip to content

PostgreSQL:AlterTable

SERIAL 생성/제거 방법

SERIAL은 Sequance도 같이 생성된다.

컬럼 이름 변경 방법

ALTER TABLE recc_user RENAME COLUMN is_admin TO admin;

특정 컬럼 NOT NULL 설정

ALTER TABLE public.a4y_service ALTER COLUMN "time" SET 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.progress alter column expired_at set default now() + '1 day'::interval;

컬럼 이름 변경

ALTER TABLE public.recc_permission RENAME COLUMN "name" TO slug;

컬럼 추가

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;

컬럼 제거

ALTER TABLE recc_port DROP COLUMN description;

제약조건 제거

ALTER TABLE recc_port DROP CONSTRAINT recc_port_pkey;  -- remove `PRIMARY KEY`

두 가지 키를 유니크로 제약조건 추가

-- Unique constraint `number, sock` in `recc_port` table.
ALTER TABLE recc_port
ADD CONSTRAINT recc_port_number_sock_key
UNIQUE (number, sock);

PRIMARY KEY 생성/제거 방법

create table recc_port (
    number INTEGER 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 만 제거하면 된다.

ALTER TABLE recc_port DROP CONSTRAINT recc_port_pkey;

그럼 결국 다음과 같은 테이블만 남게 된다.

create table recc_port (
    number INTEGER NOT NULL,
    ...
);

ON DELETE CASCADE

ON DELETE CASCADE 옵션을 적용하면 부모 테이블에서 row 를 삭제할 경우 연결된 자식 테이블의 row 가 함께 삭제됩니다. 연결된 데이터를 한 번에 지울 수 있어 데이터의 관리가 편리해지고 일관성을 유지할 수 있습니다.

Syntax

ALTER TABLE 테이블명 ADD CONSTRAINT 포린키이름 FOREIGN KEY 자식속성 REFERENCES 부모테이블명(자식속성이 참고할 부모속성) ON DELETE CASCADE;

예시:

ALTER TABLE feed ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES user(id) 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
);

See also

Favorite site