15๋ ๊ฐ์ ๊ฐ๋ฐ ๋์ PostgreSQL 2027 DBMS์ ์๋ก์ด stable ๋ธ๋์น๊ฐ ๊ณต๊ฐ๋์์ผ๋ฉฐ, ์๋ก์ด ๋ธ๋์น์ ๋ํ ์ ๋ฐ์ดํธ๋ XNUMX๋ XNUMX์๊น์ง XNUMX๋ ์ ๊ฑธ์ณ ์ถ์๋ ์์ ์ ๋๋ค.
์ฃผ์ ํ์ :
- "INSERT ... ON CONFLICT" ํํ์๊ณผ ์ ์ฌํ SQL ๋ช ๋ น "MERGE"์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. MERGE๋ฅผ ์ฌ์ฉํ๋ฉด INSERT, UPDATE ๋ฐ DELETE ์์ ์ ๋จ์ผ ํํ์์ผ๋ก ๊ฒฐํฉํ๋ ์กฐ๊ฑด๋ถ SQL ๋ฌธ์ ๋ง๋ค ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด MERGE๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ฝ๋ ๋ ์ฝ๋๋ฅผ ์ฝ์ ํ๊ณ ๊ธฐ์กด ๋ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ๋ ํ ์ด๋ธ์ ๋ณํฉํ ์ ์์ต๋๋ค. MERGE INTO customer_account ca USING Recent_transactions t ON t.customer_id = ca.customer_id ์ผ์น ํ ์ ๋ฐ์ดํธ SET ์์ก = ์์ก + transaction_value ์ผ์นํ์ง ์์ ๊ฒฝ์ฐ ์ฝ์ (customer_id, ์์ก) VALUES(t.customer_id, t.transaction_value);
- ๋ฉ๋ชจ๋ฆฌ์ ๋์คํฌ์ ๋ฐ์ดํฐ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ํฌ๊ฒ ํฅ์๋์์ต๋๋ค. ๋ฐ์ดํฐ ์ ํ์ ๋ฐ๋ผ ํ ์คํธ ๊ฒฐ๊ณผ ์ ๋ ฌ ์๋๊ฐ 25%์์ 400%๋ก ์ฆ๊ฐํ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
- row_number(),rank(),density_rank(),count()๋ฅผ ์ฌ์ฉํ๋ ์๋์ฐ ํจ์์ ์๋๊ฐ ๋นจ๋ผ์ก์ต๋๋ค.
- "SELECT DISTINCT" ํํ์์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ๊ตฌํ๋์์ต๋๋ค.
- ์ธ๋ถ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ๋ ๋ฉ์ปค๋์ฆ ์ธ๋ถ ๋ฐ์ดํฐ ๋ํผ(postgres_fdw)๋ ์ธ๋ถ ์๋ฒ์ ๋ํ ์์ฒญ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ด์ ์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ ์ธ์๋ ๋น๋๊ธฐ ์ปค๋ฐ์ ๋ํ ์ง์์ ๊ตฌํํฉ๋๋ค.
- LZ4 ๋ฐ Zstandard(zstd) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ผ๋ถ ์ํฌ๋ก๋์์ ๋์์ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๋์คํฌ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์๋ WAL ํธ๋์ญ์ ๋ก๊ทธ๋ฅผ ์์ถํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ฅ์ ํ ๋ณต๊ตฌ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด WAL ๋ก๊ทธ์ ๋ํ๋๋ ํ์ด์ง์ ์ฌ์ ๊ฒ์ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- pg_basebackup ์ ํธ๋ฆฌํฐ์๋ gzip, LZ4 ๋๋ zstd ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฐฑ์ ํ์ผ์ ์๋ฒ์ธก ์์ถ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ ๋ช ๋ น์ ์คํํ ํ์ ์์ด ์์นด์ด๋ธ๋ฅผ ์ํด ์์ฒด ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ ๊ท์์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ผ๋ จ์ ์๋ก์ด ํจ์(regexp_count(), regexp_instr(), regexp_like() ๋ฐ regexp_substr()))๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ค์ค ๋ฒ์ ์ ํ("๋ค์ค ๋ฒ์")์ ์ง๊ณํ๋ ๊ธฐ๋ฅ์ด range_agg() ํจ์์ ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ทฐ ์์ฑ์๊ฐ ์๋ ํธ์ถ ์ฌ์ฉ์๋ก ์คํ๋๋ ๋ทฐ๋ฅผ ์์ฑํ ์ ์๋ security_invoker ๋ชจ๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ ผ๋ฆฌ์ ๋ณต์ ์ ๊ฒฝ์ฐ ํ ํํฐ๋ง ๋ฐ ์ด ๋ชฉ๋ก ์ง์ ์ง์์ด ๊ตฌํ๋์ด ๋ณด๋ธ ์ฌ๋ ์ธก์์ ๋ณต์ ๋ฅผ ์ํด ํ ์ด๋ธ์์ ๋ฐ์ดํฐ ํ์ ์งํฉ์ ์ ํํ ์ ์์ต๋๋ค. ๋ํ ์ ๋ฒ์ ์ ์ถฉ๋ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด์ ์ถฉ๋ํ๋ ํธ๋์ญ์ ์ ๊ฑด๋๋ฐ๊ณ ์ค๋ฅ๊ฐ ๊ฐ์ง๋๋ฉด ๊ตฌ๋ ์ ์๋์ผ๋ก ๋นํ์ฑํํ ์ ์์ต๋๋ค. ๋ ผ๋ฆฌ์ ๋ณต์ ๋ฅผ ํตํด 2PC(XNUMX๋จ๊ณ ์ปค๋ฐ)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- JSON ํ์์ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐํ๋ ํ์์ผ๋ก ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์๋ก์ด ๋ก๊ทธ ํ์์ธ jsonlog๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ๊ด๋ฆฌ์๋ ํน์ PostgreSQL ์๋ฒ ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ๋ณ ๊ถํ์ ์ฌ์ฉ์์๊ฒ ์์ํ ์ ์์ต๋๋ค.
- psql ์ ํธ๋ฆฌํฐ์๋ "\dconfig" ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ค์ (pg_settings)์ ๋ํ ์ ๋ณด๋ฅผ ๊ฒ์ํ๋ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์๋ฒ ์ด์์ ๋ํ ํต๊ณ๋ฅผ ์ถ์ ํ๊ธฐ ์ํด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋ณด์ฅ๋๋ฏ๋ก ํต๊ณ๋ฅผ ์์งํ๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก ์ํ๋ฅผ ๋์คํฌ์ ์ฌ์ค์ ํ๋ ๋ณ๋์ ํ๋ก์ธ์ค๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ICU ๋ก์ผ์ผ "ICU Collation"์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ด ์ ๊ณต๋์์ต๋๋ค. ์ด์ ์๋ libc ๋ก์ผ์ผ๋ง ๊ธฐ๋ณธ ๋ก์ผ์ผ๋ก ์ฌ์ฉํ ์ ์์์ต๋๋ค.
- SQL ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ WAL ๋ก๊ทธ๊ฐ ์๋ ํ์ผ์ ๋ด์ฉ์ ๊ฒ์ฌํ ์ ์๋ ๋ด์ฅ ํ์ฅ pg_walinspect๊ฐ ์ ์๋์์ต๋๋ค.
- ๊ณต์ฉ ์คํค๋ง์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์๋ฅผ ์ ์ธํ ๋ชจ๋ ์ฌ์ฉ์์ CREATE ๋ช ๋ น ์คํ ๊ถํ์ด ์ทจ์๋์์ต๋๋ค.
- Python 2์ ๋ํ ์ง์์ด PL/Python์์ ์ ๊ฑฐ๋์์ต๋๋ค. ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ ์ ๋ฐฑ์ ๋ชจ๋๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค.
์ถ๊ฐ: 19:00๋ถํฐ 20:00(MSK)๊น์ง Pavel Luzanov(Postgres Professional)์ ํจ๊ป ์ ๋ฒ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋
ผ์ํ๋ ์น ์ธ๋ฏธ๋๊ฐ ์์ ์์ ์
๋๋ค. ๋ฐฉ์ก์ ์ฐธ์ฌํ์ง ๋ชปํ์ ๋ถ๋ค์ ์ํด PGConf.Russia์์ ์งํ๋ Pavel์ 15์ ๋ณด๊ณ ์ "PostgreSQL XNUMX: MERGE and more" ๋
นํ๊ฐ ๊ณต๊ฐ๋์ด ์์ต๋๋ค.
์ถ์ฒ : opennet.ru