๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ก Computer Science/๐Ÿ’พ Database

[TIL] Postgres/PostgreSQL ๋ช…๋ น์–ด ์ •๋ฆฌ

by sgaeng 2022. 3. 17.
[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 ์— postgres ์œ ์ €๋กœ ์ ‘๊ทผํ•œ ๊ฒฝ์šฐ

(์›๋ž˜๋Š” psql ์‰˜์ด ์—ด๋ฆด ๋•Œ ๋‚˜์˜ค๋Š” =# ์•ž๋ถ€๋ถ„์€ DB name์ด๋‹ค.)

 

 


< psql shell ์•ˆ์—์„œ์˜ ๋ช…๋ น์–ด >

1๏ธโƒฃ USER

- postgres ๊ณ„์ •(USER) ๋ชฉ๋ก ์กฐํšŒ ๋ฐฉ๋ฒ•

=# SELECT * FROM PG_USER;
=# \du                     <- ์œ„์˜ ๋ช…๋ น์–ด์™€ ๊ฐ™์€ ์˜๋ฏธ
=# \du+                    <- ๋ณด๋‹ค ์ƒ์„ธ์กฐํšŒ

 

- ์œ ์ € ์ƒ์„ฑ ๋ฐฉ๋ฒ•

  1. superuser์˜ ๊ณ„์ •์œผ๋กœ psql shell์— ์ ‘์†ํ•œ๋‹ค. [์ฐธ๊ณ : docs]
  2. ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ์„ฑ
    =# CREATE USER <username>;
  3. ์˜ต์…˜๊นŒ์ง€ ์ถ”๊ฐ€ํ•ด์„œ ์ƒ์„ฑ
    =# CREATE ROLE <username> PASSWORD '<password: str>' <๊ถŒํ•œ>;
    • [์ฐธ๊ณ ] CREATE ROLE ๋Œ€์‹  CREATE USER๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋˜‘๊ฐ™์ด user๋Š” ๋งŒ๋“ค์–ด์ง„๋‹ค.
      ๋‘˜์˜ ์ฐจ์ด์ 
      CREATE ROLE์˜ ๊ฒฝ์šฐ: ๋กœ๊ทธ์ธ์„ ํ•œ๋ฒˆ ๋” ํ•ด์ค˜์•ผ ์œ ์ €๋กœ ์ธ์‹๋œ๋‹ค.
      CREATE USER์˜ ๊ฒฝ์šฐ: ๋กœ๊ทธ์ธ์„ ์•ˆํ•ด๋„ ์œ ์ €๋กœ ์ธ์‹๋œ๋‹ค.

create user

- ์œ ์ €์˜ ์ •๋ณด(๊ถŒํ•œ/๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ) ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ๋ฒ• (์ด๋ฏธ ์œ ์ € ์ƒ์„ฑ ์ดํ›„์—)

  • ๊ถŒํ•œ ์—…๋ฐ์ดํŠธ
    =# ALTER USER <username> WITH <permissions>;
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์—…๋ฐ์ดํŠธ(์„ค์ •)
    =# ALTER ROLE <username> LOGIN password '<password: str>';
  • ํ•ด๋‹น ์œ ์ €์—๊ฒŒ ํŠน์ • ๊ถŒํ•œ๋งŒ ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ
    =# GRANT <permissions> ON DATABASE <dbname> TO <username>;

- ์œ ์ € ์‚ญ์ œ ๋ฐฉ๋ฒ•

=# DROP ROLE <username>;

drop user

 

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>=# ์œผ๋กœ ๋ฐ”๋€” ๊ฒƒ์ด๋‹ค.)

gbzrdb =# ์‰˜
\fastapi-practice=# ์‰˜๋กœ ๋ฐ”๋€œ

- ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐฉ๋ฒ• (์˜ˆ์‹œ)

  • 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
);

- ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์—ฌ๋ถ€ ํ™•์ธ ๋ฐฉ๋ฒ•

  1. =# \dt๋กœ ์ „์ฒด ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•ด์„œ ๋‚ด๊ฐ€ ๋งŒ๋“  'ํ…Œ์ด๋ธ” ์ด๋ฆ„'์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  2. =# 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