RFQ Aurora PostgreSQL — 데이터베이스 구조 분석

cluster rfq-aurora-prod · database rfq · PostgreSQL 17.7 on aarch64-unknown-linux-gnu
28 GB총 용량
41테이블
6,301,109+총 행(상위40 합)
533컬럼
133인덱스
28 GB
데이터베이스 크기
41
테이블 수
533
총 컬럼
133
인덱스
37
외래키

데이터 완성도 — 채움률 한눈에 보기

읽는 법 · 채움률 = 100% − (NULL% + 빈문자열%). 샘플(테이블당 ≤400행) 기준 추정. 빨강=비어있음초록=채워짐. 빨강이 많을수록 데이터 이슈.

22 데이터 보유 테이블 18 빈 테이블 366 분석 컬럼 64 완전히 빈 컬럼 243 양호+충실

① 전체 컬럼 채움률 분포 (366개)

완전히 빔 (0%) 64 (17%)
희소 (<40%) 36 (10%)
부분 (40–70%) 23 (6%)
양호 (70–95%) 15 (4%)
충실 (≥95%) 228 (62%)

② 테이블별 평균 채움률 (낮은 순 = 우선 점검)

buyer_record_clean
44%
buyer_supplier_matches11 dead
49%
buyer_record_enrichments
54%
enrichments10 dead
55%
rfqs12 dead
62%
buyer_records10 dead
65%
sources6 dead
66%
agent_runs3 dead
74%
scraper_cost_events1 dead
78%
campaigns4 dead
78%
sourcing_shortlist1 dead
86%
buyer_clusters1 dead
87%
app_settings
88%
scraper_runs2 dead
88%
industry_taxonomy1 dead
89%
sourcing_runs1 dead
94%
company_profiles1 dead
94%
email_verifications
99%
rfq_source_links
100%
identity_backup_20260603
100%
rate_limit_buckets
100%
export_events
100%

③ 컬럼 완성도 히트맵 — 완성도 하위 8개 테이블

각 칸 = 컬럼 1개 (마우스 올리면 컬럼명·채움률). 빨간 칸 = 거의/완전히 빈 컬럼.

buyer_record_clean22col · 평균 44%
buyer_supplier_matches29col · 평균 49%
buyer_record_enrichments23col · 평균 54%
enrichments22col · 평균 55%
rfqs42col · 평균 62%
buyer_records50col · 평균 65%
sources22col · 평균 66%
agent_runs16col · 평균 74%

④ 완전히/거의 빈 컬럼 Top 28 (총 80개 <10% 채움)

테이블컬럼채움률비어있는 비율
agent_runserror0%100%
agent_runssfn_task_token0%100%
agent_runsbuyer_record_id0%100%
buyer_clusterslast_contacted_at0%100%
buyer_recordsbuyer_cluster_id0%100%
buyer_recordsstatus_note0%100%
buyer_recordsstatus_by0%100%
buyer_recordsstatus_at0%100%
buyer_recordsassigned_to0%100%
buyer_recordsexpires_at0%100%
buyer_recordsdeleted_at0%100%
buyer_recordsdedup_hash0%100%
buyer_supplier_matchesbuyer_record_id0%100%
buyer_supplier_matchessonnet_score0%100%
buyer_supplier_matchessonnet_rationale0%100%
buyer_supplier_matchesfit_dimensions0%100%
buyer_supplier_matcheshaiku_run_id0%100%
buyer_supplier_matchessonnet_run_id0%100%
buyer_supplier_matchesstatus_by0%100%
buyer_supplier_matchesstatus_at0%100%
buyer_supplier_matchesstatus_note0%100%
buyer_supplier_matchesrefreshed_at0%100%
buyer_supplier_matchesexpires_at0%100%
campaignspaused_until0%100%
campaignsaudience_snapshot_at0%100%
campaignsreply_to0%100%
campaignsdeleted_at0%100%
company_profilesmin_order_value0%0% + blank 100%

데이터 정확도·품질 감사

방법 · 테이블당 최대 400행 샘플(대용량은 TABLESAMPLE SYSTEM, 소용량은 random) 기반 컬럼 프로파일링 → 서브에이전트 4팀 병렬 정확도 감사. 모든 비율은 샘플 추정치이며 전수 검증 아님.

종합 진단 · 구조·인덱스·키 무결성은 양호하나, 코어 파이프라인 산출물(분류·임베딩·스코어·dedup·LLM 재랭킹)이 대규모로 미완이고 enrichment 데이터에 placeholder/리터럴 오염이 광범위. 데이터 '있음'보다 '정확도·완결성'이 핵심 리스크.

40 프로파일 21 데이터 보유 19 빈 테이블 16 P0·P1 발견 19 P2 관찰

전사 핵심 리스크 (Cross-cutting)

P0문자열 리터럴 "null" 오염buyer_record_enrichments(28만행)
SQL NULL 대신 문자열 'null'이 11개 컬럼에 저장 — linktree 65%·tiktok 62%·youtube 66%·facebook·instagram·decision_maker·company_domain·phone, sources JSON 내 "url":"null". 필터·발송·조인 로직 오동작 위험.
→ 'null' 문자열 → SQL NULL 일괄 정규화. ETL 적재부 근본 수정.
P1Dedup 미작동 정황buyer_records(350만행)
dedup_hash 100% null, dedup_cluster_id 99% null, buyer_cluster_id 100% null인데 company_name_normalized 동일값 중복 관측. 350만 행 중복제거가 동작하지 않는 정황.
→ dedup 잡 재가동 + hash 백필.
P1LLM 매칭 파이프라인 미완buyer_supplier_matches(92만행)
haiku_* 97% null, sonnet_*·fit_dimensions 100% null → final_score(avg 0.75)가 사실상 vector_sim(avg 0.76) 패스스루. LLM 재랭킹이 거의 미적용.
→ 스코어링 잡 적체 점검, final_score를 raw 유사도와 구분 표기.
P1Vertical 라벨 정확도 결함buyer_records · sources
is_beauty=no·industry=unknown인데 vertical=beauty 다수(건설·캐시론 사이트가 beauty). sources의 world_bank_procurement도 vertical=beauty 오라벨.
→ vertical 산출 로직을 is_beauty/industry와 정합성 검증·재태깅.
P1이메일 자산 실효 품질 저하buyer_record_enrichments · email_verifications
email_confidence=0 비중 73.8%(avg 0.17), 다수 generic info@/role 계정(52%), invalid/unknown 31.7%, email_domain_mismatch 플래그.
→ confidence=0·generic 계정 발송 제외 게이트, 검증 후 발송.
P1스크래퍼 수율 저조scraper_runs(9.9천)
rows_kept=0 49.8%, rows_in=0 25%, status=partial 49% — 절반 가까운 런이 0행 수집.
→ 0행·partial 빈발 소스 원인 분석, 셀렉터·차단(403·429) 점검.
P1단위 오염 — credits_usedemail_verifications
전 행 6자리(674K~728K)로 균일 → 건당 사용량이 아닌 잔여 크레딧 카운터로 보임. 과금·집계 오해 위험.
→ 컬럼 의미·단위 정의 확인.
P1enrichment 커버리지 미달buyer_record_clean(4.2천) · buyer_records
founded_year 96% · capital 97% · company_size 62% null; score/scored_at 95% · enriched_at 89% · embedding 50% null. placeholder N/A·Unknown·Not specified 혼입.
→ 커버리지 KPI 설정, 더미값 NULL 정규화, 소스 보강.

그룹별 상세 (서브에이전트 4팀 병렬 감사)

그룹0 — 코어 buyer 데이터8 tables
테이블행수심각도발견 내용권장 조치
buyer_records3,545,276P1dedup 3종 컬럼 거의/전부 null + 정규화명 중복; vertical cross-column 불일치; score/enriched/embedding 50~95% null; 저신뢰 분류 ~17%dedup 재가동, vertical 검증, 저confidence 재처리
buyer_records(cont.)P2prefecture·city_clean 99.8% null+'N/A' 죽은 컬럼; tax_id 64.8% null+최빈값 '0'; status_*·assigned_to 100% null죽은 컬럼 drop, tax_id '0'→NULL
buyer_record_enrichments282,729P0문자열 'null' 11개 컬럼 오염; 플랫폼 도메인(pinterest·shopee) 회사 오매핑; email_confidence=0 73.8%'null'→NULL, platform 가드, generic 메일 제외
sources216P1world_bank=beauty 오라벨; 죽은 설정 컬럼 다수 100% null; max_pages=0 비활성 의심; 전 소스 grey-area 스크랩vertical 재태깅, max_pages=0 점검
scraper_cost_events9,719P2run_id 100% null(FK 전무), source_id 45% null → LLM 비용 소스별 분해 불가run_id 채우기 또는 폐기 결정
export_events3P2row_count 50,000 상한 근접 → export 잘림 가능성; 동일 filter_hash 반복50k cap 도달 시 분할/경고
campaigns1OKdraft 1건, from_name/email 경미 불일치
press_mentions·selector_configs·buyer_lists·saved_views0OK빈 테이블(미사용/신규)관찰
그룹1 — RFQ·인증·검증6 tables
테이블행수심각도발견 내용권장 조치
rfqs219,736P1buyer_name 100% null인데 buyer_company에 인물명(person 245/400) 매핑 역전 의심; quantity 수치·자유텍스트 혼재; buyer_country_iso='XX' 18.3%; 12개 컬럼 100% nullname/company ETL 검증, quantity 분리, XX→NULL
rfq_source_links194,751OKnull 0%, url distinct 100% — 무결성 양호
email_verifications8,197P1credits_used 6자리 균일(잔여 카운터 의심); is_role 52%, invalid/unknown 31.7%단위 정의 확인, 적격률 모니터
sourcing_shortlist미상P1fit_score max 42(0~10 스케일 이탈); verdict=weak 97.8% 쏠림; agent_run_id 100% nullfit_score 클램프, 연결 점검
company_profiles1P21행만, target_*·certifications·keywords 모두 [] 미충진 → weak 매칭 원인 가능타겟 메타 채우기
users·sessions·company_cache·company_enrichment_jobs·scraper_run_events0OK빈 테이블의도 공란 확인
그룹2 — 매칭·스크래핑·클린7 tables
테이블행수심각도발견 내용권장 조치
buyer_supplier_matches920,501P1haiku_* 97% / sonnet_* 100% null → final_score가 vector_sim 패스스루(LLM 재랭킹 미적용); buyer_record_id 100% null 조인 누락스코어링 잡 점검, final_score 구분 표기
scraper_runs9,937P1rows_kept=0 49.8%, partial 49%; cost·heartbeat 미수집; config_snapshot 96% '{}'0행 소스 분석, 차단 점검
buyer_record_clean4,174P1enrichment 결측(founded 96%·capital 97%·company_size 62% null); placeholder N/A·Unknown 혼입; enum 표기 불일치(GK vs GodoKaisha)커버리지 KPI, 더미 NULL화, 코드 정규화
sourcing_runs미상P2ANALYZE 미실행, strong_count=0·cost=0ANALYZE, strong 0 모니터
industry_taxonomy52P2aliases 100% null(별칭 미정의)별칭 매칭 쓰면 채움
rate_limit_buckets60OK휘발성 버킷, key unique
suppressions·run_log·deletion_requests·allowed_emails0P2빈 테이블. allowed_emails가 인증 게이트면 의도 확인확인
그룹3 — 에이전트·잔재 테이블7 tables
테이블행수심각도발견 내용권장 조치
agent_runs908,497P1rfq_id null 31.8%(trace로 이원화); failed 13.8%가 error 100% null(사유 미기록); buyer_record_id·sfn_task_token dead columnFK 정규화, 실패 error 적재 보장
buyer_clusters13,150P1company_name placeholder 'User name' + 개인 인명 다수(컬럼명-내용 불일치); last_contacted_at·bounce 미연동더미 필터, company/person 구분
identity_backup_2026060320,030P1백업 테이블(날짜 접미사)이 운영 DB에 2만행 잔존; identity_type=unknown 8.25%아카이브/드롭, 운영 스키마서 분리
verificationToken0P1빈 테이블 + camelCase 명명(나머지 snake_case) → NextAuth 잔재, 네이밍 규칙 위반드롭 또는 verification_tokens로 개명
enrichments표본 1행P2단건상 unverified_catchall + confidence 0.35, quality_* 전량 null표본 확대 재프로파일, 저신뢰 발송 게이트
app_settings표본 2행P2updated_by null 50% 감사 추적 결손updated_by NOT NULL
campaign_members·pending_runs·rfq_status_history·accounts0P2빈 테이블. accounts는 NextAuth 잔재 가능사용 계획 확인

⚠️ 모든 비율은 테이블당 ≤400행 샘플 기반 추정치이며 전수 검증이 아닙니다. P0=무결성 위협(즉시), P1=품질 저하(검토), P2=경미/관찰.

테이블 (스토리지 크기순)

#테이블행 수총 크기비중컬럼인덱스
1 buyer_recordspublic 3,600,245 25 GB
88.1% 50 18
2 rfqspublic 242,711 2398 MB
8.4% 42 19
3 buyer_supplier_matchespublic 943,350 427 MB
1.5% 29 9
4 agent_runspublic 963,160 325 MB
1.1% 16 7
5 buyer_record_enrichmentspublic 283,498 151 MB
0.5% 23 2
6 rfq_source_linkspublic 201,554 98 MB
0.3% 4 1
7 scraper_runspublic 10,220 4664 kB
0.0% 17 3
8 buyer_clusterspublic 13,349 4232 kB
0.0% 8 2
9 scraper_cost_eventspublic 9,817 3640 kB
0.0% 9 3
10 email_verificationspublic 8,455 1864 kB
0.0% 10 3
11 buyer_record_cleanpublic 4,300 1576 kB
0.0% 22 1
12 identity_backup_20260603public 20,030 1224 kB
0.0% 3 0
13 sourcespublic 216 400 kB
0.0% 22 1
14 sourcing_shortlistpublic 46 144 kB
0.0% 14 4
15 sourcing_runspublic 2 120 kB
0.0% 16 4
16 enrichmentspublic 1 88 kB
0.0% 22 4
17 campaignspublic 1 80 kB
0.0% 18 3
18 company_profilespublic 1 80 kB
0.0% 17 3
19 rate_limit_bucketspublic 63 64 kB
0.0% 3 1
20 campaign_memberspublic 0 48 kB
0.0% 15 5
21 press_mentionspublic 0 48 kB
0.0% 12 5
22 company_enrichment_jobspublic 0 48 kB
0.0% 22 5
23 industry_taxonomypublic 52 48 kB
0.0% 9 2
24 __drizzle_migrationsdrizzle 33 32 kB
0.0% 3 1
25 app_settingspublic 2 32 kB
0.0% 4 1
26 export_eventspublic 3 32 kB
0.0% 8 1
27 scraper_run_eventspublic 0 32 kB
0.0% 9 3
28 suppressionspublic 0 32 kB
0.0% 7 3
29 pending_runspublic 0 24 kB
0.0% 8 2
30 selector_configspublic 0 24 kB
0.0% 7 2
31 userspublic 0 24 kB
0.0% 8 2
32 run_logpublic 0 24 kB
0.0% 9 2
33 rfq_status_historypublic 0 24 kB
0.0% 7 2
34 buyer_listspublic 0 24 kB
0.0% 9 2
35 saved_viewspublic 0 16 kB
0.0% 8 1
36 allowed_emailspublic 0 16 kB
0.0% 5 1
37 company_cachepublic 0 16 kB
0.0% 6 1
38 deletion_requestspublic 0 16 kB
0.0% 5 1
39 accountspublic 0 16 kB
0.0% 11 1
40 verificationTokenpublic 0 16 kB
0.0% 3 1
41 sessionspublic ~-1 16 kB
0.0% 3 1

테이블 상세 (클릭하여 펼치기)

buyer_records25 GB · 50 cols · 18 idx · 3,600,245 rows
Live rows3,545,284
Dead rows101,823
Seq scan38,641
Idx scan94,752,844
Inserts3,600,705
Updates22,668,890
Deletes0
Last analyze2026-06-29

컬럼 (50)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
source_idtextNOT NULL
source_record_idtextNOT NULL
company_nametextNOT NULL
company_name_normalizedtextNOT NULL
country_isocharacter varyingNOT NULL
citytextNULL
addresstextNULL
tax_idtextNULL
intent_strengthtextNOT NULL
priority_tierintegerNOT NULL4
is_beautytextNULL
beauty_subcategorytextNULL
company_brieftextNULL
brands_carriedARRAYNULL
classifier_attimestamp with time zoneNULL
classifier_modeltextNULL
classifier_confidencerealNULL
source_urltextNULL
raw_jsonjsonbNULL
embeddingUSER-DEFINEDNULL
dedup_cluster_iduuidNULL
is_canonicalbooleanNOT NULLtrue
buyer_cluster_iduuidNULL
statustextNOT NULL'new'::text
status_notetextNULL
status_bytextNULL
status_attimestamp with time zoneNULL
assigned_totextNULL
scorerealNULL
scored_attimestamp with time zoneNULL
enriched_attimestamp with time zoneNULL
expires_attimestamp with time zoneNULL
deleted_attimestamp with time zoneNULL
created_attimestamp with time zoneNOT NULLnow()
updated_attimestamp with time zoneNOT NULLnow()
identity_typetextNULL
dedup_hashtextNULL
record_typetextNOT NULL'buyer'::text
prefecturetextNULL
city_cleantextNULL
verticaltextNULL
embedding_qwenUSER-DEFINEDNULL
industrytextNULL
categorytextNULL
industry_relevancetextNULL
business_typetextNULL
b2b_or_b2ctextNULL
trade_roletextNULL
rinda_fitbooleanNULL

인덱스 (18)

  • buyer_records_active_score_idx
    CREATE INDEX buyer_records_active_score_idx ON public.buyer_records USING btree (score DESC NULLS LAST) WHERE ((deleted_at IS NULL) AND (is_canonical = true))
  • buyer_records_embedding_qwen_hnsw
    CREATE INDEX buyer_records_embedding_qwen_hnsw ON public.buyer_records USING hnsw (embedding_qwen halfvec_cosine_ops) WITH (m='16', ef_construction='64')
  • buyer_records_enriched_at_idx
    CREATE INDEX buyer_records_enriched_at_idx ON public.buyer_records USING btree (enriched_at DESC NULLS LAST)
  • buyer_records_created
    CREATE INDEX buyer_records_created ON public.buyer_records USING btree (created_at)
  • buyer_records_pkey
    CREATE UNIQUE INDEX buyer_records_pkey ON public.buyer_records USING btree (id)
  • buyer_records_source_record_uniq
    CREATE UNIQUE INDEX buyer_records_source_record_uniq ON public.buyer_records USING btree (source_id, source_record_id)
  • buyer_records_score
    CREATE INDEX buyer_records_score ON public.buyer_records USING btree (score DESC NULLS LAST)
  • buyer_records_country_tier
    CREATE INDEX buyer_records_country_tier ON public.buyer_records USING btree (country_iso, priority_tier)
  • buyer_records_status
    CREATE INDEX buyer_records_status ON public.buyer_records USING btree (status, updated_at)
  • buyer_records_intent
    CREATE INDEX buyer_records_intent ON public.buyer_records USING btree (intent_strength, is_beauty)
  • buyer_records_cluster
    CREATE INDEX buyer_records_cluster ON public.buyer_records USING btree (dedup_cluster_id)
  • buyer_records_buyer_cluster
    CREATE INDEX buyer_records_buyer_cluster ON public.buyer_records USING btree (buyer_cluster_id)
  • buyer_records_assigned
    CREATE INDEX buyer_records_assigned ON public.buyer_records USING btree (assigned_to, status)
  • buyer_records_name_trgm
    CREATE INDEX buyer_records_name_trgm ON public.buyer_records USING gin (company_name_normalized gin_trgm_ops)
  • buyer_records_embedding_hnsw
    CREATE INDEX buyer_records_embedding_hnsw ON public.buyer_records USING hnsw (embedding halfvec_cosine_ops) WITH (m='16', ef_construction='64')
  • buyer_records_record_type
    CREATE INDEX buyer_records_record_type ON public.buyer_records USING btree (record_type, is_beauty, status)
  • buyer_records_dedup_hash
    CREATE INDEX buyer_records_dedup_hash ON public.buyer_records USING btree (dedup_hash)
  • buyer_records_company_brief_trgm
    CREATE INDEX buyer_records_company_brief_trgm ON public.buyer_records USING gin (company_brief gin_trgm_ops)

외래키 (1)

  • source_id → sources.id
rfqs2398 MB · 42 cols · 19 idx · 242,711 rows
Live rows221,890
Dead rows3,390
Seq scan33,303
Idx scan12,492,713
Inserts330,340
Updates1,230,548
Deletes0
Last analyze2026-06-30

컬럼 (42)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
org_idintegerNOT NULL1
source_idtextNOT NULL
source_urltextNOT NULL
source_uidtextNULL
titletextNOT NULL
descriptiontextNOT NULL
product_categorytextNULL
buyer_nametextNULL
buyer_companytextNULL
buyer_company_normalizedtextNULL
buyer_country_isocharacter varyingNULL
quantitytextNULL
posted_attimestamp with time zoneNULL
expires_attimestamp with time zoneNULL
raw_html_s3_keytextNULL
raw_jsonjsonbNULL
is_beautytextNULL
beauty_tagsARRAYNULL
hs_codesARRAYNULL
qualitytextNULL
needs_researchbooleanNULLfalse
classifier_modeltextNULL
classifier_attimestamp with time zoneNULL
embeddingUSER-DEFINEDNULL
dedup_cluster_iduuidNULL
is_canonicalbooleanNOT NULLtrue
canonical_rfq_iduuidNULL
buyer_cluster_iduuidNULL
statustextNOT NULL'new'::text
status_notetextNULL
status_bytextNULL
status_attimestamp with time zoneNULL
deleted_attimestamp with time zoneNULL
created_attimestamp with time zoneNOT NULLnow()
updated_attimestamp with time zoneNOT NULLnow()
assigned_totextNULL
identity_typetextNULL
dedup_hashtextNULL
verticaltextNULL
industrytextNULL
categorytextNULL

인덱스 (19)

  • rfq_buyer_cluster
    CREATE INDEX rfq_buyer_cluster ON public.rfqs USING btree (buyer_cluster_id)
  • rfqs_pkey
    CREATE UNIQUE INDEX rfqs_pkey ON public.rfqs USING btree (id)
  • rfq_source_uid_uniq
    CREATE UNIQUE INDEX rfq_source_uid_uniq ON public.rfqs USING btree (source_id, source_uid) WHERE (source_uid IS NOT NULL)
  • rfq_source_url_uniq
    CREATE UNIQUE INDEX rfq_source_url_uniq ON public.rfqs USING btree (source_id, source_url)
  • rfq_beauty_posted
    CREATE INDEX rfq_beauty_posted ON public.rfqs USING btree (is_beauty, posted_at)
  • rfq_source
    CREATE INDEX rfq_source ON public.rfqs USING btree (source_id, posted_at)
  • rfq_country
    CREATE INDEX rfq_country ON public.rfqs USING btree (buyer_country_iso)
  • rfq_cluster
    CREATE INDEX rfq_cluster ON public.rfqs USING btree (dedup_cluster_id)
  • rfq_status
    CREATE INDEX rfq_status ON public.rfqs USING btree (status, updated_at)
  • rfq_expires
    CREATE INDEX rfq_expires ON public.rfqs USING btree (expires_at)
  • rfqs_assigned
    CREATE INDEX rfqs_assigned ON public.rfqs USING btree (assigned_to, status) WHERE ((assigned_to IS NOT NULL) AND (deleted_at IS NULL))
  • rfq_embedding_hnsw
    CREATE INDEX rfq_embedding_hnsw ON public.rfqs USING hnsw (embedding halfvec_cosine_ops) WITH (m='16', ef_construction='64')
  • rfq_title_trgm
    CREATE INDEX rfq_title_trgm ON public.rfqs USING gin (title gin_trgm_ops)
  • rfq_description_trgm
    CREATE INDEX rfq_description_trgm ON public.rfqs USING gin (description gin_trgm_ops)
  • rfq_buyer_company_normalized_trgm
    CREATE INDEX rfq_buyer_company_normalized_trgm ON public.rfqs USING gin (buyer_company_normalized gin_trgm_ops)
  • rfq_dedup_hash
    CREATE INDEX rfq_dedup_hash ON public.rfqs USING btree (dedup_hash)
  • rfq_beauty_created
    CREATE INDEX rfq_beauty_created ON public.rfqs USING btree (is_beauty, created_at)
  • rfqs_active_posted_at_idx
    CREATE INDEX rfqs_active_posted_at_idx ON public.rfqs USING btree (posted_at DESC NULLS LAST) WHERE ((deleted_at IS NULL) AND (is_canonical = true))
  • rfq_coalesce_posted
    CREATE INDEX rfq_coalesce_posted ON public.rfqs USING btree (COALESCE(posted_at, created_at) DESC) WHERE ((deleted_at IS NULL) AND (is_canonical = true))

외래키 (1)

  • source_id → sources.id
buyer_supplier_matches427 MB · 29 cols · 9 idx · 943,350 rows
Live rows943,470
Dead rows0
Seq scan356
Idx scan131,826,081
Inserts1,122,848
Updates61,917
Deletes179,498
Last analyze2026-06-29

컬럼 (29)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
rfq_iduuidNULL
buyer_record_iduuidNULL
supplier_iduuidNOT NULL
pipeline_stagetextNOT NULL'candidate'::text
vector_simrealNULL
haiku_scorerealNULL
haiku_verdicttextNULL
haiku_reasontextNULL
sonnet_scorerealNULL
sonnet_rationaletextNULL
fit_dimensionsjsonbNULL
final_scorerealNOT NULL0
buyer_content_hashtextNULL
supplier_content_hashtextNULL
haiku_run_iduuidNULL
sonnet_run_iduuidNULL
match_versionintegerNOT NULL1
statustextNOT NULL'pending'::text
status_bytextNULL
status_attimestamp with time zoneNULL
status_notetextNULL
blocked_reasontextNULL
is_visiblebooleanNOT NULLtrue
matched_attimestamp with time zoneNOT NULLnow()
refreshed_attimestamp with time zoneNULL
expires_attimestamp with time zoneNULL
created_attimestamp with time zoneNOT NULLnow()
updated_attimestamp with time zoneNOT NULLnow()

인덱스 (9)

  • bsm_supplier_score
    CREATE INDEX bsm_supplier_score ON public.buyer_supplier_matches USING btree (supplier_id, final_score DESC NULLS LAST) WHERE (is_visible = true)
  • bsm_br_score
    CREATE INDEX bsm_br_score ON public.buyer_supplier_matches USING btree (buyer_record_id, final_score DESC NULLS LAST) WHERE ((buyer_record_id IS NOT NULL) AND (is_visible = true))
  • bsm_expires
    CREATE INDEX bsm_expires ON public.buyer_supplier_matches USING btree (expires_at) WHERE (expires_at IS NOT NULL)
  • bsm_status_score
    CREATE INDEX bsm_status_score ON public.buyer_supplier_matches USING btree (status, final_score DESC NULLS LAST) WHERE (is_visible = true)
  • bsm_rfq_score
    CREATE INDEX bsm_rfq_score ON public.buyer_supplier_matches USING btree (rfq_id, final_score DESC NULLS LAST) WHERE ((rfq_id IS NOT NULL) AND (is_visible = true))
  • buyer_supplier_matches_pkey
    CREATE UNIQUE INDEX buyer_supplier_matches_pkey ON public.buyer_supplier_matches USING btree (id)
  • bsm_buyer_supplier_active_uniq
    CREATE UNIQUE INDEX bsm_buyer_supplier_active_uniq ON public.buyer_supplier_matches USING btree (COALESCE(rfq_id, '00000000-0000-0000-0000-000000000000'::uuid), COALESCE(buyer_record_id, '00000000-0000-0000-0000-000000000000'::uuid), supplier_id) WHERE (status <> 'rejected'::text)
  • bsm_visible_score
    CREATE INDEX bsm_visible_score ON public.buyer_supplier_matches USING btree (final_score DESC NULLS LAST, matched_at DESC NULLS LAST) WHERE ((is_visible = true) AND (pipeline_stage = ANY (ARRAY['haiku'::text, 'sonnet'::text])))
  • bsm_pending_haiku
    CREATE INDEX bsm_pending_haiku ON public.buyer_supplier_matches USING btree (matched_at DESC NULLS LAST) WHERE ((pipeline_stage = 'candidate'::text) AND (is_visible = true) AND (blocked_reason IS NULL))

외래키 (5)

  • rfq_id → rfqs.id
  • buyer_record_id → buyer_records.id
  • supplier_id → buyer_records.id
  • haiku_run_id → agent_runs.id
  • sonnet_run_id → agent_runs.id
agent_runs325 MB · 16 cols · 7 idx · 963,160 rows
Live rows963,160
Dead rows93,507
Seq scan48,611
Idx scan2,559,985
Inserts963,480
Updates1,588,029
Deletes0
Last analyze2026-06-30

컬럼 (16)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
rfq_iduuidNULL
agent_typetextNOT NULL
modeltextNOT NULL
statustextNOT NULL
tokens_inintegerNOT NULL0
tokens_outintegerNOT NULL0
cost_usdrealNOT NULL0
iterationsintegerNOT NULL0
tracejsonbNULL
errortextNULL
batch_idtextNULL
started_attimestamp with time zoneNOT NULLnow()
finished_attimestamp with time zoneNULL
sfn_task_tokentextNULL
buyer_record_iduuidNULL

인덱스 (7)

  • agent_runs_rfq
    CREATE INDEX agent_runs_rfq ON public.agent_runs USING btree (rfq_id)
  • agent_runs_one_active_per_rfq
    CREATE UNIQUE INDEX agent_runs_one_active_per_rfq ON public.agent_runs USING btree (rfq_id) WHERE (status = ANY (ARRAY['pending'::text, 'pending_batch'::text, 'running'::text]))
  • agent_runs_buyer_record
    CREATE INDEX agent_runs_buyer_record ON public.agent_runs USING btree (buyer_record_id)
  • agent_runs_one_active_per_buyer_record
    CREATE UNIQUE INDEX agent_runs_one_active_per_buyer_record ON public.agent_runs USING btree (buyer_record_id) WHERE ((status = ANY (ARRAY['pending'::text, 'pending_batch'::text, 'running'::text])) AND (buyer_record_id IS NOT NULL))
  • agent_runs_started
    CREATE INDEX agent_runs_started ON public.agent_runs USING btree (started_at)
  • agent_runs_pkey
    CREATE UNIQUE INDEX agent_runs_pkey ON public.agent_runs USING btree (id)
  • agent_runs_status
    CREATE INDEX agent_runs_status ON public.agent_runs USING btree (status, started_at)

외래키 (2)

  • rfq_id → rfqs.id
  • buyer_record_id → buyer_records.id
buyer_record_enrichments151 MB · 23 cols · 2 idx · 283,498 rows
Live rows283,498
Dead rows2
Seq scan4,305
Idx scan534,778
Inserts283,500
Updates18,868
Deletes0
Last analyze2026-06-29

컬럼 (23)

이름타입NULL기본값
buyer_record_iduuidNOT NULL
company_domaintextNULL
emailtextNULL
email_verificationtextNULL
email_confidencerealNULL
phonetextNULL
linkedin_urltextNULL
decision_maker_nametextNULL
decision_maker_titletextNULL
verifiertextNULL
sourcesjsonbNULL
agent_run_iduuidNULL
enriched_attimestamp with time zoneNOT NULLnow()
instagram_urltextNULL
facebook_urltextNULL
tiktok_urltextNULL
youtube_urltextNULL
marketplace_urltextNULL
linktree_urltextNULL
quality_scorerealNULL
quality_verdicttextNULL
quality_flagsARRAYNULL
contact_form_urltextNULL

인덱스 (2)

  • buyer_record_enrichments_pkey
    CREATE UNIQUE INDEX buyer_record_enrichments_pkey ON public.buyer_record_enrichments USING btree (buyer_record_id)
  • buyer_record_enrichments_dm_title_trgm_idx
    CREATE INDEX buyer_record_enrichments_dm_title_trgm_idx ON public.buyer_record_enrichments USING gin (decision_maker_title gin_trgm_ops)

외래키 (1)

  • buyer_record_id → buyer_records.id
scraper_runs4664 kB · 17 cols · 3 idx · 10,220 rows
Live rows10,045
Dead rows100
Seq scan337
Idx scan202,315
Inserts10,221
Updates10,068
Deletes0
Last analyze2026-06-29

컬럼 (17)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
source_idtextNOT NULL
triggered_bytextNOT NULL
triggered_by_usertextNULL
statustextNOT NULL
started_attimestamp with time zoneNULL
finished_attimestamp with time zoneNULL
rows_inintegerNOT NULL0
rows_keptintegerNOT NULL0
rows_duplicateintegerNOT NULL0
error_countintegerNOT NULL0
error_samplejsonbNULL
cost_usd_centsintegerNOT NULL0
config_snapshotjsonbNOT NULL
cloudwatch_log_streamtextNULL
created_attimestamp with time zoneNOT NULLnow()
last_heartbeat_attimestamp with time zoneNULL

인덱스 (3)

  • scraper_runs_pkey
    CREATE UNIQUE INDEX scraper_runs_pkey ON public.scraper_runs USING btree (id)
  • scraper_runs_status
    CREATE INDEX scraper_runs_status ON public.scraper_runs USING btree (status, created_at DESC NULLS LAST)
  • scraper_runs_source_started
    CREATE INDEX scraper_runs_source_started ON public.scraper_runs USING btree (source_id, started_at DESC NULLS LAST)

외래키 (1)

  • source_id → sources.id
buyer_clusters4232 kB · 8 cols · 2 idx · 13,349 rows
Live rows13,350
Dead rows172
Seq scan222
Idx scan14,347
Inserts13,349
Updates995
Deletes0
Last analyze2026-06-29

컬럼 (8)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
normalized_keytextNOT NULL
company_nametextNULL
country_isocharacter varyingNULL
rfq_countintegerNOT NULL0
last_contacted_attimestamp with time zoneNULL
bounce_countintegerNOT NULL0
created_attimestamp with time zoneNOT NULLnow()

인덱스 (2)

  • buyer_clusters_pkey
    CREATE UNIQUE INDEX buyer_clusters_pkey ON public.buyer_clusters USING btree (id)
  • buyer_cluster_key_uniq
    CREATE UNIQUE INDEX buyer_cluster_key_uniq ON public.buyer_clusters USING btree (normalized_key)

외래키 (0)

  • 없음
scraper_cost_events3640 kB · 9 cols · 3 idx · 9,817 rows
Live rows9,818
Dead rows0
Seq scan127
Idx scan3,234
Inserts9,817
Updates0
Deletes0
Last analyze2026-06-17

컬럼 (9)

이름타입NULL기본값
idbigintNOT NULLnextval('scraper_cost_events_id_seq'::regclass)
source_idtextNULL
run_iduuidNULL
occurred_attimestamp with time zoneNOT NULLnow()
unittextNOT NULL
quantityrealNOT NULL
unit_cost_usd_microsintegerNOT NULL
total_usd_microsintegerNOT NULL
metajsonbNULL

인덱스 (3)

  • cost_src_month
    CREATE INDEX cost_src_month ON public.scraper_cost_events USING btree (source_id, occurred_at)
  • scraper_cost_events_pkey
    CREATE UNIQUE INDEX scraper_cost_events_pkey ON public.scraper_cost_events USING btree (id)
  • cost_unit_month
    CREATE INDEX cost_unit_month ON public.scraper_cost_events USING btree (unit, occurred_at)

외래키 (2)

  • source_id → sources.id
  • run_id → scraper_runs.id
email_verifications1864 kB · 10 cols · 3 idx · 8,455 rows
Live rows8,455
Dead rows0
Seq scan163
Idx scan30,624
Inserts8,455
Updates6
Deletes0
Last analyze2026-06-16

컬럼 (10)

이름타입NULL기본값
emailtextNOT NULL
resulttextNOT NULL
qualitytextNULL
subresulttextNULL
is_freebooleanNOT NULLfalse
is_rolebooleanNOT NULLfalse
credits_usedintegerNOT NULL0
providertextNOT NULL
verified_attimestamp with time zoneNOT NULLnow()
expires_attimestamp with time zoneNULL

인덱스 (3)

  • email_verifications_expires
    CREATE INDEX email_verifications_expires ON public.email_verifications USING btree (expires_at)
  • email_verifications_result
    CREATE INDEX email_verifications_result ON public.email_verifications USING btree (result)
  • email_verifications_pkey
    CREATE UNIQUE INDEX email_verifications_pkey ON public.email_verifications USING btree (email)

외래키 (0)

  • 없음
buyer_record_clean1576 kB · 22 cols · 1 idx · 4,300 rows
Live rows4,303
Dead rows0
Seq scan509
Idx scan7,127,239
Inserts4,300
Updates0
Deletes0
Last analyze2026-06-24

컬럼 (22)

이름타입NULL기본값
buyer_record_iduuidNOT NULL
business_typetextNULL
b2b_or_b2ctextNULL
company_sizetextNULL
legal_entity_typetextNULL
founded_yearintegerNULL
capital_jpybigintNULL
export_orientedbooleanNULL
english_capablebooleanNULL
products_servicesARRAYNULL
clean_keywordsARRAYNULL
industry_entextNULL
name_entextNULL
address_entextNULL
decision_maker_nametextNULL
decision_maker_name_entextNULL
target_customerstextNULL
wardtextNULL
desc_entextNULL
desc_jptextNULL
model_nametextNULL
cleaned_attimestamp with time zoneNOT NULLnow()

인덱스 (1)

  • buyer_record_clean_pkey
    CREATE UNIQUE INDEX buyer_record_clean_pkey ON public.buyer_record_clean USING btree (buyer_record_id)

외래키 (1)

  • buyer_record_id → buyer_records.id
identity_backup_202606031224 kB · 3 cols · 0 idx · 20,030 rows
Live rows20,030
Dead rows0
Seq scan5
Idx scan
Inserts20,030
Updates0
Deletes0
Last analyze2026-06-03

컬럼 (3)

이름타입NULL기본값
tbltextNULL
iduuidNULL
identity_typetextNULL

인덱스 (0)

  • 없음

외래키 (0)

  • 없음
sources400 kB · 22 cols · 1 idx · 216 rows
Live rows216
Dead rows14
Seq scan1,137,998
Idx scan4,055,365
Inserts216
Updates22,422
Deletes0
Last analyze2026-06-30

컬럼 (22)

이름타입NULL기본값
idtextNOT NULL
nametextNOT NULL
base_urltextNOT NULL
cadence_crontextNOT NULL
enabledbooleanNOT NULLtrue
configjsonbNOT NULL
tos_statustextNOT NULL'scrape_grey'::text
lia_urltextNULL
last_run_attimestamp with time zoneNULL
breaker_statetextNOT NULL'closed'::text
consecutive_failuresintegerNOT NULL0
created_attimestamp with time zoneNOT NULLnow()
kindtextNULL
config_versionintegerNOT NULL1
monthly_budget_usd_centsintegerNULL
secrets_reftextNULL
updated_bytextNULL
updated_attimestamp with time zoneNOT NULLnow()
next_run_attimestamp with time zoneNULL
paused_untiltimestamp with time zoneNULL
schedule_notetextNULL
verticaltextNULL

인덱스 (1)

  • sources_pkey
    CREATE UNIQUE INDEX sources_pkey ON public.sources USING btree (id)

외래키 (0)

  • 없음
sourcing_shortlist144 kB · 14 cols · 4 idx · 46 rows
Live rows46
Dead rows1
Seq scan8
Idx scan109
Inserts46
Updates2
Deletes0
Last analyze

컬럼 (14)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
company_profile_iduuidNOT NULL
rfq_iduuidNULL
buyer_record_iduuidNULL
fit_scorerealNULL
verdicttextNULL
rationaletextNULL
fit_dimensionsjsonbNULL
agent_run_iduuidNULL
qualified_attimestamp with time zoneNULL
statustextNOT NULL'shortlisted'::text
created_bytextNOT NULL
created_attimestamp with time zoneNOT NULLnow()
updated_attimestamp with time zoneNOT NULLnow()

인덱스 (4)

  • sourcing_shortlist_company
    CREATE INDEX sourcing_shortlist_company ON public.sourcing_shortlist USING btree (company_profile_id, status)
  • sourcing_shortlist_company_buyer
    CREATE UNIQUE INDEX sourcing_shortlist_company_buyer ON public.sourcing_shortlist USING btree (company_profile_id, buyer_record_id)
  • sourcing_shortlist_company_rfq
    CREATE UNIQUE INDEX sourcing_shortlist_company_rfq ON public.sourcing_shortlist USING btree (company_profile_id, rfq_id)
  • sourcing_shortlist_pkey
    CREATE UNIQUE INDEX sourcing_shortlist_pkey ON public.sourcing_shortlist USING btree (id)

외래키 (3)

  • company_profile_id → company_profiles.id
  • rfq_id → rfqs.id
  • buyer_record_id → buyer_records.id
sourcing_runs120 kB · 16 cols · 4 idx · 2 rows
Live rows2
Dead rows12
Seq scan6
Idx scan57
Inserts2
Updates13
Deletes0
Last analyze

컬럼 (16)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
company_profile_iduuidNOT NULL
statustextNOT NULL'queued'::text
total_candidatesintegerNOT NULL0
completed_candidatesintegerNOT NULL0
strong_countintegerNOT NULL0
paramsjsonbNOT NULL
candidate_keysjsonbNULL
cancel_requestedbooleanNOT NULLfalse
last_heartbeat_attimestamp with time zoneNULL
errortextNULL
cost_usd_microsintegerNOT NULL0
created_bytextNOT NULL
created_attimestamp with time zoneNOT NULLnow()
started_attimestamp with time zoneNULL
finished_attimestamp with time zoneNULL

인덱스 (4)

  • sourcing_runs_pkey
    CREATE UNIQUE INDEX sourcing_runs_pkey ON public.sourcing_runs USING btree (id)
  • sourcing_runs_one_active_per_brief
    CREATE UNIQUE INDEX sourcing_runs_one_active_per_brief ON public.sourcing_runs USING btree (company_profile_id) WHERE (status = ANY (ARRAY['queued'::text, 'running'::text]))
  • sourcing_runs_active
    CREATE INDEX sourcing_runs_active ON public.sourcing_runs USING btree (status, last_heartbeat_at)
  • sourcing_runs_company
    CREATE INDEX sourcing_runs_company ON public.sourcing_runs USING btree (company_profile_id, created_at DESC NULLS LAST)

외래키 (1)

  • company_profile_id → company_profiles.id
enrichments88 kB · 22 cols · 4 idx · 1 rows
Live rows1
Dead rows0
Seq scan2,770
Idx scan60,581
Inserts1
Updates0
Deletes0
Last analyze

컬럼 (22)

이름타입NULL기본값
rfq_iduuidNOT NULL
company_domaintextNULL
emailtextNULL
email_verificationtextNULL
email_confidencerealNULL
phonetextNULL
linkedin_urltextNULL
decision_maker_nametextNULL
decision_maker_titletextNULL
sourcesjsonbNULL
agent_run_iduuidNULL
enriched_attimestamp with time zoneNOT NULLnow()
instagram_urltextNULL
facebook_urltextNULL
tiktok_urltextNULL
youtube_urltextNULL
marketplace_urltextNULL
linktree_urltextNULL
quality_scorerealNULL
quality_verdicttextNULL
quality_flagsARRAYNULL
contact_form_urltextNULL

인덱스 (4)

  • enrichments_verification_at
    CREATE INDEX enrichments_verification_at ON public.enrichments USING btree (email_verification, enriched_at)
  • enrichments_dm_title_trgm_idx
    CREATE INDEX enrichments_dm_title_trgm_idx ON public.enrichments USING gin (decision_maker_title gin_trgm_ops)
  • enrichments_enriched_at
    CREATE INDEX enrichments_enriched_at ON public.enrichments USING btree (enriched_at)
  • enrichments_pkey
    CREATE UNIQUE INDEX enrichments_pkey ON public.enrichments USING btree (rfq_id)

외래키 (1)

  • rfq_id → rfqs.id
campaigns80 kB · 18 cols · 3 idx · 1 rows
Live rows1
Dead rows0
Seq scan4
Idx scan41
Inserts1
Updates0
Deletes0
Last analyze

컬럼 (18)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
nametextNOT NULL
statustextNOT NULL'draft'::text
paused_untiltimestamp with time zoneNULL
audience_filters_jsonjsonbNOT NULL
audience_snapshot_attimestamp with time zoneNULL
steps_jsonjsonbNOT NULL
from_emailtextNOT NULL
from_nametextNOT NULL
reply_totextNULL
consent_basistextNOT NULL'b2b_legitimate_interest'::text
send_window_start_hourintegerNOT NULL9
send_window_end_hourintegerNOT NULL17
send_window_daysARRAYNOT NULL'{Mon,Tue,Wed,Thu,Fri}'::text[]
created_bytextNOT NULL
created_attimestamp with time zoneNOT NULLnow()
updated_attimestamp with time zoneNOT NULLnow()
deleted_attimestamp with time zoneNULL

인덱스 (3)

  • campaigns_status
    CREATE INDEX campaigns_status ON public.campaigns USING btree (status, paused_until)
  • campaigns_alive
    CREATE INDEX campaigns_alive ON public.campaigns USING btree (created_at DESC NULLS LAST) WHERE (deleted_at IS NULL)
  • campaigns_pkey
    CREATE UNIQUE INDEX campaigns_pkey ON public.campaigns USING btree (id)

외래키 (0)

  • 없음
company_profiles80 kB · 17 cols · 3 idx · 1 rows
Live rows1
Dead rows0
Seq scan199
Idx scan124
Inserts1
Updates0
Deletes0
Last analyze

컬럼 (17)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
nametextNOT NULL
descriptiontextNULL
target_categoriesARRAYNULL
target_countriesARRAYNULL
certificationsARRAYNULL
keywordsARRAYNULL
min_order_valuetextNULL
activebooleanNOT NULLtrue
created_bytextNOT NULL
created_attimestamp with time zoneNOT NULLnow()
updated_attimestamp with time zoneNOT NULLnow()
websitetextNULL
roletextNOT NULL'seller'::text
ideal_counterpart_profiletextNULL
embeddingUSER-DEFINEDNULL
embedded_attimestamp with time zoneNULL

인덱스 (3)

  • company_profiles_pkey
    CREATE UNIQUE INDEX company_profiles_pkey ON public.company_profiles USING btree (id)
  • company_profiles_embedding_hnsw
    CREATE INDEX company_profiles_embedding_hnsw ON public.company_profiles USING hnsw (embedding halfvec_cosine_ops)
  • company_profiles_active
    CREATE INDEX company_profiles_active ON public.company_profiles USING btree (active, name)

외래키 (0)

  • 없음
rate_limit_buckets64 kB · 3 cols · 1 idx · 63 rows
Live rows63
Dead rows32
Seq scan1
Idx scan186
Inserts63
Updates123
Deletes0
Last analyze2026-06-19

컬럼 (3)

이름타입NULL기본값
keytextNOT NULL
tokensrealNOT NULL
updated_attimestamp with time zoneNOT NULLnow()

인덱스 (1)

  • rate_limit_buckets_pkey
    CREATE UNIQUE INDEX rate_limit_buckets_pkey ON public.rate_limit_buckets USING btree (key)

외래키 (0)

  • 없음
campaign_members48 kB · 15 cols · 5 idx · 0 rows
Live rows0
Dead rows0
Seq scan14
Idx scan46
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (15)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
campaign_iduuidNOT NULL
rfq_iduuidNULL
buyer_record_iduuidNULL
buyer_cluster_iduuidNULL
emailtextNOT NULL
statustextNOT NULL'pending'::text
current_stepintegerNOT NULL0
next_due_attimestamp with time zoneNULL
unsub_tokenuuidNOT NULLgen_random_uuid()
last_event_typetextNULL
last_event_attimestamp with time zoneNULL
provider_message_idtextNULL
sent_attemptintegerNOT NULL0
enrolled_attimestamp with time zoneNOT NULLnow()

인덱스 (5)

  • campaign_members_sent_idempotency_v2
    CREATE UNIQUE INDEX campaign_members_sent_idempotency_v2 ON public.campaign_members USING btree (campaign_id, id, sent_attempt) WHERE (last_event_type = 'sent'::text)
  • campaign_members_dedup
    CREATE UNIQUE INDEX campaign_members_dedup ON public.campaign_members USING btree (campaign_id, COALESCE(buyer_cluster_id, '00000000-0000-0000-0000-000000000000'::uuid), email)
  • campaign_members_pkey
    CREATE UNIQUE INDEX campaign_members_pkey ON public.campaign_members USING btree (id)
  • campaign_members_pickup
    CREATE INDEX campaign_members_pickup ON public.campaign_members USING btree (campaign_id, status, next_due_at)
  • campaign_members_unsub_token
    CREATE UNIQUE INDEX campaign_members_unsub_token ON public.campaign_members USING btree (unsub_token)

외래키 (4)

  • buyer_record_id → buyer_records.id
  • campaign_id → campaigns.id
  • buyer_cluster_id → buyer_clusters.id
  • rfq_id → rfqs.id
press_mentions48 kB · 12 cols · 5 idx · 0 rows
Live rows0
Dead rows0
Seq scan8
Idx scan0
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (12)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
buyer_record_iduuidNULL
buyer_company_rawtextNOT NULL
buyer_country_isocharacter varyingNULL
brand_importedtextNULL
deal_typetextNULL
deal_datetimestamp with time zoneNULL
deal_metricsjsonbNULL
evidence_quotetextNOT NULL
publicationtextNOT NULL
source_urltextNOT NULL
extracted_attimestamp with time zoneNOT NULLnow()

인덱스 (5)

  • press_mentions_buyer
    CREATE INDEX press_mentions_buyer ON public.press_mentions USING btree (buyer_record_id)
  • press_mentions_pub
    CREATE INDEX press_mentions_pub ON public.press_mentions USING btree (publication, deal_date DESC NULLS LAST)
  • press_mentions_url_brand_uniq
    CREATE UNIQUE INDEX press_mentions_url_brand_uniq ON public.press_mentions USING btree (source_url, brand_imported, buyer_company_raw)
  • press_mentions_pkey
    CREATE UNIQUE INDEX press_mentions_pkey ON public.press_mentions USING btree (id)
  • press_mentions_date
    CREATE INDEX press_mentions_date ON public.press_mentions USING btree (deal_date DESC NULLS LAST)

외래키 (1)

  • buyer_record_id → buyer_records.id
company_enrichment_jobs48 kB · 22 cols · 5 idx · 0 rows
Live rows0
Dead rows0
Seq scan8
Idx scan41,924
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (22)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
campaign_iduuidNOT NULL
company_nametextNOT NULL
country_isotextNULL
statustextNOT NULL'pending'::text
linkup_task_idtextNULL
submitted_attimestamp with time zoneNULL
domaintextNULL
best_emailtextNULL
email_statetextNULL
decision_maker_nametextNULL
decision_maker_titletextNULL
company_brieftextNULL
linkup_sources_jsonjsonbNULL
linkup_raw_output_jsonjsonbNULL
cost_usd_microsintegerNOT NULL0
errortextNULL
matched_rfq_countintegerNOT NULL0
matched_buyer_record_countintegerNOT NULL0
started_attimestamp with time zoneNULL
finished_attimestamp with time zoneNULL
created_attimestamp with time zoneNOT NULLnow()

인덱스 (5)

  • cej_linkup_task_id_uniq
    CREATE UNIQUE INDEX cej_linkup_task_id_uniq ON public.company_enrichment_jobs USING btree (linkup_task_id) WHERE (linkup_task_id IS NOT NULL)
  • cej_campaign_company_uniq
    CREATE UNIQUE INDEX cej_campaign_company_uniq ON public.company_enrichment_jobs USING btree (campaign_id, lower(company_name), COALESCE(country_iso, ''::text))
  • cej_campaign_status
    CREATE INDEX cej_campaign_status ON public.company_enrichment_jobs USING btree (campaign_id, status)
  • cej_pickup
    CREATE INDEX cej_pickup ON public.company_enrichment_jobs USING btree (status, submitted_at)
  • company_enrichment_jobs_pkey
    CREATE UNIQUE INDEX company_enrichment_jobs_pkey ON public.company_enrichment_jobs USING btree (id)

외래키 (1)

  • campaign_id → campaigns.id
industry_taxonomy48 kB · 9 cols · 2 idx · 52 rows
Live rows52
Dead rows0
Seq scan16
Idx scan52
Inserts52
Updates0
Deletes0
Last analyze2026-06-22

컬럼 (9)

이름타입NULL기본값
industrytextNOT NULL
categorytextNOT NULL
labeltextNULL
aliasesARRAYNULL
hs_codesARRAYNULL
activebooleanNOT NULLtrue
sort_orderintegerNOT NULL0
created_attimestamp with time zoneNOT NULLnow()
updated_attimestamp with time zoneNOT NULLnow()

인덱스 (2)

  • industry_taxonomy_active_idx
    CREATE INDEX industry_taxonomy_active_idx ON public.industry_taxonomy USING btree (industry, sort_order) WHERE active
  • industry_taxonomy_industry_category_pk
    CREATE UNIQUE INDEX industry_taxonomy_industry_category_pk ON public.industry_taxonomy USING btree (industry, category)

외래키 (0)

  • 없음
__drizzle_migrations32 kB · 3 cols · 1 idx · 33 rows
Live rows33
Dead rows0
Seq scan478
Idx scan1
Inserts33
Updates0
Deletes0
Last analyze

컬럼 (3)

이름타입NULL기본값
idintegerNOT NULLnextval('drizzle.__drizzle_migrations_id_seq'::regclass)
hashtextNOT NULL
created_atbigintNULL

인덱스 (1)

  • __drizzle_migrations_pkey
    CREATE UNIQUE INDEX __drizzle_migrations_pkey ON drizzle.__drizzle_migrations USING btree (id)

외래키 (0)

  • 없음
app_settings32 kB · 4 cols · 1 idx · 2 rows
Live rows2
Dead rows3
Seq scan38
Idx scan59,119
Inserts3
Updates2
Deletes1
Last analyze

컬럼 (4)

이름타입NULL기본값
keytextNOT NULL
valuejsonbNOT NULL
updated_bytextNULL
updated_attimestamp with time zoneNOT NULLnow()

인덱스 (1)

  • app_settings_pkey
    CREATE UNIQUE INDEX app_settings_pkey ON public.app_settings USING btree (key)

외래키 (0)

  • 없음
export_events32 kB · 8 cols · 1 idx · 3 rows
Live rows3
Dead rows0
Seq scan48
Idx scan0
Inserts3
Updates0
Deletes0
Last analyze

컬럼 (8)

이름타입NULL기본값
idbigintNOT NULLnextval('export_events_id_seq'::regclass)
user_idtextNOT NULL
columnsARRAYNOT NULL
filter_hashtextNOT NULL
row_countintegerNOT NULL
s3_keytextNULL
sha256textNOT NULL
exported_attimestamp with time zoneNOT NULLnow()

인덱스 (1)

  • export_events_pkey
    CREATE UNIQUE INDEX export_events_pkey ON public.export_events USING btree (id)

외래키 (0)

  • 없음
scraper_run_events32 kB · 9 cols · 3 idx · 0 rows
Live rows0
Dead rows0
Seq scan6
Idx scan1
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (9)

이름타입NULL기본값
idbigintNOT NULLnextval('scraper_run_events_id_seq'::regclass)
run_iduuidNOT NULL
source_idtextNOT NULL
seqintegerNOT NULL
leveltextNOT NULL
phasetextNULL
messagetextNOT NULL
contextjsonbNULL
occurred_attimestamp with time zoneNOT NULLnow()

인덱스 (3)

  • run_events_source_time
    CREATE INDEX run_events_source_time ON public.scraper_run_events USING btree (source_id, occurred_at DESC NULLS LAST)
  • run_events_run_seq
    CREATE INDEX run_events_run_seq ON public.scraper_run_events USING btree (run_id, seq)
  • scraper_run_events_pkey
    CREATE UNIQUE INDEX scraper_run_events_pkey ON public.scraper_run_events USING btree (id)

외래키 (2)

  • run_id → scraper_runs.id
  • source_id → sources.id
suppressions32 kB · 7 cols · 3 idx · 0 rows
Live rows0
Dead rows0
Seq scan4
Idx scan0
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (7)

이름타입NULL기본값
emailtextNOT NULL
domaintextNULL
reasontextNOT NULL
campaign_iduuidNULL
created_attimestamp with time zoneNOT NULLnow()
expires_attimestamp with time zoneNULL
notetextNULL

인덱스 (3)

  • suppressions_pkey
    CREATE UNIQUE INDEX suppressions_pkey ON public.suppressions USING btree (email)
  • suppressions_reason_time
    CREATE INDEX suppressions_reason_time ON public.suppressions USING btree (reason, created_at DESC NULLS LAST)
  • suppressions_domain
    CREATE INDEX suppressions_domain ON public.suppressions USING btree (domain) WHERE (domain IS NOT NULL)

외래키 (1)

  • campaign_id → campaigns.id
pending_runs24 kB · 8 cols · 2 idx · 0 rows
Live rows0
Dead rows0
Seq scan4
Idx scan0
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (8)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
source_idtextNOT NULL
requested_bytextNOT NULL
requested_attimestamp with time zoneNOT NULLnow()
claimed_attimestamp with time zoneNULL
claimed_bytextNULL
run_iduuidNULL
override_configjsonbNULL

인덱스 (2)

  • pending_runs_unclaimed
    CREATE INDEX pending_runs_unclaimed ON public.pending_runs USING btree (requested_at) WHERE (claimed_at IS NULL)
  • pending_runs_pkey
    CREATE UNIQUE INDEX pending_runs_pkey ON public.pending_runs USING btree (id)

외래키 (2)

  • source_id → sources.id
  • run_id → scraper_runs.id
selector_configs24 kB · 7 cols · 2 idx · 0 rows
Live rows0
Dead rows0
Seq scan5
Idx scan108
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (7)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
source_idtextNOT NULL
versionintegerNOT NULL
selectorsjsonbNOT NULL
is_activebooleanNOT NULLtrue
created_attimestamp with time zoneNOT NULLnow()
created_bytextNOT NULL

인덱스 (2)

  • selector_configs_pkey
    CREATE UNIQUE INDEX selector_configs_pkey ON public.selector_configs USING btree (id)
  • selector_source_ver
    CREATE INDEX selector_source_ver ON public.selector_configs USING btree (source_id, version)

외래키 (1)

  • source_id → sources.id
users24 kB · 8 cols · 2 idx · 0 rows
Live rows0
Dead rows0
Seq scan54
Idx scan11
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (8)

이름타입NULL기본값
idtextNOT NULL
nametextNULL
emailtextNULL
emailVerifiedtimestamp with time zoneNULL
imagetextNULL
roletextNOT NULL'va'::text
activebooleanNOT NULLtrue
password_hashtextNULL

인덱스 (2)

  • users_pkey
    CREATE UNIQUE INDEX users_pkey ON public.users USING btree (id)
  • users_email_unique
    CREATE UNIQUE INDEX users_email_unique ON public.users USING btree (email)

외래키 (0)

  • 없음
run_log24 kB · 9 cols · 2 idx · 0 rows
Live rows0
Dead rows0
Seq scan3
Idx scan0
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (9)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
source_idtextNOT NULL
started_attimestamp with time zoneNOT NULLnow()
finished_attimestamp with time zoneNULL
statustextNOT NULL
rows_seenintegerNOT NULL0
rows_keptintegerNOT NULL0
rows_dedupedintegerNOT NULL0
errorsjsonbNULL

인덱스 (2)

  • run_log_source
    CREATE INDEX run_log_source ON public.run_log USING btree (source_id, started_at)
  • run_log_pkey
    CREATE UNIQUE INDEX run_log_pkey ON public.run_log USING btree (id)

외래키 (1)

  • source_id → sources.id
rfq_status_history24 kB · 7 cols · 2 idx · 0 rows
Live rows0
Dead rows0
Seq scan3
Idx scan0
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (7)

이름타입NULL기본값
idbigintNOT NULLnextval('rfq_status_history_id_seq'::regclass)
rfq_iduuidNOT NULL
old_statustextNULL
new_statustextNOT NULL
notetextNULL
user_idtextNULL
changed_attimestamp with time zoneNOT NULLnow()

인덱스 (2)

  • rfq_status_history_pkey
    CREATE UNIQUE INDEX rfq_status_history_pkey ON public.rfq_status_history USING btree (id)
  • status_hist_rfq
    CREATE INDEX status_hist_rfq ON public.rfq_status_history USING btree (rfq_id, changed_at)

외래키 (1)

  • rfq_id → rfqs.id
buyer_lists24 kB · 9 cols · 2 idx · 0 rows
Live rows0
Dead rows0
Seq scan4
Idx scan640
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (9)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
nametextNOT NULL
descriptiontextNULL
query_texttextNOT NULL
filters_jsonjsonbNOT NULL
row_countintegerNOT NULL0
created_bytextNOT NULL
created_attimestamp with time zoneNOT NULLnow()
updated_attimestamp with time zoneNOT NULLnow()

인덱스 (2)

  • buyer_lists_user
    CREATE INDEX buyer_lists_user ON public.buyer_lists USING btree (created_by, created_at DESC NULLS LAST)
  • buyer_lists_pkey
    CREATE UNIQUE INDEX buyer_lists_pkey ON public.buyer_lists USING btree (id)

외래키 (0)

  • 없음
saved_views16 kB · 8 cols · 1 idx · 0 rows
Live rows0
Dead rows0
Seq scan879
Idx scan0
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (8)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
user_idtextNULL
nametextNOT NULL
filters_jsonjsonbNOT NULL
sort_jsonjsonbNULL
is_pinnedbooleanNOT NULLfalse
positionintegerNOT NULL0
created_attimestamp with time zoneNOT NULLnow()

인덱스 (1)

  • saved_views_pkey
    CREATE UNIQUE INDEX saved_views_pkey ON public.saved_views USING btree (id)

외래키 (0)

  • 없음
allowed_emails16 kB · 5 cols · 1 idx · 0 rows
Live rows0
Dead rows0
Seq scan54
Idx scan0
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (5)

이름타입NULL기본값
emailtextNOT NULL
invited_bytextNOT NULL
invited_attimestamp with time zoneNOT NULLnow()
activebooleanNOT NULLtrue
roletextNOT NULL'viewer'::text

인덱스 (1)

  • allowed_emails_pkey
    CREATE UNIQUE INDEX allowed_emails_pkey ON public.allowed_emails USING btree (email)

외래키 (0)

  • 없음
company_cache16 kB · 6 cols · 1 idx · 0 rows
Live rows0
Dead rows0
Seq scan2
Idx scan0
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (6)

이름타입NULL기본값
cache_keytextNOT NULL
resultjsonbNOT NULL
expires_attimestamp with time zoneNOT NULL
hitsintegerNOT NULL0
negative_signalsintegerNOT NULL0
created_attimestamp with time zoneNOT NULLnow()

인덱스 (1)

  • company_cache_pkey
    CREATE UNIQUE INDEX company_cache_pkey ON public.company_cache USING btree (cache_key)

외래키 (0)

  • 없음
deletion_requests16 kB · 5 cols · 1 idx · 0 rows
Live rows0
Dead rows0
Seq scan1
Idx scan0
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (5)

이름타입NULL기본값
iduuidNOT NULLgen_random_uuid()
subject_emailtextNOT NULL
received_attimestamp with time zoneNOT NULLnow()
completed_attimestamp with time zoneNULL
notestextNULL

인덱스 (1)

  • deletion_requests_pkey
    CREATE UNIQUE INDEX deletion_requests_pkey ON public.deletion_requests USING btree (id)

외래키 (0)

  • 없음
accounts16 kB · 11 cols · 1 idx · 0 rows
Live rows0
Dead rows0
Seq scan2
Idx scan0
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (11)

이름타입NULL기본값
userIdtextNOT NULL
typetextNOT NULL
providertextNOT NULL
providerAccountIdtextNOT NULL
refresh_tokentextNULL
access_tokentextNULL
expires_atintegerNULL
token_typetextNULL
scopetextNULL
id_tokentextNULL
session_statetextNULL

인덱스 (1)

  • accounts_provider_providerAccountId_pk
    CREATE UNIQUE INDEX "accounts_provider_providerAccountId_pk" ON public.accounts USING btree (provider, "providerAccountId")

외래키 (1)

  • userId → users.id
verificationToken16 kB · 3 cols · 1 idx · 0 rows
Live rows0
Dead rows0
Seq scan1
Idx scan0
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (3)

이름타입NULL기본값
identifiertextNOT NULL
tokentextNOT NULL
expirestimestamp with time zoneNOT NULL

인덱스 (1)

  • verificationToken_identifier_token_pk
    CREATE UNIQUE INDEX "verificationToken_identifier_token_pk" ON public."verificationToken" USING btree (identifier, token)

외래키 (0)

  • 없음
sessions16 kB · 3 cols · 1 idx · ~-1 rows
Live rows0
Dead rows0
Seq scan2
Idx scan0
Inserts0
Updates0
Deletes0
Last analyze

컬럼 (3)

이름타입NULL기본값
sessionTokentextNOT NULL
userIdtextNOT NULL
expirestimestamp with time zoneNOT NULL

인덱스 (1)

  • sessions_pkey
    CREATE UNIQUE INDEX sessions_pkey ON public.sessions USING btree ("sessionToken")

외래키 (1)

  • userId → users.id