1
2
3
4
5
| CREATE TABLE {TABLE_ID} (
idx serial,
{COLUMN_NAME} {DATA_TYPE},
timestamp TIMESTAMP
) partition by range(timestamp);
파티셔닝 설정- partition 설정 위한
pg_partman 확장 사용 적용class="highlight"> 1
| CREATE EXTENSION pg_partman SCHEMA public;
- table 생성 확인
original_tableordersold_nonpartitioned_tablepart_configpart_config_subspatial_ref_systemplate_public_original_table
- partition 적용 - partition 사용할 메인 table 생성
class="highlight"> 1
2
3
4
5
6
| CREATE TABLE {TABLE_ID} (
idx serial,
{COLUMN_NAME} {DATA_TYPE},
{COLUMN_NAME} {DATA_TYPE},
timestamp TIMESTAMP
) partition by range(timestamp);
- partition 적용 - Index 생성
class="highlight"> 1
| CREATE INDEX ON {SCHEMA_NAME}.{TABLE_ID} (idx, timestamp);
- partition 적용 - table에 partition 적용
class="highlight"> 1
2
3
| SELECT {SCHEMA_NAME}.create_parent('{SCHEMA_NAME}.{TABLE_ID}', 'timestamp', 'native', 'daily', p_template_table:= '{SCHEMA_NAME}.{TABLE_ID}', p_premake := 15, p_start_partition := (CURRENT_TIMESTAMP)::text);
UPDATE {SCHEMA_NAME}.part_config SET retention_keep_table = false, retention = '6 month' WHERE parent_table = '{SCHEMA_NAME}.{TABLE_ID}';
{SCHEMA_NAME}.{TABLE_ID}timestamp- partition 타입
native 선언적 partition (파티셔닝 관리 용이. 속도 상승 및 partition pruning 자동)partman 상속 partition (구버전, table 따로 관리, index, vaacuum 등 개별 table로 구분)
dailyretentionretention_keep_table- true 삭제된 table 유지, false 삭제된 table 완전 삭제
p_premakep_start_partition
- partition 적용 - partition table 생성
class="highlight"> 1
| CREATE TABLE {SCHEMA_NAME}.{TABLE_ID}_p2022_09_01 PARTITION OF {SCHEMA_NAME}.{TABLE_ID} FOR VALUES FROM ('2022-09-01 00:00:00') TO ('2022-09-02 00:00:00');
- partition 자동 관리 설정
- partition 자동 관리, 특정 Table 지정 가능
class="highlight"> 1
2
| SELECT run_maintenance();
SELECT run_maintenance('{SCHEMA_NAME}.{TABLE_ID}');
- 특정 table 지정 가능 (PostgreSQL 직접 실행, GCP CloudSQL 적용 안됨)
- time 기준 table 자동 생성
class="highlight"> 1
| SELECT partition_data_time('{SCHEMA_NAME}.{TABLE_ID}');
- 데이터 없으면 table 생성 불가, GCP CloudSQL 적용 가능)
- time 기준 table 자동 삭제
class="highlight"> 1
| SELECT drop_partition_time('{SCHEMA_NAME}.{TABLE_ID}')
retention 옵션 값으로 table 삭제, GCP CloudSQL 적용 가능)
인덱싱 설정
btree 인덱싱- single coulmn 인덱싱 설정
class="highlight"> 1
| CREATE INDEX {INDEX_NAME} ON only {SCHEMA_NAME}.{TABLE_ID} USING btree({COLUMN_NAME});
- 인덱싱 삭제
class="highlight"> 1
| DROP INDEX {INDEX_NAME};
Table 및 Coulmn 수정/삭제
table 및 coulmn 변경- coulmn 명 변경
class="highlight"> 1
| ALTER TABLE {TABLE_ID} RENAME COLUMN {SRC_COLUMN} TO {TGT_COLUMN};
- table 명 변경
class="highlight"> 1
| ALTER TABLE {SCHEMA_NAME}.{SRC_TABLE_ID} RENAME TO {TGT_TABLE_ID};
- coulmn 데이터 타입 변경
class="highlight"> 1
| ALTER TABLE {SCHEMA_NAME}.{TABLE_ID} ALTER COLUMN {COLUMN_NAME} TYPE {DATA_TYPE};
- coulmn 추가
class="highlight"> 1
2
| ALTER TABLE {SCHEMA_NAME}.{TABLE_ID} ADD {COLUMN_NAME} {DATA_TYPE} NULL;
ALTER TABLE {SCHEMA_NAME}.{TABLE_ID} ADD {COLUMN_NAME} {DATA_TYPE} NULL, ADD {COLUMN_NAME} {DATA_TYPE} NULL;
table 및 coulmn 삭제- coulmn 삭제
class="highlight"> 1
2
| ALTER TABLE {SCHEMA_NAME}.{TABLE_ID} DROP COLUMN {COLUMN_NAME};
ALTER TABLE {SCHEMA_NAME}.{TABLE_ID} DROP COLUMN {COLUMN_NAME}, DROP COLUMN {COLUMN_NAME};
- table 데이터 삭제
class="highlight"> 1
| TRUNCATE TABLE {SCHEMA_NAME}.{TABLE_ID};
데이터 조회
조회- 테이블 전체 데이터 조회
class="highlight"> 1
2
3
| SELECT * FROM {TABLE_ID} LIMIT 100; -- 해당 테이블 데이터 100개 조회
SELECT * FROM {TABLE_ID} ORDER BY {COLUMN_NAME} DESC -- 정렬 기준 칼럼에 대해 내림차순 조회
SELECT * FROM {TABLE_ID} ORDER BY {COLUMN_NAME} ASC -- 정렬 기준 칼럼에 대해 오름차순 조회
- 테이블 인덱스 정보 조회
class="highlight"> 1
| SELECT * FROM pg_catalog.pg_indexes WHERE tablename = '{TABLE_ID}';
계정 설정
계정 생성- 현재 사용자 정보 확인
class="highlight"> 1
| SELECT * FROM PG_USER;
- 계정 생성
class="highlight"> 1
| CREATE USER {USER_ID} PASSWORD '{USER_PASSWORD}';
- 유저 생성 확인
class="highlight"> 1
| SELECT * FROM pg_user WHERE usename IN ('{USER_ID}');
계정 및 비밀번호 수정- 계정명 수정
class="highlight"> 1
| ALTER USER {USER_ID} WITH PASSWORD '{USER_PASSWORD}';
- 비밀번호 수정
class="highlight"> 1
| ALTER USER {USER_ID} WITH PASSWORD '{USER_PASSWORD}';
권한 설정
DB 권한GrantorGranteeTable_schemaTable_namePrivilege_typeIs_grantable- 권한을 줄 수 있을 경우 YES, 아닐 경우 NO
- 권한 확인
class="highlight"> 1
| SELECT * FROM information_schema.role_table_grants WHERE grantee ='{USER_ID}'
- DB 접근 권한 할당
class="highlight"> 1
| GRANT CONNECT ON DATABASE {DB_NAME} TO {USER_ID};
schema 권한 설정- schema 모든 권한 할당
class="highlight"> 1
| GRANT ALL ON SCHEMA {SCHEMA_NAME} TO {USER_ID};
- schema 엑세스 권한 할당
class="highlight"> 1
| GRANT USAGE ON SCHEMA {SCHEMA_NAME} TO {USER_ID};
- schema SELECT 권한 할당
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|