Post

๐Ÿ˜ PostgreSQL ๊ธฐ๋ณธ โ…ค - ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ณ  ๋‚ด๋ณด๋‚ด๊ธฐ

๐Ÿ˜ PostgreSQL ๊ธฐ๋ณธ โ…ค - ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ณ  ๋‚ด๋ณด๋‚ด๊ธฐ

๐Ÿ“™ ใ€Ž์‹ค์šฉ SQLใ€์„ ์ฝ๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

๊ฐœ์š”

  • ๊ตฌ๋ถ„๋œ ํ…์ŠคํŠธ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ PostgreSQL์€ COPY ๋ช…๋ น์„ ํ†ตํ•ด ๋Œ€๋Ÿ‰์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • PostgreSQL ์ „์šฉ์ธ COPY ๋ช…๋ น์—๋Š” ์—ด์„ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ์ œ์™ธํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๊ตฌ๋ถ„๋œ ํ…์ŠคํŠธ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ต์…˜์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ COPY๋Š” ํ…Œ์ด๋ธ” ๋˜๋Š” ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ๋ถ„๋œ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ๋„ ํ•œ๋‹ค.
  • ์ด ๊ธฐ์ˆ ์€ ๋™๋ฃŒ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ์—‘์…€ ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ ๊ณผ์ •์„ ๋”ฐ๋ฅธ๋‹ค.
  1. ๊ตฌ๋ถ„๋œ ํ…์ŠคํŠธ ํŒŒ์ผ ํ˜•์‹์˜ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„
  2. ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ํ…Œ์ด๋ธ” ์ƒ์„ฑ
  3. COPY ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
  • ์ฐธ๊ณ ๋กœ Microsoft ์—‘์„ธ์Šค ๋˜๋Š” MySQL๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ PostgreSQL๋กœ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธฐ๋ ค๋ฉด ์„œ๋“œํŒŒํ‹ฐ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๊ตฌ๋ถ„๋œ ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ์ž‘์—…ํ•˜๊ธฐ

  • ๊ตฌ๋ถ„๋œ ํ…์ŠคํŠธ ํŒŒ์ผ์—์„œ๋Š” ๋ฐ์ดํ„ฐ ํ–‰์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ ํ–‰์€ ํ…Œ์ด๋ธ”์˜ ํ•œ ํ–‰์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๊ฐ ํ–‰์—์„œ ๋ฌธ์ž๋Š” ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ ์—ด์„ ๋ถ„๋ฆฌํ•˜๊ฑฐ๋‚˜ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  • ์‰ผํ‘œ๊ฐ€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋”ฐ๋ผ์„œ ์ž์ฃผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์€ ์‰ผํ‘œ๋กœ ๋ถ„๋ฆฌ๋œ ๊ฐ’์„ ์˜๋ฏธํ•˜๋Š” CSV ํŒŒ์ผ์ด๋‹ค.

ํ—ค๋” ํ–‰ ์ฒ˜๋ฆฌํ•˜๊ธฐ

  • ๊ตฌ๋ถ„๋œ ํ…์ŠคํŠธ ํŒŒ์ผ์—๋Š” ๋ณดํ†ต ํ—ค๋” ํ–‰์ด ํฌํ•จ๋œ๋‹ค.
  • ํ—ค๋” ํ–‰์€ ๊ฐ ์—ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž๋Š” ํ—ค๋” ํ–‰์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋ถ„๋œ ํŒŒ์ผ์˜ ์—ด์„ ๊ฐ€์ ธ์˜ค๊ธฐ ํ…Œ์ด๋ธ”์˜ ์˜ฌ๋ฐ”๋ฅธ ์—ด์— ๋งคํ•‘ํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ PostgreSQL๋Š” ํ—ค๋” ํ–‰์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋”ฐ๋ผ์„œ ํ—ค๋” ํ–‰์„ ์ œ์™ธํ•˜๊ธฐ ์œ„ํ•ด COPY ๋ช…๋ น์—์„œ ํŠน์ • ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์€ ๊ฐ’ ์ฝ์–ด์˜ค๊ธฐ

  • ์‰ผํ‘œ๋ฅผ ์—ด ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ž ์žฌ์ ์ธ ๋”œ๋ ˆ๋งˆ๊ฐ€ ๋„์‚ฌ๋ฆฌ๊ณ  ์žˆ๋‹ค.
  • ๊ฐ€๋ น โ€œ์•ˆ๋…•ํ•˜์„ธ์š”, ์ž๊ธฐ์†Œ๊ฐœ์ž…๋‹ˆ๋‹ค.โ€์™€ ๊ฐ™์ด ์—ด์˜ ๊ฐ’์— ์‰ผํ‘œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?
  • ์ด๋Ÿฐ ๊ฒฝ์šฐ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๊ฐ€ ํฌํ•จ๋œ ์—ด์„ ํ…์ŠคํŠธ ํ•œ์ •์ž๋ผ๋Š” ์ž„์˜์˜ ๋ฌธ์ž๋กœ ๊ฐ์‹ธ SQL์— ํฌํ•จ๋œ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋ฅผ ๋ฌด์‹œํ•˜๋„๋ก ์ง€์‹œํ•œ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„ ๊ตฌ๋ถ„๋œ ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ…์ŠคํŠธ ํ•œ์ •์ž๋Š” ํฐ๋”ฐ์˜ดํ‘œ์ด๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ PostgreSQL์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ์—ด ์•ˆ์˜ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋ฅผ ๋ฌด์‹œํ•˜์ง€๋งŒ, ๊ฐ€์ ธ์˜ค๊ธฐ์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํ…์ŠคํŠธ ํ•œ์ •์ž๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ PostgreSQL์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ์—ด ์•ˆ์—์„œ ํ…์ŠคํŠธ ํ•œ์ •์ž๊ฐ€ ๋‘ ๋ฒˆ ์—ฐ์†์œผ๋กœ ๋‚˜์˜ค๋ฉด ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.
1
2
3
4
5
# PostgreSQL์ด ์ฝ์€ ์—ด
"123 Main St."" Apartment 200"

# PostgreSQL์ด ์ฒ˜๋ฆฌํ•œ ์—ด
123 Main St." Apartment 200

COPY๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

1
2
3
COPY table_name
FROM 'C:\directory\file.csv'
WITH (FORMAT CSV, HEADER);
  • ๋จผ์ € ์†Œ์Šค ํŒŒ์ผ์˜ ์—ด๊ณผ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํ™•์ธํ•˜๊ณ  ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•  ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
  • ์ฝ”๋“œ๋Š” COPY ํ‚ค์›Œ๋“œ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ๋Œ€์ƒ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์ด ๋’ค๋”ฐ๋ฅธ๋‹ค.
  • FROM ํ‚ค์›Œ๋“œ๋Š” ์ด๋ฆ„์„ ํฌํ•จํ•˜์—ฌ ์†Œ์Šค ํŒŒ์ผ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.
  • ์šด์˜์ฒด์ œ์— ๋”ฐ๋ผ ๊ฒฝ๋กœ ๋ฌธ์ž์—ด์˜ ํ˜•์‹์ด ๋‹ค๋ฅด๋‹ค.
  • WITH ํ‚ค์›Œ๋“œ๋Š” ์›ํ•˜๋Š” ์˜ต์…˜์„ ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜, ์ถœ๋ ฅ ํ˜•์‹์— ๋งž๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์ง€์ •ํ•œ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
  1. ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ํŒŒ์ผ ํ˜•์‹
    • FORMAT ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ํŒŒ์ผ์˜ ํ˜•์‹์„ ์ง€์ •ํ•œ๋‹ค.
    • ํŒŒ์ผ ํ˜•์‹์—๋Š” CSV, TEXT, BINARY ๋“ฑ์ด ์žˆ๋‹ค.
  2. ํ—ค๋” ํ–‰ ํฌํ•จ ์—ฌ๋ถ€
    • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ HEADER ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค ํŒŒ์ผ์— ์ œ์™ธ ํ•  ํ—ค๋” ํ–‰์ด ์žˆ์Œ์„ ์ง€์ •ํ•œ๋‹ค.
    • ๋‚ด๋ณด๋‚ผ ๋•Œ๋Š” HEADER๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ—ค๋” ํ–‰์„ ํฌํ•จํ•˜๋„๋ก ์ง€์‹œํ•œ๋‹ค.
  3. ๊ตฌ๋ถ„ ๊ธฐํ˜ธ
    • DELIMITER ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ค๊ธฐ ๋˜๋Š” ๋‚ด๋ณด๋‚ด๊ธฐ ํŒŒ์ผ์—์„œ ๊ตฌ๋ถ„์ž๋กœ ์‚ฌ์šฉํ•  ๋ฌธ์ž๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  4. ์ธ์šฉ ๋ฌธ์ž
    • QUOTE ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํฐ๋”ฐ์˜ดํ‘œ๊ฐ€ ์•„๋‹Œ ํ…์ŠคํŠธ ํ•œ์ •์ž๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์นด์šดํ‹ฐ ์ธ๊ตฌ์กฐ์‚ฌ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

  • ์ง€๊ธˆ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋Š” ์ธ๊ตฌ์กฐ์‚ฌ์˜ ์—ฐ๊ฐ„ ์ธ๊ตฌ ์ถ”์ •์น˜์ด๋‹ค.
  • ์ด๋“ค์€ ์ตœ๊ทผ์˜ 10๋…„ ์ธ๊ตฌ ์กฐ์‚ฌ๋ฅผ ํ†ตํ•ด ์ถœ์ƒ๊ณผ ์‚ฌ๋ง, ๊ตญ๋‚ด ๋ฐ ๊ตญ์ œ ์ด์ฃผ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋งค๋…„ ๊ตญ๊ฐ€์™€ ์ฃผ, ์นด์šดํ‹ฐ ๋ฐ ๊ธฐํƒ€ ์ง€์—ญ์˜ ์ธ๊ตฌ ์ถ”์ •์น˜๋ฅผ ์‚ฐ์ถœํ•œ๋‹ค.

us_counties_pop_est_2019 ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE us_counties_pop_est_2019 (
	state_fips text,
	county_fips text,
	region smallint,
	state_name text,
	county_name text,
	area_land bigint,
	area_water bigint,
	internal_point_lat numeric(10,7),
	internal_point_lon numeric(10,7),
	pop_est_2018 integer,
	pop_est_2019 integer,
	births_2019 integer,
	deaths_2019 integer,
	international_migr_2019 integer,
	domestic_migr_2019 integer,
	residual_2019 integer,
	CONSTRAINT counties_2019_key PRIMARY KEY (state_fips, county_fips)
);

์ธ๊ตฌ ์กฐ์‚ฌ ๋ฐ์ดํ„ฐ ์—ด๊ณผ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ดํ•ดํ•˜๊ธฐ

  • ์กด์žฌํ•œ๋‹ค๋ฉด, ๋ฐ์ดํ„ฐ ์‚ฌ์ „์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ์˜จ๋ผ์ธ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
  • state_fips, county_fips ๋“ฑ ์ฝ”๋“œ ๊ฐ’์€ ์ •์ˆ˜๋กœ ์ €์žฅํ•˜๋ฉด 0์œผ๋กœ ์‹œ์ž‘๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋ง๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ text ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ๋˜ํ•œ ์ด ๊ฐ’๋“ค๋กœ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ผ๋„ ์—†๋‹ค.
  • region์—๋Š” 1์—์„œ 4๊นŒ์ง€์˜ ์ˆซ์ž๊ฐ€ ์ €์žฅ๋˜๋ฏ€๋กœ smallint ํƒ€์ž…์œผ๋กœ ์—ด์„ ์ •์˜ํ•œ๋‹ค.
  • state_name, county_name์—๋Š” text ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์นด์šดํ‹ฐ์— ์žˆ๋Š” ํ† ์ง€์™€ ๋ฌผ์— ๋Œ€ํ•œ ๋ฉด์ ์€ area_land, area_water์— ๊ธฐ๋ก๋œ๋‹ค.
  • ์ด ๋‘˜์„ ํ•ฉ์น˜๋ฉด ์นด์šดํ‹ฐ์˜ ์ „์ฒด ๋ฉด์ ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์•Œ๋ž˜์Šค์นด์ฒ˜๋Ÿผ ๋ˆˆ์ด ์ž”๋œฉ ์Œ“์ธ ์ง€์—ญ์€ integer ํƒ€์ž…์˜ ์ตœ๋Œ“๊ฐ’์„ ๋„˜๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฏ€๋กœ bigint ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • internal_point_lat, internal_point_lon์€ ๊ฐ๊ฐ ๋‚ด์ ์˜ ์œ„๋„์™€ ๊ฒฝ๋„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์ธ๊ตฌ์กฐ์‚ฌ๊ตญ์€ ๋‚ด์ ์„ ๊ธฐ๋กํ•  ๋•Œ ์†Œ์ˆ˜์  ์ดํ•˜ 7์ž๋ฆฌ๊นŒ์ง€ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ •์ˆ˜ ๋ถ€๋ถ„์˜ ์ตœ๋Œ“๊ฐ’์ธ 180๊นŒ์ง€ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•„์š”ํ•œ ์ž๋ฆฟ์ˆ˜๋Š” ์ด 10์ž๋ฆฌ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฏ€๋กœ numeric(10, 7)์„ ์‚ฌ์šฉํ•œ๋‹ค.

COPY๋กœ ์ธ๊ตฌ์กฐ์‚ฌ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

1
2
3
COPY us_counties_pop_est_2019
FROM 'C:\YourDirectory\us_counties_pop_est_2019.csv'
WITH (FORMAT CSV, HEADER);
  • Docker๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด docker cp us_counties_pop_est_2019.csv postgres-practice:/tmp/my_data.csv ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ์— ํŒŒ์ผ์„ ๋„˜๊ฒจ์•ผ ํ•œ๋‹ค.
1
2
3
4
5
6
7
Updated Rows	3142
Execute time	0.032s
Start time	Fri Aug 15 21:09:42 KST 2025
Finish time	Fri Aug 15 21:09:42 KST 2025
Query	COPY us_counties_pop_est_2019
	FROM 'C:\YourDirectory\us_counties_pop_est_2019.csv'
	WITH (FORMAT CSV, HEADER)

๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ ๊ฒ€์‚ฌํ•˜๊ธฐ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- ๋ชจ๋“  ์—ด๊ณผ ํ–‰ ์กฐํšŒ
SELECT * FROM us_counties_pop_est_2019;

-- area_land ๊ฐ’์ด ํฐ ์„ธ ๊ฐœ์˜ ํ–‰ ์กฐํšŒ
SELECT county_name, state_name, area_land
FROM us_counties_pop_est_2019
ORDER BY area_land DESC
LIMIT 3;

-- internal_point_lon ๊ฐ’์ด ํฐ ๋‹ค์„ฏ ๊ฐœ์˜ ํ–‰ ์กฐํšŒ
SELECT county_name, state_name, internal_point_lat, internal_point_lon
FROM us_counties_pop_est_2019
ORDER BY internal_point_lon DESC
LIMIT 5;

COPY๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ด ํ•˜์œ„ ์ง‘ํ•ฉ ๊ฐ€์ ธ์˜ค๊ธฐ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE supervisor_salaries (
	id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
	town text,
	county text,
	supervisor text,
	start_date text,
	salary numeric(10,2),
	benefits numeric(10,2)
);

-- ์˜ค๋ฅ˜ ๋ฐœ์ƒ
COPY supervisor_salaries
FROM 'C:\YourDirectory\supervisor_salaries.csv'
WITH (FORMAT CSV, HEADER);

-- CSV ํ…Œ์ด๋ธ” ์—ด ์ง€์ •
COPY supervisor_salaries (town, supervisor, salary)
FROM 'C:\YourDirectory\supervisor_salaries.csv'
WITH (FORMAT CSV, HEADER);
  • ํ…Œ์ด๋ธ” ์ƒ์„ฑ ํ›„ COPY ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด CSV ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค.
  • ๋‹ค๋งŒ ํ…Œ์ด๋ธ” ์—ด์„ ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด DB ๋‚ด ํ…Œ์ด๋ธ” ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์—ด์ธ id ๊ฐ’์ด CSV์—๋Š” ์—†์œผ๋ฏ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฏ€๋กœ COPY ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ์‹œ CSV ํ…Œ์ด๋ธ”์˜ ์—ด๋„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.
1
2
3
4
5
6
7
Updated Rows	5
Execute time	0.012s
Start time	Fri Aug 15 21:18:33 KST 2025
Finish time	Fri Aug 15 21:18:33 KST 2025
Query	COPY supervisor_salaries (town, supervisor, salary)
	FROM 'C:\YourDirectory\supervisor_salaries.csv'
	WITH (FORMAT CSV, HEADER)
1
SELECT * FROM supervisor_salaries ORDER BY id LIMIT 2;
  • ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
idtowncountysupervisorstart_datesalarybenefits
1Anytownย Jonesย 67,000ย 
2Bumblyburgย Larryย 74,999ย 

COPY๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ–‰์˜ ์ผ๋ถ€๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ

1
2
3
4
5
6
COPY supervisor_salaries (town, supervisor, salary)
FROM 'C:\YourDirectory\supervisor_salaries.csv'
WITH (FORMAT CSV, HEADER)
WHERE town = 'New Brillig';

SELECT * FROM supervisor_salaries;
  • WHERE ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํŠน์ • ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ํ–‰๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์—์„œ ์—ด์— ๊ฐ’ ์ถ”๊ฐ€ํ•˜๊ธฐ

  • CSV ํŒŒ์ผ์˜ ์นด์šดํ‹ฐ ์—ด์— Mills๋ผ๋Š” ์ด๋ฆ„์ด ์—†๋Š”๋ฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์—์„œ ๊ทธ ๊ฐ’์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?
  • ๋ฐ”๋กœ CSV ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์ „์— ์ž„์‹œ ํ…Œ์ด๋ธ”์— ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ž„์‹œ ํ…Œ์ด๋ธ”์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ธ์…˜์„ ์ข…๋ฃŒํ•˜๊ธฐ ์ „๊นŒ์ง€๋งŒ ์กด์žฌํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค์‹œ ์—ด๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ์„ ๋Š์œผ๋ฉด ํ•ด๋‹น ํ…Œ์ด๋ธ”์€ ์‚ฌ๋ผ์ง„๋‹ค.
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TEMPORARY TABLE supervisor_salaries_temp
(LIKE supervisor_salaries INCLUDING ALL);

COPY supervisor_salaries_temp (town, supervisor, salary)
FROM 'C:\YourDirectory\supervisor_salaries.csv'
WITH (FORMAT CSV, HEADER);

INSERT INTO supervisor_salaries (town, county, supervisor, salary)
SELECT town, 'Mills', supervisor, salary
FROM supervisor_salaries_temp;

DROP TABLE supervisor_salaries_temp;
  • ์ž„์‹œ ํ…Œ์ด๋ธ”๋กœ CSV ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ, ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ count ์—ด์˜ ๊ฐ’์„ Mills๋กœ ๋ฐ”๊พผ ๊ฐ’์„ ์›๋ณธ ํ…Œ์ด๋ธ”์— ์‚ฝ์ž…ํ•œ๋‹ค.
  • ์ดํ›„ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•œ๋‹ค.
  • ๋ฌผ๋ก  ์ง์ ‘ ์‚ญ์ œํ•˜์ง€ ์•Š์•„๋„ ์—ฐ๊ฒฐ์ด ๋Š์–ด์งˆ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์‚ฌ๋ผ์ง€์ง€๋งŒ, ๋‹ค๋ฅธ CSV ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€ ์ƒˆ๋กœ์šด ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด๋ ‡๊ฒŒ ์‚ญ์ œํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • SELECT * FROM supervisor_salaries ORDER BY id LIMIT 2;๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
idtowncountysupervisorstart_datesalarybenefits
21AnytownMillsJonesย 67,000ย 
22BumblyburgMillsLarryย 74,999ย 

COPY๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋‚ด๋ณด๋‚ด๊ธฐ

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ผ ๋•Œ๋Š” FROM ์ ˆ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋Œ€์‹  TO๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ „์ฒด ํ…Œ์ด๋ธ”์„ ๋‚ด๋ณด๋‚ด๊ฑฐ๋‚˜ ๋‹จ ๋ช‡ ๊ฐœ์˜ ์—ด๋งŒ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์กฐ์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ด๊ธฐ๋„ ํ•œ๋‹ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- COPY๋กœ ์ „์ฒด ํ…Œ์ด๋ธ” ๋‚ด๋ณด๋‚ด๊ธฐ
COPY us_counties_pop_est_2019
TO 'C:\YourDirectory\us_counties_export.txt'
WITH (FORMAT CSV, HEADER, DELIMITER '|');

-- COPY๋กœ ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์—ด๋งŒ ๋‚ด๋ณด๋‚ด๊ธฐ
COPY us_counties_pop_est_2019
	(county_name, internal_point_lat, internal_point_lon)
TO 'C:\YourDirectory\us_counties_latlon_export.txt'
WITH (FORMAT CSV, HEADER, DELIMITER '|');

-- COPY๋ฅผ ์ด์šฉํ•œ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋‚ด๋ณด๋‚ด๊ธฐ
COPY (
	SELECT county_name, state_name
	FROM us_counties_pop_est_2019
	WHERE county_name ILIKE '%mill%'
	 )
TO 'C:\YourDirectory\us_counties_mill_export.csv'
WITH (FORMAT CSV, HEADER);
  • ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋ฅผ ์‰ผํ‘œ๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, csv ํŒŒ์ผ์ด ์•„๋‹Œ txt ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
This post is licensed under CC BY 4.0 by the author.