์ง๊ณ ์ฟผ๋ฆฌ
groupBy
๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋ฃนํํฉ๋๋ค.distinct
์ค๋ณต์ ์ ๊ฑฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. SQL์DISTINCT ์ ์ ์ฌ์ฉํฉ๋๋ค.
having
๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํฉ๋๋ค.๋ฐ์ดํฐ ์์
insert
์ ๋ ์ฝ๋๋ฅผ ์ฝ์ ํฉ๋๋ค.update
๋ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.delete
๋ ์ฝ๋๋ฅผ ์ญ์ ํฉ๋๋ค.increment / decrement
์ซ์ ์ปฌ๋ผ์ ์ฆ๊ฐ/๊ฐ์์ํต๋๋ค.ํ ์ ๊ธ (Row Locking)
ํธ๋์ญ์ ๋ด์์ SELECTํ ํ์ ์ ๊ธ์ ๊ฑธ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์ ๋์ ์์ ์ ๋ฐฉ์งํฉ๋๋ค.forUpdate
์ ํ๋ ํ์ ๋ฐฐํ์ ์ ๊ธ(exclusive lock)์ ๊ฑธ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํด๋น ํ์ ์์ ํ๊ฑฐ๋ ์ ๊ธ ์ ์๋๋ก ํฉ๋๋ค.forShare
์ ํ๋ ํ์ ๊ณต์ ์ ๊ธ(shared lock)์ ๊ฑธ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํด๋น ํ์ ์์ ํ ์ ์์ง๋ง ์ฝ๊ธฐ๋ ํ์ฉํฉ๋๋ค.PostgreSQL MVCC ํ์์ ํ ์ ๊ธ(
FOR UPDATE / FOR SHARE)์ ์ผ๋ฐ SELECT ์ฝ๊ธฐ๋ฅผ ์ฐจ๋จํ์ง ์์ต๋๋ค. ์ฐจ๋จ๋๋ ๊ฒ์ ๊ฐ์ ํ์ ๋ํ ๋ค๋ฅธ ์ ๊ธ ์์ฒญ๊ณผ ์์ ์์
์
๋๋ค.๊ฒฐ๊ณผ ๊ฐ์ ธ์ค๊ธฐ
first
์ฒซ ๋ฒ์งธ ๋ ์ฝ๋๋ง ๊ฐ์ ธ์ต๋๋ค.pluck
ํน์ ์ปฌ๋ผ ๊ฐ๋ค๋ง ๋ฐฐ์ด๋ก ๊ฐ์ ธ์ต๋๋ค.๋ฒกํฐ ์ ์ฌ๋ ๊ฒ์
vectorSimilarity
pgvector๋ฅผ ์ฌ์ฉํ ๋ฒกํฐ ์ ์ฌ๋ ๊ฒ์์ ๋๋ค.method: ์ ์ฌ๋ ์ธก์ ๋ฐฉ์cosine: ์ฝ์ฌ์ธ ์ ์ฌ๋ (0~1, ๋์์๋ก ์ ์ฌ)l2: ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ (๋ฎ์์๋ก ์ ์ฌ)inner_product: ๋ด์ (๋์์๋ก ์ ์ฌ)
threshold: ์ ์ฌ๋ ํํฐ๋ง ๊ธฐ์ค๊ฐdistinctOn: ํน์ ์ปฌ๋ผ ๊ฐ๋ณ๋ก ๊ฐ์ฅ ์ ์ฌํ ๊ฒฐ๊ณผ ํ๋์ฉ๋ง ๋ฐํ
distinctOn ์ต์
distinctOn ์ต์
์ ์ฌ์ฉํ๋ฉด ํน์ ์ปฌ๋ผ ๊ฐ๋ณ๋ก ๊ฐ์ฅ ์ ์ฌํ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ฉ๋ง ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. PostgreSQL์ DISTINCT ON ์ ์ ํ์ฉํฉ๋๋ค.
distinctOn๊ณผ threshold๋ฅผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค:
distinctOn ์ต์
์ฌ์ฉ ์ ๋ด๋ถ์ ์ผ๋ก ์๋ธ์ฟผ๋ฆฌ๋ก ๊ฐ์ธ์ง๋ฉฐ, ์ธ๋ถ์์ similarity ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์์ผ๋ก
์ ๋ ฌ๋ฉ๋๋ค.Upsert (INSERT or UPDATE)
onConflict
์ถฉ๋ ์ ๋์์ ์ง์ ํฉ๋๋ค.returning
์ฝ์ /์ ๋ฐ์ดํธ๋ ๋ ์ฝ๋๋ฅผ ๋ฐํํฉ๋๋ค.์ ํธ๋ฆฌํฐ ๋ฉ์๋
clone
์ฟผ๋ฆฌ๋ฅผ ๋ณต์ ํฉ๋๋ค.debug
์์ฑ๋ SQL์ ์ฝ์์ ์ถ๋ ฅํฉ๋๋ค.toQuery
SQL ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.raw
Raw SQL์ ์คํํฉ๋๋ค.์ค์ ์์
- ํต๊ณ ์ฟผ๋ฆฌ
- ๋ฐฐ์น ์ ๋ฐ์ดํธ
- Upsert ํจํด
- ๋ฒกํฐ ๊ฒ์
- ํธ๋์ญ์
- ์กฐ๊ฑด๋ถ ์ฟผ๋ฆฌ
์ฑ๋ฅ ์ต์ ํ
๋ฐฐ์น INSERT
increment vs UPDATE
HAVING vs WHERE
์ฃผ์์ฌํญ
1. increment/decrement ๊ฐ
2. onConflict ์ ์ฝ์กฐ๊ฑด
3. returning์ PostgreSQL๋ง
4. vectorSimilarity๋ pgvector ํ์
๋ค์ ๋จ๊ณ
select
์กฐํํ ํ๋ ์ ํํ๊ธฐ
where
์กฐ๊ฑด ํํฐ๋งํ๊ธฐ
UpsertBuilder
๋๋ Upsert ์ฒ๋ฆฌํ๊ธฐ
Transactions
ํธ๋์ญ์
์ฌ์ฉํ๊ธฐ