[PostgreSQL] CREATE TABLE AS (๊ฒฐ๊ณผ๋ฌผ์„ ํ…Œ์ด๋ธ”๋กœ)

[PostgreSQL] CREATE TABLE AS (๊ฒฐ๊ณผ๋ฌผ์„ ํ…Œ์ด๋ธ”๋กœ)

1. CREATE TABLE AS ์‚ฌ์šฉ -- ๊ธฐ๋ณธ CREATE TABLE films_recent AS SELECT * FROM films WHERE date_prod >= '2002-01-01'; --Synopsis CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name [ (column_name [, ...] ) ] [ [ WITH | WITHOUT ] OIDS ] AS query 2. CREATE TABLE AS ์˜ต์…˜ - TEMPORARY / TEMP ์ž„์‹œ ํ…Œ์ด๋ธ”๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ์„ธ์…˜์ด ์ข…๋ฃŒ๋  ์‹œ ์‚ญ์ œ๋œ๋‹ค. - WITH OIDS / WITHOUT OIDS ...

[PostgreSQL] ์‹œํ€€์Šค(Sequence)์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ•(์ƒ์„ฑ, ์‚ญ์ œ, ์กฐํšŒ ๋“ฑ)

[PostgreSQL] ์‹œํ€€์Šค(Sequence)์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ•(์ƒ์„ฑ, ์‚ญ์ œ, ์กฐํšŒ ๋“ฑ)

1. ์‹œํ€€์Šค(Sequence)์˜ ์‚ฌ์šฉ 1-1. ์ƒ์„ฑ, ์‚ญ์ œ, ์กฐํšŒ -- 101๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ธฐ๋ณธ ์‹œํ€€์Šค ์ƒ์„ฑ CREATE SEQUENCE serial START 101; -- ์‹œํ€€์Šค ๋‹ค์Œ๊ฐ’ ์กฐํšŒ SELECT nextval('serial'); -- ์‹œํ€€์Šค ํ˜„์žฌ๊ฐ’ ์กฐํšŒ select currval('serial'); -- ์‹œํ€€์Šค ์‚ญ์ œ DROP SEQUENCE serial; -- ์‹œํ€€์Šค๋กœ INSERTํ•˜๊ธฐ INSERT INTO distributors VALUES (nextval('serial'), 'nothing'); -- COPY FROM ํ›„์— ์‹œํ€€์Šค ์‹œ์ž‘๊ฐ’ ๋ณ€๊ฒฝํ•˜๊ธฐ BEGIN; COPY distributors FROM 'input_file'; SELECT setval('serial', max(id)) FROM distributors; END; -- Synopsis CREATE [ TEMPORARY | TEMP ] SEQUENCE [ IF NOT EXISTS ] ์ด๋ฆ„ [ AS ์ž๋ฃŒํ˜• ] [ INCREMENT [ BY ] ์ฆ๊ฐ€๊ฐ’ ] [ MINVALUE ์ตœ์†Œ๊ฐ’ | NO MINVALUE ] [ MAXVALUE ์ตœ๋Œ€๊ฐ’ | NO MAXVALUE ] [ START [ WITH ] ์‹œ์ž‘๊ฐ’ ] [ CACHE ์บ์‹œ ] [ [ NO ] CYCLE ] [ OWNED BY { ํ…Œ์ด๋ธ”์ด๋ฆ„.์นผ๋Ÿผ์ด๋ฆ„ | NONE } ] 1-2. ์‚ฌ์šฉ ์ค‘์ธ ์‹œํ€€์Šค ํ™•์ธ select n.nspname as sequence_schema, c.relname as sequence_name, u.usename as owner from pg_class c join pg_namespace n on n.oid = c.relnamespace join pg_user u on u.usesysid = c.relowner where c.relkind = 'S' and u.usename = current_user; 2. ์‹œํ€€์Šคย ์ƒ์„ฑ์‹œ ์ƒ์„ธย ์˜ต์…˜ - TEMPORARY or TEMP ...

[PostgreSQL] ์—ญํ•  ๋ฐ ๊ถŒํ•œ (ROLE, USER, GROUP) ๊ฐœ๋… ๋ฐ ์„ค์ •

[PostgreSQL] ์—ญํ•  ๋ฐ ๊ถŒํ•œ (ROLE, USER, GROUP) ๊ฐœ๋… ๋ฐ ์„ค์ •

1. ROLE 1-1. ROLE ์ƒ์„ฑ -- ๊ธฐ๋ณธ CREATE ROLE jonathan LOGIN; -- ๋น„๋ฐ€๋ฒˆํ˜ธ ํฌํ•จ CREATE USER davide WITH PASSWORD 'jw8s0F4'; -- ๊ถŒํ•œ ํฌํ•จ CREATE ROLE admin WITH CREATEDB CREATEROLE; -- ์‚ฌ์šฉ ๊ธฐํ•œ ํฌํ•จ CREATE ROLE miriam WITH LOGIN PASSWORD 'jw8s0F4' VALID UNTIL '2005-01-01'; -- ์‚ญ์ œ DELETE ROLE miriam; -- Synopsis CREATE ROLE name [ [ WITH ] option [ ... ] ] where option can be: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT connlimit | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp' | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid 1-2. ROLE ์ด๋ž€? CREATE ROLE์€ PostgreSQL database cluster์— ์ƒˆ๋กœ์šด ROLE์„ ์ถ”๊ฐ€ํ•œ๋‹ค.ย ROLE์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค object, ๊ถŒํ•œ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ์ด๋‹ค. ROLE์€ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ USER, GROUP ํ˜น์€ ๋‘˜๋‹ค๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ๋‹ค. CREATEROLE ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ์ง€๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ALTER ROLE, DELETE ROLE์„ ํ†ตํ•ด ๊ถŒํ•œ์„ ์ˆ˜์ •, ์‚ญ์ œ ๊ฐ€๋Šฅํ•˜๋‹ค. 1-3. ROLE ๊ถŒํ•œ๋ณ„ ํŠน์ง• SUPERUSER - ๋กœ๊ทธ์ธ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ถŒํ•œ ํฌํ•จ (ex. Role ์ƒ์„ฑ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ) LOGIN - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋กœ๊ทธ์ธํ•˜๊ธฐ ์œ„ํ•œ ๊ถŒํ•œ PASSWORD - ๋กœ๊ทธ์ธ ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ • CREATEDB - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ CREATEROLE - ROLE ์ƒ์„ฑ/์‚ญ์ œ/์ˆ˜์ • REPLICATION - REPLICATION ๊ถŒํ•œ CONNECTIONLIMIT - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์† ์นด์šดํŠธ INHERIT - ROLE ๊ถŒํ•œ๋“ค ์ƒ์† 2. USER 2-1. USER ์ƒ์„ฑ -- ๊ธฐ๋ณธ CREATE USER jonathan; -- ๋น„๋ฐ€๋ฒˆํ˜ธ ์ถ”๊ฐ€ CREATE USER davide WITH PASSWORD 'jw8s0F4'; -- ๋งŒ๋ฃŒ๊ธฐํ•œ ์ถ”๊ฐ€ CREATE USER miriam WITH PASSWORD 'jw8s0F4' VALID UNTIL '2005-01-01'; -- ๊ถŒํ•œ ์ถ”๊ฐ€ CREATE USER manuel WITH PASSWORD 'jw8s0F4' CREATEDB; --Synopsis CREATE USER name [ [ WITH ] option [ ... ] ] where option can be: SYSID uid | CREATEDB | NOCREATEDB | CREATEUSER | NOCREATEUSER | IN GROUP groupname [, ...] | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | VALID UNTIL 'abstime' 2-2. USER๋ž€? CREATE ROLE์€ PostgreSQL database cluster์— ์ƒˆ๋กœ์šด User์„ ์ถ”๊ฐ€ํ•œ๋‹ค. CREATEUSER ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ์ง€๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. 3. GROUP 3-1. GROUP ์ƒ์„ฑ --๊ธฐ๋ณธ CREATE GROUP staff; --์œ ์ € ์ถ”๊ฐ€ CREATE GROUP marketing WITH USER jonathan, david; --๊ทธ๋ฃน ์‚ญ์ œ DROP GROUP staff; -- Synopsis CREATE GROUP name [ [ WITH ] option [ ... ] ] where option can be: SYSID gid | USER username [, ...] 3-2. GROUP์ด๋ž€? CREATE GROUP์€ USER ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•œ๋‹ค.ย SUPERUSER ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ์ง€๋งŒ ์ƒ์„ฑ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ cluster ๋ ˆ๋ฒจ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ธฐ ์œ„ํ•ด GROUP, USER, ROLE์€ ๋ชจ๋‘ cluster๋‹จ์—์„œ ์ •์˜๋˜์–ด ์žˆ๋‹ค. 4. ROLE, USER, GROUP ์ฐจ์ด ROLE์€ Postgresql Database ๊ด€๋ จ ๊ถŒํ•œ๋“ค์„ ๋ชจ์•„ ๋†“์€ ๊ฒƒ์œผ๋กœ, 8.1๋ฒ„์ „๋ถ€ํ„ฐ USER์™€ GROUP์˜ ๊ฐœ๋…์ด ROLE๋กœ ํ†ตํ•ฉ๋˜์—ˆ๋‹ค. ํ˜„์žฌ ๋ฒ„์ „์—์„œ๋Š” USER์™€ ROLE์˜ ๊ธฐ๋Šฅ์€ ๋™์ผํ•˜๋ฉฐ, USER๋Š” login ๊ถŒํ•œ์ด default, ROLE์€ login ๊ถŒํ•œ์„ ๋ณ„๋„๋กœ ๋ถ€์—ฌํ•ด์•ผ ํ•˜๋Š” ์ฐจ์ด์ ๋งŒ ์žˆ๋‹ค.ย CREATE GROUP์˜ ๊ฒฝ์šฐ PostgreSQL์˜ SQL ํ‘œ์ค€์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ROLE๊ณผ ๋น„์Šทํ•œ ๊ฐœ๋…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ฐธ๊ณ  ...

[PostgreSQL] ์ œ์•ฝ์กฐ๊ฑด (Constraint) ๊ฐœ๋… ๋ฐ ์„ค์ • (Primary Keys, Foreign Keys, Unique, Not null, Check)

[PostgreSQL] ์ œ์•ฝ์กฐ๊ฑด (Constraint) ๊ฐœ๋… ๋ฐ ์„ค์ • (Primary Keys, Foreign Keys, Unique, Not null, Check)

PostgreSQL ์ œ์•ฝ์กฐ๊ฑด (Constrant)๋ž€? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž… ์™ธ์— ์ œ์•ฝ์กฐ๊ฑด๋“ค์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค. ์ œ์•ฝ์กฐ๊ฑด์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉฐ DMBS์— ๋งˆ๋‹ค ๋‹ค์–‘ํ•˜์ง€๋งŒ, ์ด๋ฒˆ ํฌ์ŠคํŠธ๋Š” PostgreSQL์˜ 5๊ฐ€์ง€ ์ œ์•ฝ ์กฐ๊ฑด๋“ค์„ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค. 1. Primary Keys(PK) 2. Foreign Keys(FK) 3. Check 4. Not-null 5. Unique 1. Primary Keys (PK) Primary Keys๋Š” ํ…Œ์ด๋ธ”์˜ ๊ฐ ROW๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์œ ๋‹ˆํฌํ•œ ์ปฌ๋Ÿผ ํ˜น์€ ์ปฌ๋Ÿผ์˜ ์กฐํ•ฉ์ด๋‹ค. Not null, Unique Constraints์˜ ์กฐํ•ฉ์ด๋‹ค. ํ…Œ์ด๋ธ”์ธ ๋‹จ 1๊ฐœ์˜ PK๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. PK ์ƒ์„ฑ ์‹œ Postgresql์€ B-tree ์ธ๋ฑ์Šค๋ฅผ ์ž๋™์œผ๋กœ ๋ถ€์—ฌํ•œ๋‹ค. B-tree ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปฌ๋Ÿผ์˜ ์กฐํ•ฉ์œผ๋กœ PK๋ฅผ ์„ค์ • ์‹œ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. (์ƒ์„ธ ๋‚ด์šฉ์€ ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.) [PostgreSQL] B-tree ์ธ๋ฑ์Šค์˜ ์›๋ฆฌ ๋ฐ ํŠน์ง• ...

[PostgreSQL] ํŠธ๋žœ์žญ์…˜(Transaction)์˜ ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ

[PostgreSQL] ํŠธ๋žœ์žญ์…˜(Transaction)์˜ ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ

1. ํŠธ๋žœ์žญ์…˜(Transaction)์ด๋ž€? ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‹คํ–‰๋˜๋Š” ์ผ๋ จ์˜ ์ž‘์—…๋“ค์ด๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฌด๊ฒฐ์„ฑ ๋ฐ ์ž‘์—… ๊ฐ„ ์ถฉ๋Œ๋ฐฉ์ง€, ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์„ ์œ„ํ•ด ํ•„์ˆ˜์ ์ธ ์š”์†Œ์ด๋‹ค. ๋‹จ์ˆœํ•œ DML ์ž‘์—…์˜ ๋กค๋ฐฑ ์šฉ๋„๋ฟ ์•„๋‹ˆ๋ผ, ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์˜ ๋ฌด๊ฒฐ์„ฑ, ์—๋Ÿฌ๋ฐœ์ƒ ์‹œ, ์—ฌ๋Ÿฌ ์œ ์ €์˜ ๋™์‹œ์ž‘์—… ๋“ฑ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. 2. ํŠธ๋žœ์žญ์…˜ ์ ์šฉ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์ปค๋งจ๋“œ ์˜ˆ์ œ์ด๋‹ค. --COMMIT ํ˜น์€ ROLLBACK์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•˜์ง€ ์•Š์œผ๋ฉด, ํ•ด๋‹น ์—…๋ฐ์ดํŠธ ๊ฑด์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. BEGIN; UPDATE accounts SET balance = balance - 100.00 WHERE name = 'Alice'; COMMIT; ํŠธ๋žœ์žญ์…˜ COMMIT ์ „์— ๋‹ค๋ฅธ ์œ ์ €๊ฐ€ ๋™์ผํ•œ row์˜ balance๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ๊ทธ์ „ ํŠธ๋žœ์žญ์…˜์ด commit ํ˜น์€ rollback ๋˜๋Š” ๊ฒƒ์„ ๋Œ€๊ธฐํ•ด์•ผํ•˜๋ฉฐ ์ด๋ฅผ lock ์ƒํƒœ๋ผ๊ณ  ํ•œ๋‹ค. (Lock์˜ ๊ฐœ๋… ๋ฐ ์ƒ์„ธ๋Š” ๋‹ค์Œ ํฌ์ŠคํŠธ์— ์ƒ์„ธํ•˜๊ฒŒ ์ •๋ฆฌ๋˜์–ด ์žˆ๋‹ค.) ...