날짜: 2024-03-20
public
# postgres 서버 접속
psql -h HOST -p PORT -U USER -d DB_NAME
-- COLLATE 기본설정값 조회
SHOW lc_collate;
-- 현재유저(나)의 권한 조회
SELECT * FROM pg_roles WHERE rolname = current_user;
-- 접속가능한 데이터베이스 목록 조회
SELECT datname FROM pg_database
WHERE has_database_privilege(datname, 'CONNECT');
-- 접속한 DB 의 모든 테이블 조회
SELECT tablename FROM pg_tables WHERE schemaname = 'public';
-- 특정 테이블의 구조(컬럼 정보) 조회
SELECT
column_name,
data_type,
character_maximum_length,
is_nullable,
column_default
FROM
information_schema.columns
WHERE
table_name = 'your_table_name';
-- 스키마 까지 명시할 필요가 있다면 조건 추가
AND table_schema = 'your_schema_name';
-- 테이블의 constraints 조회
SELECT constraint_name, constraint_type
FROM information_schema.table_constraints
WHERE table_name = '테이블명' AND table_schema = '스키마명';
-- 실행 중인 쿼리 조회
SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state
FROM pg_stat_activity
WHERE state = 'active';
-- 실행 중인 쿼리 강제 종료 (by pid)
SELECT pg_terminate_backend(123);
-- 다중 pid 강제 종료
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE pid IN (123, 456);
-- 실행 시간이 1분을 초과한 쿼리 강제 종료
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE
state = 'active' AND
now() - query_start > '1 minutes'::interval AND
usename != 'important_user';
-- 테이블 생성
CREATE TABLE sample_contents (
id integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
title VARCHAR(20) NOT NULL,
description VARCHAR(50) NULL,
event_id INTEGER NOT NULL,
thumbnail_url VARCHAR(255) NOT NULL,
notification_status CHAR(5) NOT NULL DEFAULT 'NS_01',
sample1_datetime TIMESTAMP WITH TIME ZONE NULL,
sample2_date TIMESTAMP WITH TIME ZONE NOT NULL,
sample3_time TIMESTAMP WITH TIME ZONE NOT NULL,
is_visible BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);
-- Comments
COMMENT ON COLUMN sample_contents.title IS '제목';
COMMENT ON COLUMN sample_contents.description IS '설명';
COMMENT ON COLUMN sample_contents.event_id IS '외래키 event.id';
COMMENT ON COLUMN sample_contents.thumbnail_url IS '대기중 이미지';
COMMENT ON COLUMN sample_contents.notification_status IS '알림 발송 상태 (NS_01:대기, NS_02:전송중, NS_03:완료, NS_04:실패)';
COMMENT ON COLUMN sample_contents.sample1_datetime IS '샘플 날짜 (시간포함)';
COMMENT ON COLUMN sample_contents.sample2_date IS '샘플 날짜 (시간제외)';
COMMENT ON COLUMN sample_contents.sample3_time IS '샘플 시간';
COMMENT ON COLUMN sample_contents.is_visible IS '노출 여부';
COMMENT ON COLUMN sample_contents.created_at IS '등록 날짜';
COMMENT ON COLUMN sample_contents.updated_at IS '수정 날짜';
-- 인덱스 생성 (일반, 유니크)
CREATE INDEX idx_sample_contents__created_at ON sample_contents (created_at);
CREATE UNIQUE INDEX uidx_sample_contents__id__event_id ON sample_contents (id, event_id);
--- 컬럼 추가
ALTER TABLE users ADD COLUMN description VARCHAR(255);
COMMENT ON COLUMN users.description IS '사용자 설명';
-- 인덱스 삭제
DROP INDEX user_name_index;
--- Foreign Key Constraint 제거
ALTER TABLE orders DROP CONSTRAINT orders_user_id_fkey;
-- table 삭제
DROP TABLE my_table;
-- DB 삭제
DROP DATABASE IF EXISTS 데이터베이스명;
-- 특정 필드의 한글 정렬 적용이 필요할때 C COLLATE (ascii 기반 정렬) 지정
ALTER TABLE products ALTER COLUMN manufacturer SET DATA TYPE character varying(100) COLLATE "C";