[psql DB ์ ์]
$ psql -h localhost -U <username> -d <dbname>
[psql shell ์ง์
]
$ psql <schemaname>
๊ธฐ๋ณธ์ ์ผ๋ก psql์์๋ postgres ๋ผ๋ ์ ์ ๊ฐ ์์ฑ๋์ด ์๋ค.
๊ทธ๋์ $ psql -U postgres -h localhost ๋ฅผ ์ ๋ ฅํ๊ณ psql ์ค์น์ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด
์๋์ ๊ฐ์ด postgres(๋ db๊ฐ ์๋์ง๋ง)๋ช ์ psql ์์ด ์ด๋ฆฌ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
(์๋๋ psql ์์ด ์ด๋ฆด ๋ ๋์ค๋ =# ์๋ถ๋ถ์ DB name์ด๋ค.)
< psql shell ์์์์ ๋ช ๋ น์ด >
1๏ธโฃ USER
- postgres ๊ณ์ (USER) ๋ชฉ๋ก ์กฐํ ๋ฐฉ๋ฒ
=# SELECT * FROM PG_USER;
=# \du <- ์์ ๋ช
๋ น์ด์ ๊ฐ์ ์๋ฏธ
=# \du+ <- ๋ณด๋ค ์์ธ์กฐํ
- ์ ์ ์์ฑ ๋ฐฉ๋ฒ
- superuser์ ๊ณ์ ์ผ๋ก psql shell์ ์ ์ํ๋ค. [์ฐธ๊ณ : docs]
- ๊ฐ๋จํ๊ฒ ์์ฑ
=# CREATE USER <username>; - ์ต์
๊น์ง ์ถ๊ฐํด์ ์์ฑ
=# CREATE ROLE <username> PASSWORD '<password: str>' <๊ถํ>;- [์ฐธ๊ณ ] CREATE ROLE ๋์ CREATE USER๋ฅผ ์ฌ์ฉํด๋ ๋๊ฐ์ด user๋ ๋ง๋ค์ด์ง๋ค.
๋์ ์ฐจ์ด์
CREATE ROLE์ ๊ฒฝ์ฐ: ๋ก๊ทธ์ธ์ ํ๋ฒ ๋ ํด์ค์ผ ์ ์ ๋ก ์ธ์๋๋ค.
CREATE USER์ ๊ฒฝ์ฐ: ๋ก๊ทธ์ธ์ ์ํด๋ ์ ์ ๋ก ์ธ์๋๋ค.
- [์ฐธ๊ณ ] CREATE ROLE ๋์ CREATE USER๋ฅผ ์ฌ์ฉํด๋ ๋๊ฐ์ด user๋ ๋ง๋ค์ด์ง๋ค.
- ์ ์ ์ ์ ๋ณด(๊ถํ/๋น๋ฐ๋ฒํธ ๋ฑ) ์ ๋ฐ์ดํธ ํ๋ ๋ฐฉ๋ฒ (์ด๋ฏธ ์ ์ ์์ฑ ์ดํ์)
- ๊ถํ ์
๋ฐ์ดํธ
=# ALTER USER <username> WITH <permissions>; - ๋น๋ฐ๋ฒํธ ์
๋ฐ์ดํธ(์ค์ )
=# ALTER ROLE <username> LOGIN password '<password: str>'; - ํด๋น ์ ์ ์๊ฒ ํน์ ๊ถํ๋ง ์ฃผ๊ณ ์ถ์ ๋
=# GRANT <permissions> ON DATABASE <dbname> TO <username>;
- ์ ์ ์ญ์ ๋ฐฉ๋ฒ
=# DROP ROLE <username>;
2๏ธโฃ DATEBASE
- postgres ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก ์กฐํ ๋ฐฉ๋ฒ
=# \l
=# \list
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ ๋ฐฉ๋ฒ
- ๊ฐ๋จํ๊ฒ ์์ฑ
=# CREATE DATABASE <dbname>; - ์์ ์ ์ง์ ํด์ ์์ฑ
=# CREATE DATABASE <dbname> OWNER <owner_username>;
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๋ณ๊ฒฝ ๋ฐฉ๋ฒ (์ด๋ฏธ ์์ฑ ํ์, ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ)
=# ALTER DATABASE <dbname> OWNER TO <owner_username>;
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญ์ ๋ฐฉ๋ฒ
=# DROP DATABASE <dbname>;
๐ซ [์ฐธ๊ณ ] ERROR: database "gbzrdb" is being accessed by other users ๋ฐ์์
โก๏ธ https://scriptcrunch.com/there-is-1-other-session
๐ซ [์ฐธ๊ณ ] [ERROR] ERROR: syntax error at or near "-" ๋ฐ์์
โก๏ธ https://kkangsg.tistory.com/106
3๏ธโฃ TABLE
- postgres ํ ์ด๋ธ ๋ชฉ๋ก ์กฐํ ๋ฐฉ๋ฒ
=# SELECT * FROM pg_tables;
=# \dt <- ์์ ๋ช
๋ น์ด์ ๊ฐ์ ์๋ฏธ
=# \dt+ <- ๋ณด๋ค ์์ธ์กฐํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ ๋ฐฉ๋ฒ
=# \c <database_name> <db_user>
(์์ ๊ฐ์ ๋ช ๋ น์ด๋ก ์ ์ํ๋ฉด psql ์ ํํ์ด postgres=# ์์ <db_name>=# ์ผ๋ก ๋ฐ๋ ๊ฒ์ด๋ค.)
- ํ ์ด๋ธ ์์ฑ ๋ฐฉ๋ฒ (์์)
- DDL(Data Definition Language)์ ์ด์ฉํด์ ์์ฑํ ๊ฒ์ด๋ค.
- ๋ณดํต์, ์ฌ์ฉํ๋ framework์ models์ ๋ง๋ค๊ณ migration์ ํ๋ฉด ORM์ ํตํด์ ์๋์ผ๋ก table์ด ์์ฑ๋๋ค.
=# CREATE TABLE ํ
์ด๋ธ์ด๋ฆ (์ปฌ๋ผ๋ช
1 ๋ฐ์ดํฐํ์
, ์ปฌ๋ผ๋ช
2 ๋ฐ์ดํฐํ์
);
[์์]
=# CREATE TABLE ACCOUNT_TEST
(
USER_ID SERIAL PRIMARY KEY,
USERNAME VARCHAR(50) UNIQUE NOT NULL,
PASSWORD VARCHAR(50) NOT NULL,
EMAIL VARCHAR(355) UNIQUE NOT NULL,
CREATED_ON TIMESTAMP NOT NULL,
LAST_LOGIN TIMESTAMP
);
- ํ ์ด๋ธ ์์ฑ ์ฌ๋ถ ํ์ธ ๋ฐฉ๋ฒ
- =# \dt๋ก ์ ์ฒด ํ ์ด๋ธ์ ์กฐํํด์ ๋ด๊ฐ ๋ง๋ 'ํ ์ด๋ธ ์ด๋ฆ'์ด ์๋์ง ํ์ธํ๋ค.
- =# SELECT * FROM 'table_name';์ ํตํด์ ๋ด๊ฐ ์์ฑํ ํ ์ด๋ธ์ ์ปฌ๋ผ๋ค์ด ๋ฐ์ดํฐํ์ ์ ๋ง์ถฐ์ ์ ์์ฑ๋์๋์ง ํ์ธํ๋ค.
- ํ ์ด๋ธ ์ญ์ ๋ฐฉ๋ฒ
=# DROP TABLE <table_name>;
4๏ธโฃ SCHEMA
์คํค๋ง ๋ํ ํ ์ด๋ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ์กฐํํ๊ธฐ ์ ์ DB์ ์ฐ๊ฒฐ์ ๋จผ์ ํด์ผํ๋ค!
- postgres ์คํค๋ง ๋ชฉ๋ก ์กฐํ ๋ฐฉ๋ฒ
=# \dn
=# \dn+
- ํ์ฌ DB์์ ์ง์ ํ ์คํค๋ง ์ญ์ ๋ฐฉ๋ฒ
=# DROP SCHEMA <schema_name:PUBLIC> CASCADE;
- ํ์ฌ DB์์ ์ง์ ํ ์คํค๋ง ์์ฑ ๋ฐฉ๋ฒ
(์ผ๋ฐ์ ์ผ๋ก db๋ฅผ ์์ฑํ๋ฉด ์คํค๋ง๋ ์ด๋ฏธ ์์ฑ๋์ด์๋ค)
=# CREATE SCHEMA <schema_name:PUBLIC>;
๐ซ [์ฐธ๊ณ ] IN my CASE,
๋์ ๊ฒฝ์ฐ, django/fastapi ํ๋ก์ ํธ์์ model์ ๋ณ๊ฒฝํ๋ฉด migration์ ํ์ง๋ง
์๋ชป๋ ์คํค๋ง๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ธฐ์กด์ ๋ชจ๋ธ๊ณผ ๋น๊ตํ์ ๋ ๋ณ๊ฒฝ์ ๋ง์ดํด์, ์์ migrationํ์ผ์ ๋ ๋ฆฌ๊ณ ์ฒ์๋ถํฐ ์์ํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ํ๋ค. [์ฐธ๊ณ ๋ธ๋ก๊ทธ]
- migrationํ์ผ ๋ ๋ฆฌ๊ธฐ
- =# DROP SCHEMA PUBLIC CASCADE; (์ง๊ธ๊น์ง์ ์คํค๋ง ์ญ์ )
=# CREATE SCHEMA PUBLIC; (์คํค๋ง ์๋กญ๊ฒ ์์ฑ) - ๋๋ migrate์ผ๋ก ์์ฑ๋ ํ์ผ ์ง์ ์์ ํ๊ธฐ (์ด๊ฑด ๋ชจ๋ธ ๋ณํ๊ฐ ํฌ์ง ์์์ ๋ ์ถ์ฒ!)
'๐ก Computer Science > ๐พ Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] MySQL ๋ช ๋ น์ด ์ ๋ฆฌ (0) | 2023.03.06 |
---|---|
[ERROR] ERROR: syntax error at or near "-" (0) | 2022.03.01 |