Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

눈덩이의 테크블로그

postgreSQL에 테이블 만들기 (account, post, comment, image) 본문

TIL

postgreSQL에 테이블 만들기 (account, post, comment, image)

nundung 2023. 12. 27. 15:35

$$: PL/pgSQL 코드를 감싸는 따옴표로, 여러 줄의 PL/pgSQL 코드를 정의할 때 사용됩니다.
LANGUAGE plpgsql;: 이 함수가 PL/pgSQL 언어로 작성되었음을 명시합니다.

CREATE TABLE account (
    idx SERIAL PRIMARY KEY,
    id VARCHAR(20) NOT NULL UNIQUE,
    pw VARCHAR(20) NOT NULL,
    name VARCHAR(20) NOT NULL,
    phonenumber VARCHAR(15) NOT NULL UNIQUE,
    email VARCHAR(24) NOT NULL UNIQUE,
    is_admin BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE post (
    idx SERIAL PRIMARY KEY,
    account_idx INT NOT NULL,
    title VARCHAR(300) NOT NULL,
    content VARCHAR(3000) NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    modified_at TIMESTAMP DEFAULT NULL,
    FOREIGN KEY (account_idx) REFERENCES account(idx)
);

CREATE TABLE comment (
    idx SERIAL PRIMARY KEY,
    post_idx INT NOT NULL,
    account_idx INT NOT NULL,
    content VARCHAR(600) NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    modified_at TIMESTAMP DEFAULT NULL,
    FOREIGN KEY (post_idx) REFERENCES post(idx),
    FOREIGN KEY (account_idx) REFERENCES account(idx)
);

CREATE TABLE image (
    idx SERIAL PRIMARY KEY,
    post_idx INT NOT NULL,
    account_idx INT NOT NULL,
    path VARCHAR(100) NOT NULL,
    created_at TIMESTAMP NOT NULL,
    FOREIGN KEY (post_idx) REFERENCES post (idx),
    FOREIGN KEY (account_idx) REFERENCES account(idx)
);

CREATE OR REPLACE FUNCTION update_modified_timestamp()
RETURNS TRIGGER AS $$
BEGIN
    NEW.modified_at = CURRENT_TIMESTAMP;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER update_post_modified_timestamp
BEFORE UPDATE ON post
FOR EACH ROW
EXECUTE FUNCTION update_modified_timestamp();

CREATE TRIGGER update_comment_modified_timestamp
BEFORE UPDATE ON comment
FOR EACH ROW
EXECUTE FUNCTION update_modified_timestamp();

CREATE OR REPLACE FUNCTION update_timestamp()
RETURNS TRIGGER AS $$
BEGIN
    NEW.created_at = CURRENT_TIMESTAMP;
    NEW.modified_at = NULL;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER update_post_timestamp
BEFORE INSERT ON post
FOR EACH ROW
EXECUTE FUNCTION update_timestamp();

CREATE TRIGGER update_comment_timestamp
BEFORE INSERT ON comment
FOR EACH ROW
EXECUTE FUNCTION update_timestamp();

 

 

'TIL' 카테고리의 다른 글

난수생성 암호문 crypto  (0) 2023.12.30
환경변수  (0) 2023.12.29
트리거 문법 이용하기  (0) 2023.12.23
파람스랑 쿼리 차이  (0) 2023.12.23
디스트럭쳐링  (0) 2023.12.22