전체 문서
이 페이지 목차
- Function 4개
- Trigger 22개
- 조건부 legacy migration과 최종 정의
- 확인 범위
- Trigger 개별 진입
- trg_companies_upd
- trg_av2_upd
- trg_exp_upd
- trg_expnodes_upd
- trg_llm_upd
- trg_task_categories_upd
- trg_tasks_upd
- trg_task_archives_upd
- trg_task_templates_upd
- trg_task_asset_links_upd
- trg_assets_task_links
- trg_task_llm_profiles_upd
- trg_agents_upd
- trg_mcp_upd
- trg_tools_upd
- trg_conversations_upd
- trg_agent_triggers_upd
- trg_intercept_rules_upd
- trg_conversation_retest_delete
- trg_asset_intercept_rules_upd
- trg_task_intercept_rules_upd
- trg_notification_channels_upd
PostgreSQL function·trigger·migration 참조
core db/schema.sql의 table 바깥 상태 변경을 정적으로 추출한다. 고정 source revision에는 function 4개, trigger 22개(공용 updated_at 20 + asset provenance 1 + retest 정리 1), ALTER TABLE 문 86개, 명시 index 97개가 있다. Core 49개 table의 최종 column 합집합 520개는 raw DDL을 정적으로 합친 수이며 PostgreSQL을 실행해 검증한 결과가 아니다. core schema
Function 4개
Function 4개 · 관계
이 대상을 사용하는 기능·모듈·계약 · 1개
- 계약 사용 · 동시성·transaction·lock · transaction/lock 해석이 trigger와 function contract를 사용 · core-edge-15
| function | function effect + trigger/call-site table effect | trigger/caller |
|---|---|---|
set_updated_at() |
companies write(updated_at); assets write(updated_at); explorations write(updated_at); exploration_nodes write(updated_at); llm_profiles write(updated_at); task_categories write(updated_at); tasks write(updated_at); task_archives write(updated_at); task_templates write(updated_at); task_asset_links write(updated_at); task_llm_profiles write(updated_at); agents write(updated_at); mcp_servers write(updated_at); tools write(updated_at); conversations write(updated_at); agent_triggers write(updated_at); intercept_rules write(updated_at); asset_intercept_rules write(updated_at); task_intercept_rules write(updated_at); notification_channels write(updated_at) |
trg_companies_upd, trg_av2_upd, trg_exp_upd, trg_expnodes_upd, trg_llm_upd, trg_task_categories_upd, trg_tasks_upd, trg_task_archives_upd, trg_task_templates_upd, trg_task_asset_links_upd, trg_task_llm_profiles_upd, trg_agents_upd, trg_mcp_upd, trg_tools_upd, trg_conversations_upd, trg_agent_triggers_upd, trg_intercept_rules_upd, trg_asset_intercept_rules_upd, trg_task_intercept_rules_upd, trg_notification_channels_upd |
try_inet() |
직접 table read/write 없음; text→inet/NULL 변환. assets·company_scope·task_scope는 이 함수를 호출하는 query의 table |
try_inet(...) production query |
sync_task_asset_links() |
assets read trigger row(id,task_ids); tasks read(id,deleted_at); task_asset_links write(task_id,asset_id,source,source_summary) |
trg_assets_task_links |
stop_deleted_conversation_retest() |
conversations read trigger row(id); finding_retests write(status,error,finished_at) |
trg_conversation_retest_delete |
Trigger 22개
| trigger | timing/event/level | fire table | function | 영향 열·상태 |
|---|---|---|---|---|
trg_companies_upd |
BEFORE UPDATE / ROW |
companies |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_av2_upd |
BEFORE UPDATE / ROW |
assets |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_exp_upd |
BEFORE UPDATE / ROW |
explorations |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_expnodes_upd |
BEFORE UPDATE / ROW |
exploration_nodes |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_llm_upd |
BEFORE UPDATE / ROW |
llm_profiles |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_task_categories_upd |
BEFORE UPDATE / ROW |
task_categories |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_tasks_upd |
BEFORE UPDATE / ROW |
tasks |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_task_archives_upd |
BEFORE UPDATE / ROW |
task_archives |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_task_templates_upd |
BEFORE UPDATE / ROW |
task_templates |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_task_asset_links_upd |
BEFORE UPDATE / ROW |
task_asset_links |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_assets_task_links |
AFTER INSERT OR UPDATE OF TASK_IDS / ROW |
assets |
sync_task_asset_links() |
asset task_ids 뒤 provenance link insert/delete |
trg_task_llm_profiles_upd |
BEFORE UPDATE / ROW |
task_llm_profiles |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_agents_upd |
BEFORE UPDATE / ROW |
agents |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_mcp_upd |
BEFORE UPDATE / ROW |
mcp_servers |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_tools_upd |
BEFORE UPDATE / ROW |
tools |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_conversations_upd |
BEFORE UPDATE / ROW |
conversations |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_agent_triggers_upd |
BEFORE UPDATE / ROW |
agent_triggers |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_intercept_rules_upd |
BEFORE UPDATE / ROW |
intercept_rules |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_conversation_retest_delete |
BEFORE DELETE / ROW |
conversations |
stop_deleted_conversation_retest() |
conversation delete 전에 active retest를 stopped로 전이 |
trg_asset_intercept_rules_upd |
BEFORE UPDATE / ROW |
asset_intercept_rules |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_task_intercept_rules_upd |
BEFORE UPDATE / ROW |
task_intercept_rules |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
trg_notification_channels_upd |
BEFORE UPDATE / ROW |
notification_channels |
set_updated_at() |
row update 전에 updated_at을 now()로 덮어씀 |
각 trigger는 DROP TRIGGER IF EXISTS 뒤 재생성된다. schema file이 startup transaction에서 끝까지 commit되기 전에 실패하면 새 정의는 적용되지 않는다. 실제 운영 schema drift는 관찰하지 않았다.
조건부 legacy migration과 최종 정의
조건부 legacy migration과 최종 정의 · 관계
이 대상이 사용하는 구현·계약·의존 · 1개
- 계약 사용 · PostgreSQL 필드·접근 의미 카탈로그 · migration outcome determines installed physical constraints · db-migration-contract
이 대상을 사용하는 기능·모듈·계약 · 1개
- 계약 사용 · Schema 적용 · startup executes the schema migration/backfill contract · db-migration-contract
아래 블록은 fresh CREATE만으로는 보이지 않는 기존 설치 변환이다. 조건이 맞는 row/constraint에만 실행되며, block 안 SQL이 실패하면 startup schema transaction이 rollback되고 server startup도 실패한다.
| 객체 | fresh 정의 | legacy 조건과 변경 | 실패·경계 |
|---|---|---|---|
exploration_nodes.ck_node_kind |
begin, goal, intent, fact, finding, hint, digest |
같은 이름 constraint의 pg_get_constraintdef text에 digest token이 없을 때 drop/recreate |
lexical substring 탐지라 token만 포함한 wrong/weaker/stricter 식은 skip될 수 있음; 다른 이름 제약은 바꾸지 않으며 legacy kind가 최종 allowlist 밖이면 ADD CHECK 실패·rollback |
exploration_nodes.ck_node_state |
intent에 paused/deleted, digest에 superseded를 포함한 kind별 state check |
같은 이름 constraint text에 paused, superseded, deleted token 중 하나라도 없을 때 drop/recreate |
lexical substring 탐지라 세 token만 포함한 wrong/weaker/stricter 식은 skip될 수 있음; 기존 row가 최종 check를 위반하면 add 실패·rollback |
exploration_edges.ck_edge_rel |
spawns, derived_from, yields, proves, covers |
constraint text에 rel을 포함하고 covers가 없는 CHECK의 동적 legacy 이름을 찾아 drop한 뒤 ck_edge_rel 추가 |
lexical substring 선택이라 unrelated/wrong CHECK도 후보가 될 수 있음; 일치가 0개면 drifted table에 최종 check를 추가하지 않음; non-STRICT SELECT INTO와 ORDER BY 부재로 여러 일치 중 임의 하나만 drop해 남은 stricter check가 covers를 거부할 수 있음; legacy row 위반 시 add 실패·rollback |
llm_profiles.thinking_type |
TEXT NOT NULL DEFAULT '' |
column이 없을 때만 추가하고 old reasoning_effort: low/medium/high/max→enabled, off→disabled+effort 빈 값 |
information_schema.columns lookup에 table_schema filter가 없어 search path 밖 동명 table이 있으면 잘못 skip할 수 있음(U); column이 이미 있으면 backfill 전체를 건너뛰어 사용자의 이후 조합을 보존 |
agents.current_prompt_id FK |
agent_prompts(id) ON DELETE SET NULL |
두 table 생성 뒤 fk_agents_curprompt를 추가; duplicate_object는 정의를 대조하지 않고 무시 |
같은 이름의 기존 FK가 잘못된 column/target/delete action이어도 조용히 수용·미수리; 다른 이름의 같은 FK는 중복될 수 있고 orphan legacy 값이면 add 실패·rollback |
Fresh·upgrade 제약 및 반복 migration
| owning object | startup 행위 | fresh·legacy 차이와 실패 경계 |
|---|---|---|
agents.trigger_run_mode/trigger_merge_mode |
legacy DB에 column/default/not-null을 ADD COLUMN IF NOT EXISTS |
fresh CREATE 경로에만 mode allowlist CHECK가 있고 legacy ADD에는 CHECK가 없다. upgraded DB의 무결성은 backend 쓰기 allowlist에 의존하며 DB 전역 보장이 아님 |
task_intercept_rules.action |
legacy DB에 action TEXT NOT NULL DEFAULT 'block' 추가 |
fresh는 block/allow CHECK가 있지만 legacy ADD에는 CHECK가 없어 동일한 divergence가 있음 |
intercept_pending.decision_source |
column 추가 후 빈 값을 rule_id→rule, [模型]%→model, 나머지→unknown으로 CASE UPDATE |
WHERE decision_source=''를 매 startup 반복 실행하므로 이후 빈 값을 저장하면 다음 startup에 다시 분류됨; statement 실패 시 transaction rollback |
task_scope |
old uq_task_scope를 조건 없이 drop하고 value까지 포함한 uq_task_scope_v2를 IF NOT EXISTS로 생성 |
IF NOT EXISTS는 이름만 검사하므로 동명 stale/wrong 정의를 수리하지 않음; 신규 생성을 거부하는 legacy 중복이 있으면 statement 실패가 transaction rollback되어 old drop도 되돌아가야 함; 실제 DB는 미관찰 |
mcp_servers |
ScopeSentry 이름이 없을 때 disabled HTTP placeholder(URL null, empty API-key env) insert |
name conflict면 DO NOTHING; 사용자가 수정한 row를 덮어쓰지 않지만, 다른 이름의 동일 server는 중복 개념으로 남을 수 있음 |
company_scope, llm_profiles, task_scope, mcp_servers, assets.company_source |
매 startup에 소스가 지정한 exact constraint name만 DROP CONSTRAINT IF EXISTS한 뒤 현재 allowlist/payload/format/max/retry/transport/source CHECK를 다시 추가 |
NOT VALID가 아니라 기존 row를 매번 전수 재검증하고 ALTER table lock이 normal writer를 block할 수 있음. initializer의 session advisory lock은 schema initializer와 명시적으로 참여하는 archive/aux-ledger transaction을 직렬화하지만 일반 connection은 gate하지 않음. invalid legacy row면 schema transaction과 startup이 중단되며, 다른 이름의 old/stricter semantic CHECK는 남아 새 named CHECK와 병존할 수 있음; 자동 정규화는 assets.company_source null→explicit 외에 없음 |
task_archives.format_version, agents.run_seconds |
column default를 각각 2, 1200으로 ALTER | 기존 row backfill이 아니며 이후 default를 쓰는 INSERT에만 적용 |
ADD COLUMN IF NOT EXISTS는 column이 없을 때만 선언한 type/null/default/FK를 적용한다. 같은 이름의 legacy column이 다른 property를 가져도 별도 ALTER가 없는 한 수렴하지 않는다. 따라서 core 520-column 합집합은 이 revision의 declared target이며 upgraded 운영 catalog의 520개 property가 모두 같다는 보장이 아니다.
Startup data backfill
| owning object | exact mutation | 조건·멱등성 | 부분 실패 경계 |
|---|---|---|---|
assets.company_source |
UPDATE assets SET company_source='explicit' WHERE company_source IS NULL 뒤 default/not-null/check 적용 |
null legacy row만 매 startup 변환; 이미 explicit/scope인 row는 유지 |
legacy null update 또는 뒤 constraint 적용 실패 시 core schema transaction 전체 rollback |
assets.task_ids → task_asset_links |
array를 unnest해 존재하며 deleted_at IS NULL인 task만 (task_id,asset_id,source=legacy) insert |
ON CONFLICT DO NOTHING으로 재실행 멱등; stale/deleted task id는 link를 만들지 않음 |
statement 실패 시 core schema transaction rollback; 기존 detailed source row는 conflict로 덮지 않음 |
tasks.llm_profile_id → task_llm_profiles |
chain이 없는 pinned task에 position 0 row insert 후 active_llm_profile_id가 null이고 chain row가 존재할 때 legacy profile로 설정 |
NOT EXISTS+ON CONFLICT DO NOTHING; user가 chain을 지우는 update는 legacy column도 비워 다음 startup 재생성을 막음 |
insert/update 둘 중 실패하면 같은 schema transaction rollback; existing non-null active profile은 보존 |
llm_profiles.reasoning_effort → thinking_type |
column이 없을 때 low/medium/high/max→enabled, off→disabled와 effort 빈 값 | column 존재 자체가 one-time marker; 이후 사용자 조합은 startup이 다시 쓰지 않음 | add 또는 두 UPDATE 중 실패하면 core schema transaction rollback |
CREATE TABLE column 510개와 ALTER ... ADD COLUMN 58개 중 48개 중복·10개 additive-only를 합치면 core 520개다. llm_records·llm_usage 31개는 이 파일 밖 best-effort Ensure*Table이며 core migration transaction과 가용성 보장이 다르다. 보조 ledger
확인 범위
| 층 | 확인 결과 |
|---|---|
| 고정 소스 정적 추출 | function 4, trigger 22, 명시 index 97, core table 49, 최종 column 합집합 520 |
| 실행 검증 | 수행하지 않음; PostgreSQL instance·migration log artifact 없음 |
| 미확인 | 운영 instance drift, legacy row backfill 성공, role/grant, extension, query plan |
reset-password.sh의 pgcrypto 사용은 운영 script 의존이다. core schema가 extension을 생성하거나 모든 배포에서 availability를 보장하지 않는다.
set_updated_at()
set_updated_at() · 관계
이 대상이 사용하는 구현·계약·의존 · 20개
- 계약 사용 · companies · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_companies_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-companies-upd
- 계약 사용 · assets · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_av2_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-av2-upd
- 계약 사용 · explorations · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_exp_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-exp-upd
- 계약 사용 · exploration_nodes · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_expnodes_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-expnodes-upd
- 계약 사용 · llm_profiles · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_llm_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-llm-upd
- 계약 사용 · task_categories · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_task_categories_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-task-categories-upd
- 계약 사용 · tasks · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_tasks_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-tasks-upd
- 계약 사용 · task_archives · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_task_archives_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-task-archives-upd
- 계약 사용 · task_templates · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_task_templates_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-task-templates-upd
- 계약 사용 · task_asset_links · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_task_asset_links_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-task-asset-links-upd
- 계약 사용 · task_llm_profiles · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_task_llm_profiles_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-task-llm-profiles-upd
- 계약 사용 · agents · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_agents_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-agents-upd
- 계약 사용 · mcp_servers · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_mcp_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-mcp-upd
- 계약 사용 · tools · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_tools_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-tools-upd
- 계약 사용 · conversations · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_conversations_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-conversations-upd
- 계약 사용 · agent_triggers · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_agent_triggers_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-agent-triggers-upd
- 계약 사용 · intercept_rules · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_intercept_rules_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-intercept-rules-upd
- 계약 사용 · asset_intercept_rules · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_asset_intercept_rules_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-asset-intercept-rules-upd
- 계약 사용 · task_intercept_rules · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_task_intercept_rules_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-task-intercept-rules-upd
- 계약 사용 · notification_channels · write; columns updated_at; BEFORE UPDATE ROW trigger `trg_notification_channels_upd`; provenance: trigger row/table declaration · db-ddl-trigger-trg-notification-channels-upd
이 대상을 사용하는 기능·모듈·계약 · 20개
- 의존 / 실행 · trg_companies_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-companies-upd
- 의존 / 실행 · trg_av2_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-av2-upd
- 의존 / 실행 · trg_exp_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-exp-upd
- 의존 / 실행 · trg_expnodes_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-expnodes-upd
- 의존 / 실행 · trg_llm_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-llm-upd
- 의존 / 실행 · trg_task_categories_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-task-categories-upd
- 의존 / 실행 · trg_tasks_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-tasks-upd
- 의존 / 실행 · trg_task_archives_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-task-archives-upd
- 의존 / 실행 · trg_task_templates_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-task-templates-upd
- 의존 / 실행 · trg_task_asset_links_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-task-asset-links-upd
- 의존 / 실행 · trg_task_llm_profiles_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-task-llm-profiles-upd
- 의존 / 실행 · trg_agents_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-agents-upd
- 의존 / 실행 · trg_mcp_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-mcp-upd
- 의존 / 실행 · trg_tools_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-tools-upd
- 의존 / 실행 · trg_conversations_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-conversations-upd
- 의존 / 실행 · trg_agent_triggers_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-agent-triggers-upd
- 의존 / 실행 · trg_intercept_rules_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-intercept-rules-upd
- 의존 / 실행 · trg_asset_intercept_rules_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-asset-intercept-rules-upd
- 의존 / 실행 · trg_task_intercept_rules_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-task-intercept-rules-upd
- 의존 / 실행 · trg_notification_channels_upd · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-notification-channels-upd
NEW.updated_at = now() 뒤 NEW 반환. 정확한 DDL 근거
| table | access/effect | 열 | 조건 |
|---|---|---|---|
companies |
write | updated_at |
BEFORE UPDATE ROW trigger trg_companies_upd |
assets |
write | updated_at |
BEFORE UPDATE ROW trigger trg_av2_upd |
explorations |
write | updated_at |
BEFORE UPDATE ROW trigger trg_exp_upd |
exploration_nodes |
write | updated_at |
BEFORE UPDATE ROW trigger trg_expnodes_upd |
llm_profiles |
write | updated_at |
BEFORE UPDATE ROW trigger trg_llm_upd |
task_categories |
write | updated_at |
BEFORE UPDATE ROW trigger trg_task_categories_upd |
tasks |
write | updated_at |
BEFORE UPDATE ROW trigger trg_tasks_upd |
task_archives |
write | updated_at |
BEFORE UPDATE ROW trigger trg_task_archives_upd |
task_templates |
write | updated_at |
BEFORE UPDATE ROW trigger trg_task_templates_upd |
task_asset_links |
write | updated_at |
BEFORE UPDATE ROW trigger trg_task_asset_links_upd |
task_llm_profiles |
write | updated_at |
BEFORE UPDATE ROW trigger trg_task_llm_profiles_upd |
agents |
write | updated_at |
BEFORE UPDATE ROW trigger trg_agents_upd |
mcp_servers |
write | updated_at |
BEFORE UPDATE ROW trigger trg_mcp_upd |
tools |
write | updated_at |
BEFORE UPDATE ROW trigger trg_tools_upd |
conversations |
write | updated_at |
BEFORE UPDATE ROW trigger trg_conversations_upd |
agent_triggers |
write | updated_at |
BEFORE UPDATE ROW trigger trg_agent_triggers_upd |
intercept_rules |
write | updated_at |
BEFORE UPDATE ROW trigger trg_intercept_rules_upd |
asset_intercept_rules |
write | updated_at |
BEFORE UPDATE ROW trigger trg_asset_intercept_rules_upd |
task_intercept_rules |
write | updated_at |
BEFORE UPDATE ROW trigger trg_task_intercept_rules_upd |
notification_channels |
write | updated_at |
BEFORE UPDATE ROW trigger trg_notification_channels_upd |
try_inet()
try_inet() · 관계
이 대상이 사용하는 구현·계약·의존 · 3개
- 계약 사용 · assets · read/transform; columns ip, domain; company/task scope query에서 자유 text를 안전하게 inet 변환; provenance: production SQL call sites · db-try-inet-use-assets-1568fdd7ed · db-try-inet-use-assets-697813c1b5 · db-try-inet-use-assets-32bf6ec1b3 · db-try-inet-use-assets-4e75062863 · db-try-inet-use-assets-e1e6c3d434 · db-try-inet-use-assets-4cfef63802 · db-try-inet-use-assets-046fd89c65 · db-try-inet-use-assets-429d7e60de
- 계약 사용 · company_scope · read predicate; columns net; `net >>= try_inet(assets.ip)` attribution predicate; provenance: production SQL call sites · db-try-inet-use-company-scope-2dcedff17b
- 계약 사용 · task_scope · read predicate; columns net; coverage/scope predicate에서 assets text 변환; provenance: production SQL call sites · db-try-inet-use-task-scope-e03dcb28ba · db-try-inet-use-task-scope-00288db9f0 · db-try-inet-use-task-scope-bb64288ddc · db-try-inet-use-task-scope-3038821322 · db-try-inet-use-task-scope-d824d02d68 · db-try-inet-use-task-scope-c99ebf71ad
text argument를 inet로 cast하고 모든 예외를 NULL로 변환한다. 함수 자체는 table을 읽거나 쓰지 않으며 IMMUTABLE STRICT다. 아래 행은 production call site가 읽는 table이다. 정확한 DDL 근거
| call-site table | caller access/effect | 열 | 조건 |
|---|---|---|---|
assets |
read/transform | ip, domain |
company/task scope query에서 자유 text를 안전하게 inet 변환 |
company_scope |
read predicate | net |
net >>= try_inet(assets.ip) attribution predicate |
task_scope |
read predicate | net |
coverage/scope predicate에서 assets text 변환 |
sync_task_asset_links()
sync_task_asset_links() · 관계
이 대상이 사용하는 구현·계약·의존 · 3개
- 계약 사용 · assets · read trigger row; columns id, task_ids; AFTER INSERT OR UPDATE OF task_ids의 NEW row; provenance: trigger row/table declaration · db-ddl-trigger-trg-assets-task-links
- 계약 사용 · tasks · read; columns id, deleted_at; 요청 task id 중 live task만 선택; provenance: function body DDL · db-ddl-function-sync-task-asset-links
- 계약 사용 · task_asset_links · write; columns task_id, asset_id, source, source_summary; link insert/do-nothing + NEW.task_ids 밖 link delete; provenance: function body DDL · db-ddl-function-sync-task-asset-links
이 대상을 사용하는 기능·모듈·계약 · 1개
- 의존 / 실행 · trg_assets_task_links · AFTER INSERT OR UPDATE OF TASK_IDS FOR EACH ROW · db-ddl-trigger-trg-assets-task-links
NEW.task_ids의 live task를 provenance link로 insert하고 빠진 link를 delete. 정확한 DDL 근거
| table | access/effect | 열 | 조건 |
|---|---|---|---|
assets |
read trigger row | id, task_ids |
AFTER INSERT OR UPDATE OF task_ids의 NEW row |
tasks |
read | id, deleted_at |
요청 task id 중 live task만 선택 |
task_asset_links |
write | task_id, asset_id, source, source_summary |
link insert/do-nothing + NEW.task_ids 밖 link delete |
stop_deleted_conversation_retest()
stop_deleted_conversation_retest() · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 계약 사용 · conversations · read trigger row; columns id; BEFORE DELETE의 OLD row; provenance: trigger row/table declaration · db-ddl-trigger-trg-conversation-retest-delete
- 계약 사용 · finding_retests · write; columns status, error, finished_at; conversation_id=OLD.id AND status pending/running; provenance: function body DDL · db-ddl-function-stop-deleted-conversation-retest
이 대상을 사용하는 기능·모듈·계약 · 1개
- 의존 / 실행 · trg_conversation_retest_delete · BEFORE DELETE FOR EACH ROW · db-ddl-trigger-trg-conversation-retest-delete
삭제될 conversation의 pending/running retest를 stopped로 전이. 정확한 DDL 근거
| table | access/effect | 열 | 조건 |
|---|---|---|---|
conversations |
read trigger row | id |
BEFORE DELETE의 OLD row |
finding_retests |
write | status, error, finished_at |
conversation_id=OLD.id AND status pending/running |
Trigger 개별 진입
개별 목적지는 trigger에서 fire table과 function, timing/event/row level, 영향 열을 모두 역탐색한다.
trg_companies_upd
trg_companies_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-companies-upd
- 의존 / 실행 · companies · fire table `companies` · db-ddl-trigger-trg-companies-upd
BEFORE UPDATE / FOR EACH ROW on companies; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_av2_upd
trg_av2_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-av2-upd
- 의존 / 실행 · assets · fire table `assets` · db-ddl-trigger-trg-av2-upd
BEFORE UPDATE / FOR EACH ROW on assets; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_exp_upd
trg_exp_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-exp-upd
- 의존 / 실행 · explorations · fire table `explorations` · db-ddl-trigger-trg-exp-upd
BEFORE UPDATE / FOR EACH ROW on explorations; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_expnodes_upd
trg_expnodes_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-expnodes-upd
- 의존 / 실행 · exploration_nodes · fire table `exploration_nodes` · db-ddl-trigger-trg-expnodes-upd
BEFORE UPDATE / FOR EACH ROW on exploration_nodes; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_llm_upd
trg_llm_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-llm-upd
- 의존 / 실행 · llm_profiles · fire table `llm_profiles` · db-ddl-trigger-trg-llm-upd
BEFORE UPDATE / FOR EACH ROW on llm_profiles; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_task_categories_upd
trg_task_categories_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-task-categories-upd
- 의존 / 실행 · task_categories · fire table `task_categories` · db-ddl-trigger-trg-task-categories-upd
BEFORE UPDATE / FOR EACH ROW on task_categories; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_tasks_upd
trg_tasks_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-tasks-upd
- 의존 / 실행 · tasks · fire table `tasks` · db-ddl-trigger-trg-tasks-upd
BEFORE UPDATE / FOR EACH ROW on tasks; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_task_archives_upd
trg_task_archives_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-task-archives-upd
- 의존 / 실행 · task_archives · fire table `task_archives` · db-ddl-trigger-trg-task-archives-upd
BEFORE UPDATE / FOR EACH ROW on task_archives; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_task_templates_upd
trg_task_templates_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-task-templates-upd
- 의존 / 실행 · task_templates · fire table `task_templates` · db-ddl-trigger-trg-task-templates-upd
BEFORE UPDATE / FOR EACH ROW on task_templates; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_task_asset_links_upd
trg_task_asset_links_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-task-asset-links-upd
- 의존 / 실행 · task_asset_links · fire table `task_asset_links` · db-ddl-trigger-trg-task-asset-links-upd
BEFORE UPDATE / FOR EACH ROW on task_asset_links; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_assets_task_links
trg_assets_task_links · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · sync_task_asset_links() · AFTER INSERT OR UPDATE OF TASK_IDS FOR EACH ROW · db-ddl-trigger-trg-assets-task-links
- 의존 / 실행 · assets · fire table `assets` · db-ddl-trigger-trg-assets-task-links
AFTER INSERT OR UPDATE OF TASK_IDS / FOR EACH ROW on assets; sync_task_asset_links()을 실행한다. asset task_ids 뒤 provenance link insert/delete 정확한 DDL 근거
trg_task_llm_profiles_upd
trg_task_llm_profiles_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-task-llm-profiles-upd
- 의존 / 실행 · task_llm_profiles · fire table `task_llm_profiles` · db-ddl-trigger-trg-task-llm-profiles-upd
BEFORE UPDATE / FOR EACH ROW on task_llm_profiles; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_agents_upd
trg_agents_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-agents-upd
- 의존 / 실행 · agents · fire table `agents` · db-ddl-trigger-trg-agents-upd
BEFORE UPDATE / FOR EACH ROW on agents; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_mcp_upd
trg_mcp_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-mcp-upd
- 의존 / 실행 · mcp_servers · fire table `mcp_servers` · db-ddl-trigger-trg-mcp-upd
BEFORE UPDATE / FOR EACH ROW on mcp_servers; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_tools_upd
trg_tools_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-tools-upd
- 의존 / 실행 · tools · fire table `tools` · db-ddl-trigger-trg-tools-upd
BEFORE UPDATE / FOR EACH ROW on tools; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_conversations_upd
trg_conversations_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-conversations-upd
- 의존 / 실행 · conversations · fire table `conversations` · db-ddl-trigger-trg-conversations-upd
BEFORE UPDATE / FOR EACH ROW on conversations; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_agent_triggers_upd
trg_agent_triggers_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-agent-triggers-upd
- 의존 / 실행 · agent_triggers · fire table `agent_triggers` · db-ddl-trigger-trg-agent-triggers-upd
BEFORE UPDATE / FOR EACH ROW on agent_triggers; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_intercept_rules_upd
trg_intercept_rules_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-intercept-rules-upd
- 의존 / 실행 · intercept_rules · fire table `intercept_rules` · db-ddl-trigger-trg-intercept-rules-upd
BEFORE UPDATE / FOR EACH ROW on intercept_rules; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_conversation_retest_delete
trg_conversation_retest_delete · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · stop_deleted_conversation_retest() · BEFORE DELETE FOR EACH ROW · db-ddl-trigger-trg-conversation-retest-delete
- 의존 / 실행 · conversations · fire table `conversations` · db-ddl-trigger-trg-conversation-retest-delete
BEFORE DELETE / FOR EACH ROW on conversations; stop_deleted_conversation_retest()을 실행한다. conversation delete 전에 active retest를 stopped로 전이 정확한 DDL 근거
trg_asset_intercept_rules_upd
trg_asset_intercept_rules_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-asset-intercept-rules-upd
- 의존 / 실행 · asset_intercept_rules · fire table `asset_intercept_rules` · db-ddl-trigger-trg-asset-intercept-rules-upd
BEFORE UPDATE / FOR EACH ROW on asset_intercept_rules; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_task_intercept_rules_upd
trg_task_intercept_rules_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-task-intercept-rules-upd
- 의존 / 실행 · task_intercept_rules · fire table `task_intercept_rules` · db-ddl-trigger-trg-task-intercept-rules-upd
BEFORE UPDATE / FOR EACH ROW on task_intercept_rules; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거
trg_notification_channels_upd
trg_notification_channels_upd · 관계
이 대상이 사용하는 구현·계약·의존 · 2개
- 의존 / 실행 · set_updated_at() · BEFORE UPDATE FOR EACH ROW · db-ddl-trigger-trg-notification-channels-upd
- 의존 / 실행 · notification_channels · fire table `notification_channels` · db-ddl-trigger-trg-notification-channels-upd
BEFORE UPDATE / FOR EACH ROW on notification_channels; set_updated_at()을 실행한다. row update 전에 updated_at을 now()로 덮어씀 정확한 DDL 근거