이번 포스트에선 PostgreSQL을 설치하고, DB를 생성한 후 간단한 테이블을 생성하는 것 까지의 과정을 정리합니다.
1. postgresql 설치
먼저 apt-get을 업데이트 해줍니다. 그리고 postgresql을 설치 합니다.
2. 계정 생성 및 DB 생성
다음 postgres 계정으로 접근하여, 기본 셋팅을 해줍니다.
bcadmin이라는 유저를 만들어서, bc_db라는 데이터베이스를 만들어 소유권자로 등록합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
-- postgres user로 접근
sudo -i -u postgres -- psql db로 접근
psql CREATE USER bcadmin WITH PASSWORD '1234';
-- 새 데이터베이스(bc_db)의 소유자(bcadmin)가 되게하여 직접 구성하고 관리
CREATE DATABASE bc_db OWNER bcadmin;
CREATE SCHEMA bcpaltform AUTHORIZATION bcadmin;
-- public 스키마가 아닌 별도의 스키마를 생성해서 사용하려면 search_path 를 잡아주는 것이 편하다. -- search_path는 탐색할 스키마의 순서를 지정해주는 변수다. -- show search_path; alter USER bcadmin set search_path = 'bcpaltform';
exit
exit
|
cs |
3. 테이블, 시퀀스 생성
다음 우리가 만든 bcadmin으로 접근하여 테이블을 시퀀스, 테이블을 만들어 봅시다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
--bcadmin 계정으로 bc_db 데이터베이스에 접근 / 비번 1234
psql -h localhost -U bcadmin -d bc_db --스키마 생성 CREATE SCHEMA bcpaltform AUTHORIZATION bcadmin;
--시퀀스 생성 CREATE SEQUENCE "menu_id_seq";
--메뉴 생성(id는 위에만든 시퀀스 기반) CREATE TABLE "menu" (
"id" INTEGER NOT NULL DEFAULT nextval('menu_id_seq'::regclass), "label" VARCHAR(255) NOT NULL,
"icon" VARCHAR(50) NULL DEFAULT NULL,
"link_to" VARCHAR(255) NULL DEFAULT NULL,
"parent_id" INTEGER NULL DEFAULT NULL,
"sort_order" INTEGER NULL DEFAULT NULL,
"use_yn" CHAR(1) NULL DEFAULT 'Y',
PRIMARY KEY ("id")
);
|
cs |
4. 데이터 삽입
테스트 겸, 여러 테이블을 만들어보고, 데이터 삽입을 진행합니다.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
--OWNED BY 옵션을 사용하면 시퀀스가 특정 테이블 열과 연결되므로
--해당 열 (또는 전체 테이블)이 삭제되면 시퀀스도 자동으로 삭제됩니다.
ALTER SEQUENCE menu_id_seq OWNED BY menu.id;
-- organizations 테이블 생성
CREATE TABLE "organizations" (
"id" UUID NOT NULL,
"org_name" VARCHAR(255) NOT NULL,
"org_role" VARCHAR(32) NULL DEFAULT NULL,
"created_date" TIMESTAMP NULL,
"modified_date" TIMESTAMP NULL,
PRIMARY KEY ("id")
);
-- users 테이블 생성
CREATE TABLE "users" (
"id" UUID NOT NULL,
"email" VARCHAR(128) NOT NULL,
"password" VARCHAR(128) NOT NULL,
"user_name" VARCHAR(128) NOT NULL,
"tel" VARCHAR(20) NULL DEFAULT NULL,
"org_id" VARCHAR(36) NULL DEFAULT NULL,
"role" VARCHAR(255)[] NULL,
"created_date" TIMESTAMP NULL,
"modified_date" TIMESTAMP NULL,
"reset_yn" BOOLEAN NULL DEFAULT true,
PRIMARY KEY ("id")
);
-- 인덱스 생성
CREATE UNIQUE INDEX "UNIQUE" ON users(email);
-- role_menu 테이블 생성
CREATE TABLE "role_menu" (
"role_id" VARCHAR(20) NULL DEFAULT NULL,
"menu_id" INTEGER NULL DEFAULT NULL
);
-- role_menu 데이터 삽입
INSERT INTO "role_menu" ("role_id", "menu_id") VALUES ('ADMIN', 30),('ADMIN', 0),('ADMIN', 1),('ADMIN', 2),('ADMIN', 3),('ADMIN', 4),('ADMIN', 10),('ADMIN', 26),('ADMIN', 27),('ADMIN', 9),('ADMIN', 25),('ADMIN', 28),('ADMIN', 7),('ADMIN', 29),('ADMIN', 6),('ADMIN', 5),('ADMIN', 8),('USER', 6),('USER', 7),('USER', 8),('USER', 9),('USER', 5),('GUEST', 9);
-- menu 데이터 삽입
INSERT INTO "menu" ("id", "label", "icon", "link_to", "parent_id", "sort_order", "use_yn") VALUES (0, E'시스템관리', E'user', NULL, NULL, 0, E'Y');
INSERT INTO "menu" ("id", "label", "icon", "link_to", "parent_id", "sort_order", "use_yn") VALUES (1, E'회사관리', NULL, E'/admin/company', 0, 1, E'Y');
INSERT INTO "menu" ("id", "label", "icon", "link_to", "parent_id", "sort_order", "use_yn") VALUES (3, E'권한관리', NULL, E'/admin/authority', 0, 3, E'Y');
INSERT INTO "menu" ("id", "label", "icon", "link_to", "parent_id", "sort_order", "use_yn") VALUES (4, E'메뉴관리', NULL, E'/admin/menu', 0, 4, E'Y');
INSERT INTO "menu" ("id", "label", "icon", "link_to", "parent_id", "sort_order", "use_yn") VALUES (2, E'회원관리', NULL, E'/admin/members', 0, 2, E'Y');
INSERT INTO "menu" ("id", "label", "icon", "link_to", "parent_id", "sort_order", "use_yn") VALUES (5, E'예외처리', E'warning', NULL, NULL, 6, E'Y');
INSERT INTO "menu" ("id", "label", "icon", "link_to", "parent_id", "sort_order", "use_yn") VALUES (6, E'403', NULL, E'/error/permission', 5, 7, E'Y');
INSERT INTO "menu" ("id", "label", "icon", "link_to", "parent_id", "sort_order", "use_yn") VALUES (7, E'404', NULL, E'/error/found', 5, 8, E'Y');
INSERT INTO "menu" ("id", "label", "icon", "link_to", "parent_id", "sort_order", "use_yn") VALUES (8, E'500', NULL, E'/error/request', 5, 9, E'Y');
INSERT INTO "menu" ("id", "label", "icon", "link_to", "parent_id", "sort_order", "use_yn") VALUES (9, E'PDF Viewer', E'file-pdf', E'/pdf', NULL, 5, E'Y');
|
cs |
이제 menu의 내용을 확인하면, 우리가 넣은 내용을 확인할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
select * from menu;
id | label | icon | link_to | parent_id | sort_order | use_yn
----+------------+----------+-------------------+-----------+------------+--------
0 | 시스템관리 | user | | | 0 | Y
1 | 회사관리 | | /admin/company | 0 | 1 | Y
3 | 권한관리 | | /admin/authority | 0 | 3 | Y
4 | 메뉴관리 | | /admin/menu | 0 | 4 | Y
2 | 회원관리 | | /admin/members | 0 | 2 | Y
5 | 예외처리 | warning | | | 6 | Y
6 | 403 | | /error/permission | 5 | 7 | Y
7 | 404 | | /error/found | 5 | 8 | Y
8 | 500 | | /error/request | 5 | 9 | Y
9 | PDF Viewer | file-pdf | /pdf | | 5 | Y
(10 rows)
|
cs |
'IT > PostgresSQL' 카테고리의 다른 글
[SQL] 리스트 잘라서 보여주는 쿼리 (0) | 2023.08.09 |
---|---|
[Oracle SQL] WITH절 사용법 및 예제 정리 (0) | 2023.07.03 |
[Oralce SQL] 정규식 regexp_replace() 함수 (0) | 2023.07.03 |
[Postgresql] 외부에서 접속하기 (0) | 2021.07.15 |
PostgreSQL 외부 포트 접근 가능하게 하기 (0) | 2020.06.08 |