rfq-aurora-prod · database rfq · PostgreSQL 17.7 on aarch64-unknown-linux-gnu읽는 법 · 채움률 = 100% − (NULL% + 빈문자열%). 샘플(테이블당 ≤400행) 기준 추정. 빨강=비어있음 → 초록=채워짐. 빨강이 많을수록 데이터 이슈.
각 칸 = 컬럼 1개 (마우스 올리면 컬럼명·채움률). 빨간 칸 = 거의/완전히 빈 컬럼.
| 테이블 | 컬럼 | 채움률 | 비어있는 비율 |
|---|---|---|---|
| agent_runs | error | 0% | 100% |
| agent_runs | sfn_task_token | 0% | 100% |
| agent_runs | buyer_record_id | 0% | 100% |
| buyer_clusters | last_contacted_at | 0% | 100% |
| buyer_records | buyer_cluster_id | 0% | 100% |
| buyer_records | status_note | 0% | 100% |
| buyer_records | status_by | 0% | 100% |
| buyer_records | status_at | 0% | 100% |
| buyer_records | assigned_to | 0% | 100% |
| buyer_records | expires_at | 0% | 100% |
| buyer_records | deleted_at | 0% | 100% |
| buyer_records | dedup_hash | 0% | 100% |
| buyer_supplier_matches | buyer_record_id | 0% | 100% |
| buyer_supplier_matches | sonnet_score | 0% | 100% |
| buyer_supplier_matches | sonnet_rationale | 0% | 100% |
| buyer_supplier_matches | fit_dimensions | 0% | 100% |
| buyer_supplier_matches | haiku_run_id | 0% | 100% |
| buyer_supplier_matches | sonnet_run_id | 0% | 100% |
| buyer_supplier_matches | status_by | 0% | 100% |
| buyer_supplier_matches | status_at | 0% | 100% |
| buyer_supplier_matches | status_note | 0% | 100% |
| buyer_supplier_matches | refreshed_at | 0% | 100% |
| buyer_supplier_matches | expires_at | 0% | 100% |
| campaigns | paused_until | 0% | 100% |
| campaigns | audience_snapshot_at | 0% | 100% |
| campaigns | reply_to | 0% | 100% |
| campaigns | deleted_at | 0% | 100% |
| company_profiles | min_order_value | 0% | 0% + blank 100% |
방법 · 테이블당 최대 400행 샘플(대용량은 TABLESAMPLE SYSTEM, 소용량은 random) 기반 컬럼 프로파일링 → 서브에이전트 4팀 병렬 정확도 감사. 모든 비율은 샘플 추정치이며 전수 검증 아님.
종합 진단 · 구조·인덱스·키 무결성은 양호하나, 코어 파이프라인 산출물(분류·임베딩·스코어·dedup·LLM 재랭킹)이 대규모로 미완이고 enrichment 데이터에 placeholder/리터럴 오염이 광범위. 데이터 '있음'보다 '정확도·완결성'이 핵심 리스크.
| 테이블 | 행수 | 심각도 | 발견 내용 | 권장 조치 |
|---|---|---|---|---|
| buyer_records | 3,545,276 | P1 | dedup 3종 컬럼 거의/전부 null + 정규화명 중복; vertical cross-column 불일치; score/enriched/embedding 50~95% null; 저신뢰 분류 ~17% | dedup 재가동, vertical 검증, 저confidence 재처리 |
| buyer_records | (cont.) | P2 | prefecture·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_enrichments | 282,729 | P0 | 문자열 'null' 11개 컬럼 오염; 플랫폼 도메인(pinterest·shopee) 회사 오매핑; email_confidence=0 73.8% | 'null'→NULL, platform 가드, generic 메일 제외 |
| sources | 216 | P1 | world_bank=beauty 오라벨; 죽은 설정 컬럼 다수 100% null; max_pages=0 비활성 의심; 전 소스 grey-area 스크랩 | vertical 재태깅, max_pages=0 점검 |
| scraper_cost_events | 9,719 | P2 | run_id 100% null(FK 전무), source_id 45% null → LLM 비용 소스별 분해 불가 | run_id 채우기 또는 폐기 결정 |
| export_events | 3 | P2 | row_count 50,000 상한 근접 → export 잘림 가능성; 동일 filter_hash 반복 | 50k cap 도달 시 분할/경고 |
| campaigns | 1 | OK | draft 1건, from_name/email 경미 불일치 | — |
| press_mentions·selector_configs·buyer_lists·saved_views | 0 | OK | 빈 테이블(미사용/신규) | 관찰 |
| 테이블 | 행수 | 심각도 | 발견 내용 | 권장 조치 |
|---|---|---|---|---|
| rfqs | 219,736 | P1 | buyer_name 100% null인데 buyer_company에 인물명(person 245/400) 매핑 역전 의심; quantity 수치·자유텍스트 혼재; buyer_country_iso='XX' 18.3%; 12개 컬럼 100% null | name/company ETL 검증, quantity 분리, XX→NULL |
| rfq_source_links | 194,751 | OK | null 0%, url distinct 100% — 무결성 양호 | — |
| email_verifications | 8,197 | P1 | credits_used 6자리 균일(잔여 카운터 의심); is_role 52%, invalid/unknown 31.7% | 단위 정의 확인, 적격률 모니터 |
| sourcing_shortlist | 미상 | P1 | fit_score max 42(0~10 스케일 이탈); verdict=weak 97.8% 쏠림; agent_run_id 100% null | fit_score 클램프, 연결 점검 |
| company_profiles | 1 | P2 | 1행만, target_*·certifications·keywords 모두 [] 미충진 → weak 매칭 원인 가능 | 타겟 메타 채우기 |
| users·sessions·company_cache·company_enrichment_jobs·scraper_run_events | 0 | OK | 빈 테이블 | 의도 공란 확인 |
| 테이블 | 행수 | 심각도 | 발견 내용 | 권장 조치 |
|---|---|---|---|---|
| buyer_supplier_matches | 920,501 | P1 | haiku_* 97% / sonnet_* 100% null → final_score가 vector_sim 패스스루(LLM 재랭킹 미적용); buyer_record_id 100% null 조인 누락 | 스코어링 잡 점검, final_score 구분 표기 |
| scraper_runs | 9,937 | P1 | rows_kept=0 49.8%, partial 49%; cost·heartbeat 미수집; config_snapshot 96% '{}' | 0행 소스 분석, 차단 점검 |
| buyer_record_clean | 4,174 | P1 | enrichment 결측(founded 96%·capital 97%·company_size 62% null); placeholder N/A·Unknown 혼입; enum 표기 불일치(GK vs GodoKaisha) | 커버리지 KPI, 더미 NULL화, 코드 정규화 |
| sourcing_runs | 미상 | P2 | ANALYZE 미실행, strong_count=0·cost=0 | ANALYZE, strong 0 모니터 |
| industry_taxonomy | 52 | P2 | aliases 100% null(별칭 미정의) | 별칭 매칭 쓰면 채움 |
| rate_limit_buckets | 60 | OK | 휘발성 버킷, key unique | — |
| suppressions·run_log·deletion_requests·allowed_emails | 0 | P2 | 빈 테이블. allowed_emails가 인증 게이트면 의도 확인 | 확인 |
| 테이블 | 행수 | 심각도 | 발견 내용 | 권장 조치 |
|---|---|---|---|---|
| agent_runs | 908,497 | P1 | rfq_id null 31.8%(trace로 이원화); failed 13.8%가 error 100% null(사유 미기록); buyer_record_id·sfn_task_token dead column | FK 정규화, 실패 error 적재 보장 |
| buyer_clusters | 13,150 | P1 | company_name placeholder 'User name' + 개인 인명 다수(컬럼명-내용 불일치); last_contacted_at·bounce 미연동 | 더미 필터, company/person 구분 |
| identity_backup_20260603 | 20,030 | P1 | 백업 테이블(날짜 접미사)이 운영 DB에 2만행 잔존; identity_type=unknown 8.25% | 아카이브/드롭, 운영 스키마서 분리 |
| verificationToken | 0 | P1 | 빈 테이블 + camelCase 명명(나머지 snake_case) → NextAuth 잔재, 네이밍 규칙 위반 | 드롭 또는 verification_tokens로 개명 |
| enrichments | 표본 1행 | P2 | 단건상 unverified_catchall + confidence 0.35, quality_* 전량 null | 표본 확대 재프로파일, 저신뢰 발송 게이트 |
| app_settings | 표본 2행 | P2 | updated_by null 50% 감사 추적 결손 | updated_by NOT NULL |
| campaign_members·pending_runs·rfq_status_history·accounts | 0 | P2 | 빈 테이블. 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 |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| source_id | text | NOT NULL | |
| source_record_id | text | NOT NULL | |
| company_name | text | NOT NULL | |
| company_name_normalized | text | NOT NULL | |
| country_iso | character varying | NOT NULL | |
| city | text | NULL | |
| address | text | NULL | |
| tax_id | text | NULL | |
| intent_strength | text | NOT NULL | |
| priority_tier | integer | NOT NULL | 4 |
| is_beauty | text | NULL | |
| beauty_subcategory | text | NULL | |
| company_brief | text | NULL | |
| brands_carried | ARRAY | NULL | |
| classifier_at | timestamp with time zone | NULL | |
| classifier_model | text | NULL | |
| classifier_confidence | real | NULL | |
| source_url | text | NULL | |
| raw_json | jsonb | NULL | |
| embedding | USER-DEFINED | NULL | |
| dedup_cluster_id | uuid | NULL | |
| is_canonical | boolean | NOT NULL | true |
| buyer_cluster_id | uuid | NULL | |
| status | text | NOT NULL | 'new'::text |
| status_note | text | NULL | |
| status_by | text | NULL | |
| status_at | timestamp with time zone | NULL | |
| assigned_to | text | NULL | |
| score | real | NULL | |
| scored_at | timestamp with time zone | NULL | |
| enriched_at | timestamp with time zone | NULL | |
| expires_at | timestamp with time zone | NULL | |
| deleted_at | timestamp with time zone | NULL | |
| created_at | timestamp with time zone | NOT NULL | now() |
| updated_at | timestamp with time zone | NOT NULL | now() |
| identity_type | text | NULL | |
| dedup_hash | text | NULL | |
| record_type | text | NOT NULL | 'buyer'::text |
| prefecture | text | NULL | |
| city_clean | text | NULL | |
| vertical | text | NULL | |
| embedding_qwen | USER-DEFINED | NULL | |
| industry | text | NULL | |
| category | text | NULL | |
| industry_relevance | text | NULL | |
| business_type | text | NULL | |
| b2b_or_b2c | text | NULL | |
| trade_role | text | NULL | |
| rinda_fit | boolean | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| org_id | integer | NOT NULL | 1 |
| source_id | text | NOT NULL | |
| source_url | text | NOT NULL | |
| source_uid | text | NULL | |
| title | text | NOT NULL | |
| description | text | NOT NULL | |
| product_category | text | NULL | |
| buyer_name | text | NULL | |
| buyer_company | text | NULL | |
| buyer_company_normalized | text | NULL | |
| buyer_country_iso | character varying | NULL | |
| quantity | text | NULL | |
| posted_at | timestamp with time zone | NULL | |
| expires_at | timestamp with time zone | NULL | |
| raw_html_s3_key | text | NULL | |
| raw_json | jsonb | NULL | |
| is_beauty | text | NULL | |
| beauty_tags | ARRAY | NULL | |
| hs_codes | ARRAY | NULL | |
| quality | text | NULL | |
| needs_research | boolean | NULL | false |
| classifier_model | text | NULL | |
| classifier_at | timestamp with time zone | NULL | |
| embedding | USER-DEFINED | NULL | |
| dedup_cluster_id | uuid | NULL | |
| is_canonical | boolean | NOT NULL | true |
| canonical_rfq_id | uuid | NULL | |
| buyer_cluster_id | uuid | NULL | |
| status | text | NOT NULL | 'new'::text |
| status_note | text | NULL | |
| status_by | text | NULL | |
| status_at | timestamp with time zone | NULL | |
| deleted_at | timestamp with time zone | NULL | |
| created_at | timestamp with time zone | NOT NULL | now() |
| updated_at | timestamp with time zone | NOT NULL | now() |
| assigned_to | text | NULL | |
| identity_type | text | NULL | |
| dedup_hash | text | NULL | |
| vertical | text | NULL | |
| industry | text | NULL | |
| category | text | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| rfq_id | uuid | NULL | |
| buyer_record_id | uuid | NULL | |
| supplier_id | uuid | NOT NULL | |
| pipeline_stage | text | NOT NULL | 'candidate'::text |
| vector_sim | real | NULL | |
| haiku_score | real | NULL | |
| haiku_verdict | text | NULL | |
| haiku_reason | text | NULL | |
| sonnet_score | real | NULL | |
| sonnet_rationale | text | NULL | |
| fit_dimensions | jsonb | NULL | |
| final_score | real | NOT NULL | 0 |
| buyer_content_hash | text | NULL | |
| supplier_content_hash | text | NULL | |
| haiku_run_id | uuid | NULL | |
| sonnet_run_id | uuid | NULL | |
| match_version | integer | NOT NULL | 1 |
| status | text | NOT NULL | 'pending'::text |
| status_by | text | NULL | |
| status_at | timestamp with time zone | NULL | |
| status_note | text | NULL | |
| blocked_reason | text | NULL | |
| is_visible | boolean | NOT NULL | true |
| matched_at | timestamp with time zone | NOT NULL | now() |
| refreshed_at | timestamp with time zone | NULL | |
| expires_at | timestamp with time zone | NULL | |
| created_at | timestamp with time zone | NOT NULL | now() |
| updated_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| rfq_id | uuid | NULL | |
| agent_type | text | NOT NULL | |
| model | text | NOT NULL | |
| status | text | NOT NULL | |
| tokens_in | integer | NOT NULL | 0 |
| tokens_out | integer | NOT NULL | 0 |
| cost_usd | real | NOT NULL | 0 |
| iterations | integer | NOT NULL | 0 |
| trace | jsonb | NULL | |
| error | text | NULL | |
| batch_id | text | NULL | |
| started_at | timestamp with time zone | NOT NULL | now() |
| finished_at | timestamp with time zone | NULL | |
| sfn_task_token | text | NULL | |
| buyer_record_id | uuid | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| buyer_record_id | uuid | NOT NULL | |
| company_domain | text | NULL | |
| text | NULL | ||
| email_verification | text | NULL | |
| email_confidence | real | NULL | |
| phone | text | NULL | |
| linkedin_url | text | NULL | |
| decision_maker_name | text | NULL | |
| decision_maker_title | text | NULL | |
| verifier | text | NULL | |
| sources | jsonb | NULL | |
| agent_run_id | uuid | NULL | |
| enriched_at | timestamp with time zone | NOT NULL | now() |
| instagram_url | text | NULL | |
| facebook_url | text | NULL | |
| tiktok_url | text | NULL | |
| youtube_url | text | NULL | |
| marketplace_url | text | NULL | |
| linktree_url | text | NULL | |
| quality_score | real | NULL | |
| quality_verdict | text | NULL | |
| quality_flags | ARRAY | NULL | |
| contact_form_url | text | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| canonical_rfq_id | uuid | NOT NULL | |
| source_id | text | NOT NULL | |
| source_url | text | NOT NULL | |
| created_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| source_id | text | NOT NULL | |
| triggered_by | text | NOT NULL | |
| triggered_by_user | text | NULL | |
| status | text | NOT NULL | |
| started_at | timestamp with time zone | NULL | |
| finished_at | timestamp with time zone | NULL | |
| rows_in | integer | NOT NULL | 0 |
| rows_kept | integer | NOT NULL | 0 |
| rows_duplicate | integer | NOT NULL | 0 |
| error_count | integer | NOT NULL | 0 |
| error_sample | jsonb | NULL | |
| cost_usd_cents | integer | NOT NULL | 0 |
| config_snapshot | jsonb | NOT NULL | |
| cloudwatch_log_stream | text | NULL | |
| created_at | timestamp with time zone | NOT NULL | now() |
| last_heartbeat_at | timestamp with time zone | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| normalized_key | text | NOT NULL | |
| company_name | text | NULL | |
| country_iso | character varying | NULL | |
| rfq_count | integer | NOT NULL | 0 |
| last_contacted_at | timestamp with time zone | NULL | |
| bounce_count | integer | NOT NULL | 0 |
| created_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | bigint | NOT NULL | nextval('scraper_cost_events_id_seq'::regclass) |
| source_id | text | NULL | |
| run_id | uuid | NULL | |
| occurred_at | timestamp with time zone | NOT NULL | now() |
| unit | text | NOT NULL | |
| quantity | real | NOT NULL | |
| unit_cost_usd_micros | integer | NOT NULL | |
| total_usd_micros | integer | NOT NULL | |
| meta | jsonb | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| text | NOT NULL | ||
| result | text | NOT NULL | |
| quality | text | NULL | |
| subresult | text | NULL | |
| is_free | boolean | NOT NULL | false |
| is_role | boolean | NOT NULL | false |
| credits_used | integer | NOT NULL | 0 |
| provider | text | NOT NULL | |
| verified_at | timestamp with time zone | NOT NULL | now() |
| expires_at | timestamp with time zone | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| buyer_record_id | uuid | NOT NULL | |
| business_type | text | NULL | |
| b2b_or_b2c | text | NULL | |
| company_size | text | NULL | |
| legal_entity_type | text | NULL | |
| founded_year | integer | NULL | |
| capital_jpy | bigint | NULL | |
| export_oriented | boolean | NULL | |
| english_capable | boolean | NULL | |
| products_services | ARRAY | NULL | |
| clean_keywords | ARRAY | NULL | |
| industry_en | text | NULL | |
| name_en | text | NULL | |
| address_en | text | NULL | |
| decision_maker_name | text | NULL | |
| decision_maker_name_en | text | NULL | |
| target_customers | text | NULL | |
| ward | text | NULL | |
| desc_en | text | NULL | |
| desc_jp | text | NULL | |
| model_name | text | NULL | |
| cleaned_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| tbl | text | NULL | |
| id | uuid | NULL | |
| identity_type | text | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | text | NOT NULL | |
| name | text | NOT NULL | |
| base_url | text | NOT NULL | |
| cadence_cron | text | NOT NULL | |
| enabled | boolean | NOT NULL | true |
| config | jsonb | NOT NULL | |
| tos_status | text | NOT NULL | 'scrape_grey'::text |
| lia_url | text | NULL | |
| last_run_at | timestamp with time zone | NULL | |
| breaker_state | text | NOT NULL | 'closed'::text |
| consecutive_failures | integer | NOT NULL | 0 |
| created_at | timestamp with time zone | NOT NULL | now() |
| kind | text | NULL | |
| config_version | integer | NOT NULL | 1 |
| monthly_budget_usd_cents | integer | NULL | |
| secrets_ref | text | NULL | |
| updated_by | text | NULL | |
| updated_at | timestamp with time zone | NOT NULL | now() |
| next_run_at | timestamp with time zone | NULL | |
| paused_until | timestamp with time zone | NULL | |
| schedule_note | text | NULL | |
| vertical | text | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| company_profile_id | uuid | NOT NULL | |
| rfq_id | uuid | NULL | |
| buyer_record_id | uuid | NULL | |
| fit_score | real | NULL | |
| verdict | text | NULL | |
| rationale | text | NULL | |
| fit_dimensions | jsonb | NULL | |
| agent_run_id | uuid | NULL | |
| qualified_at | timestamp with time zone | NULL | |
| status | text | NOT NULL | 'shortlisted'::text |
| created_by | text | NOT NULL | |
| created_at | timestamp with time zone | NOT NULL | now() |
| updated_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| company_profile_id | uuid | NOT NULL | |
| status | text | NOT NULL | 'queued'::text |
| total_candidates | integer | NOT NULL | 0 |
| completed_candidates | integer | NOT NULL | 0 |
| strong_count | integer | NOT NULL | 0 |
| params | jsonb | NOT NULL | |
| candidate_keys | jsonb | NULL | |
| cancel_requested | boolean | NOT NULL | false |
| last_heartbeat_at | timestamp with time zone | NULL | |
| error | text | NULL | |
| cost_usd_micros | integer | NOT NULL | 0 |
| created_by | text | NOT NULL | |
| created_at | timestamp with time zone | NOT NULL | now() |
| started_at | timestamp with time zone | NULL | |
| finished_at | timestamp with time zone | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| rfq_id | uuid | NOT NULL | |
| company_domain | text | NULL | |
| text | NULL | ||
| email_verification | text | NULL | |
| email_confidence | real | NULL | |
| phone | text | NULL | |
| linkedin_url | text | NULL | |
| decision_maker_name | text | NULL | |
| decision_maker_title | text | NULL | |
| sources | jsonb | NULL | |
| agent_run_id | uuid | NULL | |
| enriched_at | timestamp with time zone | NOT NULL | now() |
| instagram_url | text | NULL | |
| facebook_url | text | NULL | |
| tiktok_url | text | NULL | |
| youtube_url | text | NULL | |
| marketplace_url | text | NULL | |
| linktree_url | text | NULL | |
| quality_score | real | NULL | |
| quality_verdict | text | NULL | |
| quality_flags | ARRAY | NULL | |
| contact_form_url | text | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| name | text | NOT NULL | |
| status | text | NOT NULL | 'draft'::text |
| paused_until | timestamp with time zone | NULL | |
| audience_filters_json | jsonb | NOT NULL | |
| audience_snapshot_at | timestamp with time zone | NULL | |
| steps_json | jsonb | NOT NULL | |
| from_email | text | NOT NULL | |
| from_name | text | NOT NULL | |
| reply_to | text | NULL | |
| consent_basis | text | NOT NULL | 'b2b_legitimate_interest'::text |
| send_window_start_hour | integer | NOT NULL | 9 |
| send_window_end_hour | integer | NOT NULL | 17 |
| send_window_days | ARRAY | NOT NULL | '{Mon,Tue,Wed,Thu,Fri}'::text[] |
| created_by | text | NOT NULL | |
| created_at | timestamp with time zone | NOT NULL | now() |
| updated_at | timestamp with time zone | NOT NULL | now() |
| deleted_at | timestamp with time zone | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| name | text | NOT NULL | |
| description | text | NULL | |
| target_categories | ARRAY | NULL | |
| target_countries | ARRAY | NULL | |
| certifications | ARRAY | NULL | |
| keywords | ARRAY | NULL | |
| min_order_value | text | NULL | |
| active | boolean | NOT NULL | true |
| created_by | text | NOT NULL | |
| created_at | timestamp with time zone | NOT NULL | now() |
| updated_at | timestamp with time zone | NOT NULL | now() |
| website | text | NULL | |
| role | text | NOT NULL | 'seller'::text |
| ideal_counterpart_profile | text | NULL | |
| embedding | USER-DEFINED | NULL | |
| embedded_at | timestamp with time zone | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| key | text | NOT NULL | |
| tokens | real | NOT NULL | |
| updated_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| campaign_id | uuid | NOT NULL | |
| rfq_id | uuid | NULL | |
| buyer_record_id | uuid | NULL | |
| buyer_cluster_id | uuid | NULL | |
| text | NOT NULL | ||
| status | text | NOT NULL | 'pending'::text |
| current_step | integer | NOT NULL | 0 |
| next_due_at | timestamp with time zone | NULL | |
| unsub_token | uuid | NOT NULL | gen_random_uuid() |
| last_event_type | text | NULL | |
| last_event_at | timestamp with time zone | NULL | |
| provider_message_id | text | NULL | |
| sent_attempt | integer | NOT NULL | 0 |
| enrolled_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| buyer_record_id | uuid | NULL | |
| buyer_company_raw | text | NOT NULL | |
| buyer_country_iso | character varying | NULL | |
| brand_imported | text | NULL | |
| deal_type | text | NULL | |
| deal_date | timestamp with time zone | NULL | |
| deal_metrics | jsonb | NULL | |
| evidence_quote | text | NOT NULL | |
| publication | text | NOT NULL | |
| source_url | text | NOT NULL | |
| extracted_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| campaign_id | uuid | NOT NULL | |
| company_name | text | NOT NULL | |
| country_iso | text | NULL | |
| status | text | NOT NULL | 'pending'::text |
| linkup_task_id | text | NULL | |
| submitted_at | timestamp with time zone | NULL | |
| domain | text | NULL | |
| best_email | text | NULL | |
| email_state | text | NULL | |
| decision_maker_name | text | NULL | |
| decision_maker_title | text | NULL | |
| company_brief | text | NULL | |
| linkup_sources_json | jsonb | NULL | |
| linkup_raw_output_json | jsonb | NULL | |
| cost_usd_micros | integer | NOT NULL | 0 |
| error | text | NULL | |
| matched_rfq_count | integer | NOT NULL | 0 |
| matched_buyer_record_count | integer | NOT NULL | 0 |
| started_at | timestamp with time zone | NULL | |
| finished_at | timestamp with time zone | NULL | |
| created_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| industry | text | NOT NULL | |
| category | text | NOT NULL | |
| label | text | NULL | |
| aliases | ARRAY | NULL | |
| hs_codes | ARRAY | NULL | |
| active | boolean | NOT NULL | true |
| sort_order | integer | NOT NULL | 0 |
| created_at | timestamp with time zone | NOT NULL | now() |
| updated_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | integer | NOT NULL | nextval('drizzle.__drizzle_migrations_id_seq'::regclass) |
| hash | text | NOT NULL | |
| created_at | bigint | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| key | text | NOT NULL | |
| value | jsonb | NOT NULL | |
| updated_by | text | NULL | |
| updated_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | bigint | NOT NULL | nextval('export_events_id_seq'::regclass) |
| user_id | text | NOT NULL | |
| columns | ARRAY | NOT NULL | |
| filter_hash | text | NOT NULL | |
| row_count | integer | NOT NULL | |
| s3_key | text | NULL | |
| sha256 | text | NOT NULL | |
| exported_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | bigint | NOT NULL | nextval('scraper_run_events_id_seq'::regclass) |
| run_id | uuid | NOT NULL | |
| source_id | text | NOT NULL | |
| seq | integer | NOT NULL | |
| level | text | NOT NULL | |
| phase | text | NULL | |
| message | text | NOT NULL | |
| context | jsonb | NULL | |
| occurred_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| text | NOT NULL | ||
| domain | text | NULL | |
| reason | text | NOT NULL | |
| campaign_id | uuid | NULL | |
| created_at | timestamp with time zone | NOT NULL | now() |
| expires_at | timestamp with time zone | NULL | |
| note | text | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| source_id | text | NOT NULL | |
| requested_by | text | NOT NULL | |
| requested_at | timestamp with time zone | NOT NULL | now() |
| claimed_at | timestamp with time zone | NULL | |
| claimed_by | text | NULL | |
| run_id | uuid | NULL | |
| override_config | jsonb | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| source_id | text | NOT NULL | |
| version | integer | NOT NULL | |
| selectors | jsonb | NOT NULL | |
| is_active | boolean | NOT NULL | true |
| created_at | timestamp with time zone | NOT NULL | now() |
| created_by | text | NOT NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | text | NOT NULL | |
| name | text | NULL | |
| text | NULL | ||
| emailVerified | timestamp with time zone | NULL | |
| image | text | NULL | |
| role | text | NOT NULL | 'va'::text |
| active | boolean | NOT NULL | true |
| password_hash | text | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| source_id | text | NOT NULL | |
| started_at | timestamp with time zone | NOT NULL | now() |
| finished_at | timestamp with time zone | NULL | |
| status | text | NOT NULL | |
| rows_seen | integer | NOT NULL | 0 |
| rows_kept | integer | NOT NULL | 0 |
| rows_deduped | integer | NOT NULL | 0 |
| errors | jsonb | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | bigint | NOT NULL | nextval('rfq_status_history_id_seq'::regclass) |
| rfq_id | uuid | NOT NULL | |
| old_status | text | NULL | |
| new_status | text | NOT NULL | |
| note | text | NULL | |
| user_id | text | NULL | |
| changed_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| name | text | NOT NULL | |
| description | text | NULL | |
| query_text | text | NOT NULL | |
| filters_json | jsonb | NOT NULL | |
| row_count | integer | NOT NULL | 0 |
| created_by | text | NOT NULL | |
| created_at | timestamp with time zone | NOT NULL | now() |
| updated_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| user_id | text | NULL | |
| name | text | NOT NULL | |
| filters_json | jsonb | NOT NULL | |
| sort_json | jsonb | NULL | |
| is_pinned | boolean | NOT NULL | false |
| position | integer | NOT NULL | 0 |
| created_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| text | NOT NULL | ||
| invited_by | text | NOT NULL | |
| invited_at | timestamp with time zone | NOT NULL | now() |
| active | boolean | NOT NULL | true |
| role | text | NOT NULL | 'viewer'::text |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| cache_key | text | NOT NULL | |
| result | jsonb | NOT NULL | |
| expires_at | timestamp with time zone | NOT NULL | |
| hits | integer | NOT NULL | 0 |
| negative_signals | integer | NOT NULL | 0 |
| created_at | timestamp with time zone | NOT NULL | now() |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| id | uuid | NOT NULL | gen_random_uuid() |
| subject_email | text | NOT NULL | |
| received_at | timestamp with time zone | NOT NULL | now() |
| completed_at | timestamp with time zone | NULL | |
| notes | text | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| userId | text | NOT NULL | |
| type | text | NOT NULL | |
| provider | text | NOT NULL | |
| providerAccountId | text | NOT NULL | |
| refresh_token | text | NULL | |
| access_token | text | NULL | |
| expires_at | integer | NULL | |
| token_type | text | NULL | |
| scope | text | NULL | |
| id_token | text | NULL | |
| session_state | text | NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| identifier | text | NOT NULL | |
| token | text | NOT NULL | |
| expires | timestamp with time zone | NOT NULL |
| 이름 | 타입 | NULL | 기본값 |
|---|---|---|---|
| sessionToken | text | NOT NULL | |
| userId | text | NOT NULL | |
| expires | timestamp with time zone | NOT NULL |