Post

🐘 PostgreSQL κΈ°λ³Έ β…‘ - λ°μ΄ν„°λ² μ΄μŠ€μ™€ ν…Œμ΄λΈ” 생성

🐘 PostgreSQL κΈ°λ³Έ β…‘ - λ°μ΄ν„°λ² μ΄μŠ€μ™€ ν…Œμ΄λΈ” 생성

πŸ“™ γ€Žμ‹€μš© SQL』을 읽고 μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

κ°œμš”

  • SQL은 λ‹¨μˆœνžˆ λ°μ΄ν„°λ‘œλΆ€ν„° 지식을 μΆ”μΆœν•˜λŠ” μž‘μ—…μ΄ μ•„λ‹ˆλΌ, 데이터가 λ‹΄κ³  μžˆλŠ” ꡬ쑰λ₯Ό μ •μ˜ν•˜μ—¬ μš°λ¦¬κ°€ 데이터 μ•ˆμ˜ 관계λ₯Ό μ •μ˜ν•  수 μžˆλ„λ‘ ν•œλ‹€.
  • μ΄λŸ¬ν•œ ꡬ쑰 쀑 μœΌλœΈμ€ ν…Œμ΄λΈ”μ΄λ‹€.
  • ν…Œμ΄λΈ”μ€ 데이터λ₯Ό λ‹΄κ³  μžˆλŠ” ν–‰κ³Ό μ—΄λ‘œ 이루어진 ν‘œμ΄λ‹€.
  • 각 행듀은 μ—΄λ“€μ˜ λͺ¨μŒμ΄κ³ , 각 열은 λŒ€κ°œ 숫자, 문자, 그리고 λ‚ μ§œλ‘œ 이루어진 νŠΉμ • νƒ€μž…μ˜ 데이터λ₯Ό λ‹΄κ³  μžˆλ‹€.
  • μš°λ¦¬λ“€μ€ ν…Œμ΄λΈ”μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•˜κ³ , 각 ν…Œμ΄λΈ”μ΄ λ°μ΄ν„°λ² μ΄μŠ€ μ•ˆμ˜ λ‹€λ₯Έ ν…Œμ΄λΈ”κ³Ό μ–΄λ–€ 연관이 μžˆλŠ”μ§€ ν™•μΈν•˜κ³ , ν…Œμ΄λΈ”μ—μ„œ 데이터λ₯Ό μΆ”μΆœ λ˜λŠ” μΏΌλ¦¬ν•˜κΈ° μœ„ν•΄ SQL을 μ‚¬μš©ν•  것이닀.
  • 이 μž₯μ—μ„œλŠ” λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•΄λ³Ό 것이닀.
  1. λ°μ΄ν„°λ² μ΄μŠ€ 생성
  2. μƒμ„±ν•œ λ°μ΄ν„°λ² μ΄μŠ€μ— ν…Œμ΄λΈ” 생성
  3. μƒμ„±ν•œ ν…Œμ΄λΈ”μ— 행을 μ—¬λŸ¬ 개 μ‚½μž…
  4. 이후 ν…Œμ΄λΈ” 데이터 확인인

ν…Œμ΄λΈ” μ΄ν•΄ν•˜κΈ°

  • λ°μ΄ν„°λ² μ΄μŠ€μ˜ 데이터λ₯Ό μ΄ν•΄ν•˜λ €λ©΄ μš°μ„  ν…Œμ΄λΈ”μ„ μ•Œμ•„μ•Ό ν•œλ‹€.
  • μš°μ„ μ μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— ν¬ν•¨λœ ν…Œμ΄λΈ”μ„ μ‚΄νŽ΄λ³΄κ³ , ν…Œμ΄λΈ”μ˜ 이름과 μ—΄ ꡬ쑰λ₯Ό 보고 λ‹¨μ„œλ₯Ό μ°ΎλŠ”λ‹€.
  • λ‹€μŒμœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— ν…Œμ΄λΈ”μ΄ λͺ‡ κ°œλ‚˜ μžˆλŠ”μ§€ μ‚΄νŽ΄λ³΄κ³ , 뢄석할 ν…Œμ΄λΈ”μ΄ λ§Žλ‹€λŠ” 것은 κ³§ 뢄석할 데이터가 λ§Žλ‹€λŠ” 것을 λœ»ν•˜λŠ” λ™μ‹œμ—, 각 ν…Œμ΄λΈ” μ‚¬μ΄μ˜ 관계도 μ‚΄νŽ΄λ΄μ•Ό ν•œλ‹€λŠ” 것을 λœ»ν•œλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€ 생성

1
2
CREATE DATABASE analysis;  -- λ°μ΄ν„°λ² μ΄μŠ€ 생성
SELECT current_database(); -- ν˜„μž¬ μ‚¬μš© 쀑 λ°μ΄ν„°λ² μ΄μŠ€ 쑰회
  • κΈ°λ³Έ λ°μ΄ν„°λ² μ΄μŠ€ λŒ€μ‹  μ˜ˆμ œμ— μ‚¬μš©ν•˜λŠ” μƒˆλ‘œμš΄ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ§Œλ“€μ–΄ νŠΉμ • 주제 λ˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨κ³Ό κ΄€λ ¨λœ 개체λ₯Ό ν•¨κ»˜ ꡬ성할 수 μžˆλŠ”λ°, μ΄λ ‡κ²Œ ν•  경우 μ„œλ‘œ 관련이 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— ν…Œμ΄λΈ”μ΄ μŒ“μ΄λŠ” 것을 λ°©μ§€ν•˜κ³ , ν•΄λ‹Ή 데이터가 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬λ™ν•˜λŠ” 데 μ‚¬μš©λ  경우 κ΄€λ ¨ μ •λ³΄λ§Œ ν¬ν•¨ν•˜μ—¬ 관리할 수 μžˆλ‹€.
  • μ„œλ²„μ— analysisλΌλŠ” μ΄λ¦„μ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” λͺ…령문이닀.
  • λͺ…령문은 μ„Έλ―Έμ½œλ‘ (;)으둜 마치며, μ΄λŠ” ν‘œμ€€ ANSI SQL에 ν•΄λ‹Ήν•œλ‹€.
  • μ„Έλ―Έμ½œλ‘ μ„ μƒλž΅ν•΄λ„ λ˜λŠ” κ²½μš°κ°€ μžˆμ§€λ§Œ, μ—¬λŸ¬ λͺ…령문을 μ‹€ν–‰ν•  λ•ŒλŠ” μ„Έλ―Έμ½œλ‘ μ„ μƒλž΅ν•΄μ„œλŠ” μ•ˆλ˜λŠ” κ²½μš°λ„ μ‘΄μž¬ν•˜λ―€λ‘œ μ–Έμ œλ‚˜ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ λͺ…령문을 λ§ˆλ¬΄λ¦¬ν•˜λŠ” μŠ΅κ΄€μ„ λ“€μ΄λŠ” 것이 μ’‹λ‹€.
  • λ°μ΄ν„°λ² μ΄μŠ€ 생성 ν›„ λͺ©λ‘μ—μ„œ μ•ˆ λ³΄μ΄λŠ” κ²½μš°λ„ μžˆλŠ”λ°, DBeaver의 λ¬Έμ œμ΄λ―€λ‘œ λ‹€μŒ 과정을 거치면 λœλ‹€.
  • λ°μ΄ν„°λ² μ΄μŠ€ 우클릭 - Edit Connection - Main - Show all databases 체크

μƒμ„±ν•œ λ°μ΄ν„°λ² μ΄μŠ€μ— ν…Œμ΄λΈ” 생성

1
2
3
4
5
6
7
8
CREATE TABLE teachers (
	id bigserial,
	first_name varchar(25),
	last_name varchar(50),
	school varchar(50),
	hire_date date,
	salary numeric
);
  • 이 ν…Œμ΄λΈ” μ •μ˜λŠ” μ „ν˜€ 포괄적이지 μ•Šλ‹€.
  • λ°˜λ“œμ‹œ μ±„μ›Œμ Έμ•Ό ν•˜λŠ” 값이 데이터λ₯Ό λ‹΄κ³  μžˆλŠ”μ§€, λ˜λŠ” 무심코 μ€‘λ³΅λœ 값을 μ‚½μž…ν•˜μ§€λŠ” μ•Šμ•˜λŠ”μ§€ 등을 ν™•μΈν•˜λŠ” μ œμ•½ 쑰건이 λˆ„λ½λ˜μ–΄ μžˆλ‹€.
  • μ œμ•½ 쑰건은 8μž₯μ—μ„œ λ‹€λ£° μ˜ˆμ •μ΄λ‹€.
  • ν…Œμ΄λΈ”μ„ λ§Œλ“€ λ•Œ 각 μ—΄μ˜ 이름과 데이터 νƒ€μž…μ„ μ§€μ •ν•΄μ£ΌλŠ”λ°, 데이터 νƒ€μž…μ€ λ°μ΄ν„°μ˜ 무결성을 ν™•μΈν•˜λŠ” 방법이 λœλ‹€.
  • κ°€λ Ή λ‚ μ§œ 데이터λ₯Ό μž…λ ₯ λ°›λŠ” data 열이 μžˆλ‹€κ³  ν•  λ•Œ ν•΄λ‹Ή 열에 λ‚ μ§œ 데이터가 μ•„λ‹Œ "peach" 같은 λ¬Έμžμ—΄μ„ μž…λ ₯ν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

μƒμ„±ν•œ ν…Œμ΄λΈ”μ— 행을 μ—¬λŸ¬ 개 μ‚½μž…

1
2
3
4
5
6
7
INSERT INTO teachers (first_name, last_name, school, hire_date, salary)
VALUES ('Janet', 'Smith', 'F.D. Roosevelt HS', '2011-10-30', 36200),
	   ('Lee', 'Reynolds', 'F.D. Roosevelt HS', '1993-05-22', 65000),
	   ('Samuel', 'Cole', 'Myers Middle School', '2005-08-01', 43500),
	   ('Samantha', 'Bush', 'Myers Middle School', '2011-10-30', 36200),
	   ('Betty', 'Diaz', 'Myers Middle School', '2005-08-30', 43500),
	   ('Kathleen', 'Roush', 'F.D. Roosevelt HS', '2010-10-22', 38500);
  • ν…Œμ΄λΈ”μ— 데이터λ₯Ό μΆ”κ°€ν•˜λŠ” κ°€μž₯ μ‰¬μš΄ 방법은 ν…μŠ€νŠΈ νŒŒμΌμ—μ„œ 데이터λ₯Ό μΆ”μΆœν•΄ μ˜€κ±°λ‚˜ λ‹€λ₯Έ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μΆ”μΆœν•˜μ—¬ ν…Œμ΄λΈ”μ— 직접 λ„£λŠ” 것이닀.
  • μ—¬κΈ°μ—μ„œ PostgreSQLꡬ문은 ANSI SQL ν‘œμ€€μ„ λ”°λ₯Έλ‹€.
  • λ¬Έμžλ‚˜ λ‚ μ§œλŠ” μž‘μ€ λ”°μ˜΄ν‘œ(')둜 감싸져야 ν•˜λ©°, μ •μˆ˜μ™€ μ†Œμˆ˜λ₯Ό ν¬ν•¨ν•œ μˆ«μžλŠ” κ·Έλ ‡μ§€ μ•Šλ‹€.
  • id의 경우 데이터 νƒ€μž…μ„ bigserial둜 μ •μ˜ν–ˆκΈ° λ•Œλ¬Έμ— λ³„λ„λ‘œ 데이터λ₯Ό 넣을 ν•„μš” 없이 PostgreSQL에 데이터λ₯Ό ν•˜λ‚˜μ”© μ‚½μž…ν•  λ•Œλ§ˆλ‹€ id 열을 μ¦κ°€ν•˜λŠ” μ •μˆ˜λ‘œ μ±„μš°κ²Œ λœλ‹€.
1
2
3
4
5
6
7
8
9
10
11
Updated Rows	6
Execute time	0.018s
Start time	Wed Aug 13 16:47:47 KST 2025
Finish time	Wed Aug 13 16:47:47 KST 2025
Query	INSERT INTO teachers (first_name, last_name, school, hire_date, salary)
	VALUES ('Janet', 'Smith', 'F.D. Roosevelt HS', '2011-10-30', 36200),
		   ('Lee', 'Reynolds', 'F.D. Roosevelt HS', '1993-05-22', 65000),
		   ('Samuel', 'Cole', 'Myers Middle School', '2005-08-01', 43500),
		   ('Samantha', 'Bush', 'Myers Middle School', '2011-10-30', 36200),
		   ('Betty', 'Diaz', 'Myers Middle School', '2005-08-30', 43500),
		   ('Kathleen', 'Roush', 'F.D. Roosevelt HS', '2010-10-22', 38500)
  • λͺ…령문을 톡해 6개의 행이 μ—…λ°μ΄νŠΈ λ˜μ—ˆκ³ , 0.018s의 μ‹€ν–‰ μ‹œκ°„μ΄ μ†Œμš”λ˜μ—ˆμŒμ„ μ•Œ 수 μžˆλ‹€.

μ½”λ“œκ°€ 잘λͺ»λ˜μ—ˆμ„ λ•Œ 도움 κ΅¬ν•˜κΈ°

1
2
SQL Error [42601]: ERROR: syntax error at or near "("
  Position: 150
  • κ°€λ Ή 행을 μ—¬λŸ¬ 개 μ‚½μž…ν•˜λŠ” λͺ…λ Ήλ¬Έμ—μ„œ μ‰Όν‘œ ν•˜λ‚˜λ₯Ό λΉΌ λ¨ΉλŠ”λ‹€λ©΄, μœ„μ™€ 같이 μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό μ œκ³΅ν•œλ‹€.
  • ν•΄λ‹Ή 힌트λ₯Ό μ°Έκ³ ν•˜μ—¬ 직접 μˆ˜μ •ν•˜κ±°λ‚˜, [42601]: ERROR: syntax error at or near λ“±μ˜ λ©”μ‹œμ§€λ₯Ό 인터넷에 κ²€μƒ‰ν•˜λ©΄ λœλ‹€.

SQL을 가독성 있게 ν‘œν˜„ν•˜κΈ°

  • SQL을 μ‹€ν–‰ν•˜λŠ” λ°μ—λŠ” νŠΉλ³„ν•œ 포맷이 ν•„μš”ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šκ±°λ‚˜, λ“€μ—¬μ“°κΈ°λ₯Ό λ§ˆμŒλŒ€λ‘œ 해도 싀행은 λœλ‹€.
  • ν•˜μ§€λ§Œ κ·Έλ ‡κ²Œ 마ꡬ작이둜 μž‘μ„±ν•˜λ©΄ μΆ”ν›„ λˆ„κ΅°κ°€κ°€ ν•΄λ‹Ή μ½”λ“œλ‘œ μž‘μ—…μ„ ν•  λ•Œ κ³€λž€ν•œ 상황을 λ§žμ΄ν•˜κ²Œ λœλ‹€.
  • μ•„λž˜ μ½”λ”© μ»¨λ²€μ…˜μ„ μ°Έκ³ ν•˜μ—¬ μž‘μ„±ν•˜λ„λ‘ ν•˜μž.
  1. SELECT 같은 SQL ν‚€μ›Œλ“œλŠ” λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜μž.
    • λͺ‡λͺ‡ SQL 코더듀은 데이터 νƒ€μž…κΉŒμ§€ λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜λŠ” κ²½μš°λ„ μžˆλ‹€.
    • μ΄λŠ” νŒ€ μ»¨λ²€μ…˜μ— λ§žμΆ”λ©΄ λœλ‹€.
  2. 카멜 μΌ€μ΄μŠ€λ₯Ό μ§€μ–‘ν•˜λΌ.
    • κ·Έ λŒ€μ‹  ν…Œμ΄λΈ”μ΄λ‚˜ μ—΄κ³Ό 같은 개체 μ΄λ¦„μ—λŠ” μ†Œλ¬Έμžμ™€ 언더바(_)λ₯Ό μ‚¬μš©ν•˜μž.
  3. 절과 μ½”λ“œ 블둝은 두 μΉΈ λ˜λŠ” λ„€ 칸을 λ“€μ—¬ μ¨μ„œ κ°€λ…ν˜•μ„ λ†’μ΄μž.
    • λͺ‡λͺ‡ SQL 코더듀은 슀페이슀 λŒ€μ‹  탭을 μ„ ν˜Έν•˜κΈ°λ„ ν•œλ‹€.
    • 이 λ˜ν•œ νŒ€ μ»¨λ²€μ…˜μ— λ§žμΆ”λ©΄ λœλ‹€.
This post is licensed under CC BY 4.0 by the author.