fix(db): correct default values for jsonb and array columns
Some checks failed
CI / build-and-test (push) Failing after -31m23s

* Update default values for metadata and messages columns in thoughts and chat_histories tables
* Change tags column type to text[] with default in learnings, plans, agent_skills, and agent_guardrails tables
* Adjust index creation for tags columns in learnings and plans tables
This commit is contained in:
2026-05-03 16:24:16 +02:00
parent 91239bcf4b
commit bae63cb5cf
9 changed files with 393 additions and 265 deletions

View File

@@ -9,17 +9,17 @@ import (
type ModelPublicAgentGuardrails struct { type ModelPublicAgentGuardrails struct {
bun.BaseModel `bun:"table:public.agent_guardrails,alias:agent_guardrails"` bun.BaseModel `bun:"table:public.agent_guardrails,alias:agent_guardrails"`
ID resolvespec_common.SqlInt64 `bun:"id,type:bigserial,pk,autoincrement," json:"id"` ID resolvespec_common.SqlInt64 `bun:"id,type:bigserial,pk,autoincrement," json:"id"`
Content resolvespec_common.SqlString `bun:"content,type:text,notnull," json:"content"` Content resolvespec_common.SqlString `bun:"content,type:text,notnull," json:"content"`
CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),notnull," json:"created_at"` CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),notnull," json:"created_at"`
Description resolvespec_common.SqlString `bun:"description,type:text,default:'',notnull," json:"description"` Description resolvespec_common.SqlString `bun:"description,type:text,default:'',notnull," json:"description"`
GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"` GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"`
Name resolvespec_common.SqlString `bun:"name,type:text,notnull," json:"name"` Name resolvespec_common.SqlString `bun:"name,type:text,notnull," json:"name"`
Severity resolvespec_common.SqlString `bun:"severity,type:text,default:'medium',notnull," json:"severity"` Severity resolvespec_common.SqlString `bun:"severity,type:text,default:'medium',notnull," json:"severity"`
Tags resolvespec_common.SqlString `bun:"tags,type:text,nullzero," json:"tags"` Tags resolvespec_common.SqlStringArray `bun:"tags,type:text[],array,default:'{}',notnull," json:"tags"`
UpdatedAt resolvespec_common.SqlTimeStamp `bun:"updated_at,type:timestamptz,default:now(),notnull," json:"updated_at"` UpdatedAt resolvespec_common.SqlTimeStamp `bun:"updated_at,type:timestamptz,default:now(),notnull," json:"updated_at"`
RelGuardrailIDPublicPlanGuardrails []*ModelPublicPlanGuardrails `bun:"rel:has-many,join:id=guardrail_id" json:"relguardrailidpublicplanguardrails,omitempty"` // Has many ModelPublicPlanGuardrails RelGuardrailIDPublicPlanGuardrails []*ModelPublicPlanGuardrails `bun:"rel:has-many,join:id=guardrail_id" json:"relguardrailidpublicplanguardrails,omitempty"` // Has many ModelPublicPlanGuardrails
RelGuardrailIDPublicProjectGuardrails []*ModelPublicProjectGuardrails `bun:"rel:has-many,join:id=guardrail_id" json:"relguardrailidpublicprojectguardrails,omitempty"` // Has many ModelPublicProjectGuardrails RelGuardrailIDPublicProjectGuardrails []*ModelPublicProjectGuardrails `bun:"rel:has-many,join:id=guardrail_id" json:"relguardrailidpublicprojectguardrails,omitempty"` // Has many ModelPublicProjectGuardrails
} }
// TableName returns the table name for ModelPublicAgentGuardrails // TableName returns the table name for ModelPublicAgentGuardrails

View File

@@ -9,17 +9,17 @@ import (
type ModelPublicAgentSkills struct { type ModelPublicAgentSkills struct {
bun.BaseModel `bun:"table:public.agent_skills,alias:agent_skills"` bun.BaseModel `bun:"table:public.agent_skills,alias:agent_skills"`
ID resolvespec_common.SqlInt64 `bun:"id,type:bigserial,pk,autoincrement," json:"id"` ID resolvespec_common.SqlInt64 `bun:"id,type:bigserial,pk,autoincrement," json:"id"`
Content resolvespec_common.SqlString `bun:"content,type:text,notnull," json:"content"` Content resolvespec_common.SqlString `bun:"content,type:text,notnull," json:"content"`
CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),notnull," json:"created_at"` CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),notnull," json:"created_at"`
Description resolvespec_common.SqlString `bun:"description,type:text,default:'',notnull," json:"description"` Description resolvespec_common.SqlString `bun:"description,type:text,default:'',notnull," json:"description"`
GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"` GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"`
Name resolvespec_common.SqlString `bun:"name,type:text,notnull," json:"name"` Name resolvespec_common.SqlString `bun:"name,type:text,notnull," json:"name"`
Tags resolvespec_common.SqlString `bun:"tags,type:text,nullzero," json:"tags"` Tags resolvespec_common.SqlStringArray `bun:"tags,type:text[],array,default:'{}',notnull," json:"tags"`
UpdatedAt resolvespec_common.SqlTimeStamp `bun:"updated_at,type:timestamptz,default:now(),notnull," json:"updated_at"` UpdatedAt resolvespec_common.SqlTimeStamp `bun:"updated_at,type:timestamptz,default:now(),notnull," json:"updated_at"`
RelRelatedSkillIDPublicLearnings []*ModelPublicLearnings `bun:"rel:has-many,join:id=related_skill_id" json:"relrelatedskillidpubliclearnings,omitempty"` // Has many ModelPublicLearnings RelRelatedSkillIDPublicLearnings []*ModelPublicLearnings `bun:"rel:has-many,join:id=related_skill_id" json:"relrelatedskillidpubliclearnings,omitempty"` // Has many ModelPublicLearnings
RelSkillIDPublicPlanSkills []*ModelPublicPlanSkills `bun:"rel:has-many,join:id=skill_id" json:"relskillidpublicplanskills,omitempty"` // Has many ModelPublicPlanSkills RelSkillIDPublicPlanSkills []*ModelPublicPlanSkills `bun:"rel:has-many,join:id=skill_id" json:"relskillidpublicplanskills,omitempty"` // Has many ModelPublicPlanSkills
RelSkillIDPublicProjectSkills []*ModelPublicProjectSkills `bun:"rel:has-many,join:id=skill_id" json:"relskillidpublicprojectskills,omitempty"` // Has many ModelPublicProjectSkills RelSkillIDPublicProjectSkills []*ModelPublicProjectSkills `bun:"rel:has-many,join:id=skill_id" json:"relskillidpublicprojectskills,omitempty"` // Has many ModelPublicProjectSkills
} }
// TableName returns the table name for ModelPublicAgentSkills // TableName returns the table name for ModelPublicAgentSkills

View File

@@ -14,7 +14,7 @@ type ModelPublicChatHistories struct {
Channel resolvespec_common.SqlString `bun:"channel,type:text,nullzero," json:"channel"` Channel resolvespec_common.SqlString `bun:"channel,type:text,nullzero," json:"channel"`
CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),notnull," json:"created_at"` CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),notnull," json:"created_at"`
GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"` GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"`
Messages resolvespec_common.SqlJSONB `bun:"messages,type:jsonb,default:'[',notnull," json:"messages"` Messages resolvespec_common.SqlJSONB `bun:"messages,type:jsonb,default:'[]',notnull," json:"messages"`
Metadata resolvespec_common.SqlJSONB `bun:"metadata,type:jsonb,default:'{}',notnull," json:"metadata"` Metadata resolvespec_common.SqlJSONB `bun:"metadata,type:jsonb,default:'{}',notnull," json:"metadata"`
ProjectID resolvespec_common.SqlInt64 `bun:"project_id,type:bigint,nullzero," json:"project_id"` ProjectID resolvespec_common.SqlInt64 `bun:"project_id,type:bigint,nullzero," json:"project_id"`
SessionID resolvespec_common.SqlString `bun:"session_id,type:text,notnull," json:"session_id"` SessionID resolvespec_common.SqlString `bun:"session_id,type:text,notnull," json:"session_id"`

View File

@@ -11,8 +11,8 @@ type ModelPublicEmbeddings struct {
bun.BaseModel `bun:"table:public.embeddings,alias:embeddings"` bun.BaseModel `bun:"table:public.embeddings,alias:embeddings"`
ID resolvespec_common.SqlInt64 `bun:"id,type:bigserial,pk,autoincrement," json:"id"` ID resolvespec_common.SqlInt64 `bun:"id,type:bigserial,pk,autoincrement," json:"id"`
CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),nullzero," json:"created_at"` CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),nullzero," json:"created_at"`
Dim resolvespec_common.SqlInt32 `bun:"dim,type:int,notnull," json:"dim"` Dim int32 `bun:"dim,type:int,notnull," json:"dim"`
Embedding resolvespec_common.SqlString `bun:"embedding,type:vector,notnull," json:"embedding"` Embedding resolvespec_common.SqlVector `bun:"embedding,type:vector,notnull," json:"embedding"`
GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"` GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"`
Model resolvespec_common.SqlString `bun:"model,type:text,notnull,unique:uidx_embeddings_thought_id_model," json:"model"` Model resolvespec_common.SqlString `bun:"model,type:text,notnull,unique:uidx_embeddings_thought_id_model," json:"model"`
ThoughtID int64 `bun:"thought_id,type:bigint,notnull,unique:uidx_embeddings_thought_id_model," json:"thought_id"` ThoughtID int64 `bun:"thought_id,type:bigint,notnull,unique:uidx_embeddings_thought_id_model," json:"thought_id"`

View File

@@ -9,33 +9,33 @@ import (
type ModelPublicLearnings struct { type ModelPublicLearnings struct {
bun.BaseModel `bun:"table:public.learnings,alias:learnings"` bun.BaseModel `bun:"table:public.learnings,alias:learnings"`
ID resolvespec_common.SqlInt64 `bun:"id,type:bigserial,pk,autoincrement," json:"id"` ID resolvespec_common.SqlInt64 `bun:"id,type:bigserial,pk,autoincrement," json:"id"`
ActionRequired bool `bun:"action_required,type:boolean,default:false,notnull," json:"action_required"` ActionRequired bool `bun:"action_required,type:boolean,default:false,notnull," json:"action_required"`
Area resolvespec_common.SqlString `bun:"area,type:text,default:'other',notnull," json:"area"` Area resolvespec_common.SqlString `bun:"area,type:text,default:'other',notnull," json:"area"`
Category resolvespec_common.SqlString `bun:"category,type:text,default:'insight',notnull," json:"category"` Category resolvespec_common.SqlString `bun:"category,type:text,default:'insight',notnull," json:"category"`
Confidence resolvespec_common.SqlString `bun:"confidence,type:text,default:'hypothesis',notnull," json:"confidence"` Confidence resolvespec_common.SqlString `bun:"confidence,type:text,default:'hypothesis',notnull," json:"confidence"`
CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),notnull," json:"created_at"` CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),notnull," json:"created_at"`
Details resolvespec_common.SqlString `bun:"details,type:text,default:'',notnull," json:"details"` Details resolvespec_common.SqlString `bun:"details,type:text,default:'',notnull," json:"details"`
DuplicateOfLearningID resolvespec_common.SqlInt64 `bun:"duplicate_of_learning_id,type:bigint,nullzero," json:"duplicate_of_learning_id"` DuplicateOfLearningID resolvespec_common.SqlInt64 `bun:"duplicate_of_learning_id,type:bigint,nullzero," json:"duplicate_of_learning_id"`
GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"` GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"`
Priority resolvespec_common.SqlString `bun:"priority,type:text,default:'medium',notnull," json:"priority"` Priority resolvespec_common.SqlString `bun:"priority,type:text,default:'medium',notnull," json:"priority"`
ProjectID resolvespec_common.SqlInt64 `bun:"project_id,type:bigint,nullzero," json:"project_id"` ProjectID resolvespec_common.SqlInt64 `bun:"project_id,type:bigint,nullzero," json:"project_id"`
RelatedSkillID resolvespec_common.SqlInt64 `bun:"related_skill_id,type:bigint,nullzero," json:"related_skill_id"` RelatedSkillID resolvespec_common.SqlInt64 `bun:"related_skill_id,type:bigint,nullzero," json:"related_skill_id"`
RelatedThoughtID resolvespec_common.SqlInt64 `bun:"related_thought_id,type:bigint,nullzero," json:"related_thought_id"` RelatedThoughtID resolvespec_common.SqlInt64 `bun:"related_thought_id,type:bigint,nullzero," json:"related_thought_id"`
ReviewedAt resolvespec_common.SqlTimeStamp `bun:"reviewed_at,type:timestamptz,nullzero," json:"reviewed_at"` ReviewedAt resolvespec_common.SqlTimeStamp `bun:"reviewed_at,type:timestamptz,nullzero," json:"reviewed_at"`
ReviewedBy resolvespec_common.SqlString `bun:"reviewed_by,type:text,nullzero," json:"reviewed_by"` ReviewedBy resolvespec_common.SqlString `bun:"reviewed_by,type:text,nullzero," json:"reviewed_by"`
SourceRef resolvespec_common.SqlString `bun:"source_ref,type:text,nullzero," json:"source_ref"` SourceRef resolvespec_common.SqlString `bun:"source_ref,type:text,nullzero," json:"source_ref"`
SourceType resolvespec_common.SqlString `bun:"source_type,type:text,nullzero," json:"source_type"` SourceType resolvespec_common.SqlString `bun:"source_type,type:text,nullzero," json:"source_type"`
Status resolvespec_common.SqlString `bun:"status,type:text,default:'pending',notnull," json:"status"` Status resolvespec_common.SqlString `bun:"status,type:text,default:'pending',notnull," json:"status"`
Summary resolvespec_common.SqlString `bun:"summary,type:text,notnull," json:"summary"` Summary resolvespec_common.SqlString `bun:"summary,type:text,notnull," json:"summary"`
SupersedesLearningID resolvespec_common.SqlInt64 `bun:"supersedes_learning_id,type:bigint,nullzero," json:"supersedes_learning_id"` SupersedesLearningID resolvespec_common.SqlInt64 `bun:"supersedes_learning_id,type:bigint,nullzero," json:"supersedes_learning_id"`
Tags resolvespec_common.SqlString `bun:"tags,type:text,nullzero," json:"tags"` Tags resolvespec_common.SqlStringArray `bun:"tags,type:text[],array,default:'{}',notnull," json:"tags"`
UpdatedAt resolvespec_common.SqlTimeStamp `bun:"updated_at,type:timestamptz,default:now(),notnull," json:"updated_at"` UpdatedAt resolvespec_common.SqlTimeStamp `bun:"updated_at,type:timestamptz,default:now(),notnull," json:"updated_at"`
RelDuplicateOfLearningID *ModelPublicLearnings `bun:"rel:has-one,join:duplicate_of_learning_id=id" json:"relduplicateoflearningid,omitempty"` // Has one ModelPublicLearnings RelDuplicateOfLearningID *ModelPublicLearnings `bun:"rel:has-one,join:duplicate_of_learning_id=id" json:"relduplicateoflearningid,omitempty"` // Has one ModelPublicLearnings
RelProjectID *ModelPublicProjects `bun:"rel:has-one,join:project_id=id" json:"relprojectid,omitempty"` // Has one ModelPublicProjects RelProjectID *ModelPublicProjects `bun:"rel:has-one,join:project_id=id" json:"relprojectid,omitempty"` // Has one ModelPublicProjects
RelRelatedSkillID *ModelPublicAgentSkills `bun:"rel:has-one,join:related_skill_id=id" json:"relrelatedskillid,omitempty"` // Has one ModelPublicAgentSkills RelRelatedSkillID *ModelPublicAgentSkills `bun:"rel:has-one,join:related_skill_id=id" json:"relrelatedskillid,omitempty"` // Has one ModelPublicAgentSkills
RelRelatedThoughtID *ModelPublicThoughts `bun:"rel:has-one,join:related_thought_id=id" json:"relrelatedthoughtid,omitempty"` // Has one ModelPublicThoughts RelRelatedThoughtID *ModelPublicThoughts `bun:"rel:has-one,join:related_thought_id=id" json:"relrelatedthoughtid,omitempty"` // Has one ModelPublicThoughts
RelSupersedesLearningID *ModelPublicLearnings `bun:"rel:has-one,join:supersedes_learning_id=id" json:"relsupersedeslearningid,omitempty"` // Has one ModelPublicLearnings RelSupersedesLearningID *ModelPublicLearnings `bun:"rel:has-one,join:supersedes_learning_id=id" json:"relsupersedeslearningid,omitempty"` // Has one ModelPublicLearnings
} }
// TableName returns the table name for ModelPublicLearnings // TableName returns the table name for ModelPublicLearnings

View File

@@ -9,30 +9,30 @@ import (
type ModelPublicPlans struct { type ModelPublicPlans struct {
bun.BaseModel `bun:"table:public.plans,alias:plans"` bun.BaseModel `bun:"table:public.plans,alias:plans"`
ID resolvespec_common.SqlInt64 `bun:"id,type:bigserial,pk,autoincrement," json:"id"` ID resolvespec_common.SqlInt64 `bun:"id,type:bigserial,pk,autoincrement," json:"id"`
CompletedAt resolvespec_common.SqlTimeStamp `bun:"completed_at,type:timestamptz,nullzero," json:"completed_at"` CompletedAt resolvespec_common.SqlTimeStamp `bun:"completed_at,type:timestamptz,nullzero," json:"completed_at"`
CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),notnull," json:"created_at"` CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),notnull," json:"created_at"`
Description resolvespec_common.SqlString `bun:"description,type:text,default:'',notnull," json:"description"` Description resolvespec_common.SqlString `bun:"description,type:text,default:'',notnull," json:"description"`
DueDate resolvespec_common.SqlTimeStamp `bun:"due_date,type:timestamptz,nullzero," json:"due_date"` DueDate resolvespec_common.SqlTimeStamp `bun:"due_date,type:timestamptz,nullzero," json:"due_date"`
GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"` GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"`
LastReviewedAt resolvespec_common.SqlTimeStamp `bun:"last_reviewed_at,type:timestamptz,nullzero," json:"last_reviewed_at"` LastReviewedAt resolvespec_common.SqlTimeStamp `bun:"last_reviewed_at,type:timestamptz,nullzero," json:"last_reviewed_at"`
Owner resolvespec_common.SqlString `bun:"owner,type:text,nullzero," json:"owner"` Owner resolvespec_common.SqlString `bun:"owner,type:text,nullzero," json:"owner"`
Priority resolvespec_common.SqlString `bun:"priority,type:text,default:'medium',notnull," json:"priority"` // low, medium, high, critical Priority resolvespec_common.SqlString `bun:"priority,type:text,default:'medium',notnull," json:"priority"` // low, medium, high, critical
ProjectID resolvespec_common.SqlInt64 `bun:"project_id,type:bigint,nullzero," json:"project_id"` ProjectID resolvespec_common.SqlInt64 `bun:"project_id,type:bigint,nullzero," json:"project_id"`
ReviewedBy resolvespec_common.SqlString `bun:"reviewed_by,type:text,nullzero," json:"reviewed_by"` ReviewedBy resolvespec_common.SqlString `bun:"reviewed_by,type:text,nullzero," json:"reviewed_by"`
Status resolvespec_common.SqlString `bun:"status,type:text,default:'draft',notnull," json:"status"` // draft, active, blocked, completed, cancelled, superseded Status resolvespec_common.SqlString `bun:"status,type:text,default:'draft',notnull," json:"status"` // draft, active, blocked, completed, cancelled, superseded
SupersedesPlanID resolvespec_common.SqlInt64 `bun:"supersedes_plan_id,type:bigint,nullzero," json:"supersedes_plan_id"` SupersedesPlanID resolvespec_common.SqlInt64 `bun:"supersedes_plan_id,type:bigint,nullzero," json:"supersedes_plan_id"`
Tags resolvespec_common.SqlString `bun:"tags,type:text,nullzero," json:"tags"` Tags resolvespec_common.SqlStringArray `bun:"tags,type:text[],array,default:'{}',notnull," json:"tags"`
Title resolvespec_common.SqlString `bun:"title,type:text,notnull," json:"title"` Title resolvespec_common.SqlString `bun:"title,type:text,notnull," json:"title"`
UpdatedAt resolvespec_common.SqlTimeStamp `bun:"updated_at,type:timestamptz,default:now(),notnull," json:"updated_at"` UpdatedAt resolvespec_common.SqlTimeStamp `bun:"updated_at,type:timestamptz,default:now(),notnull," json:"updated_at"`
RelProjectID *ModelPublicProjects `bun:"rel:has-one,join:project_id=id" json:"relprojectid,omitempty"` // Has one ModelPublicProjects RelProjectID *ModelPublicProjects `bun:"rel:has-one,join:project_id=id" json:"relprojectid,omitempty"` // Has one ModelPublicProjects
RelSupersedesPlanID *ModelPublicPlans `bun:"rel:has-one,join:supersedes_plan_id=id" json:"relsupersedesplanid,omitempty"` // Has one ModelPublicPlans RelSupersedesPlanID *ModelPublicPlans `bun:"rel:has-one,join:supersedes_plan_id=id" json:"relsupersedesplanid,omitempty"` // Has one ModelPublicPlans
RelDependsOnPlanIDPublicPlanDependencies []*ModelPublicPlanDependencies `bun:"rel:has-many,join:id=depends_on_plan_id" json:"reldependsonplanidpublicplandependencies,omitempty"` // Has many ModelPublicPlanDependencies RelDependsOnPlanIDPublicPlanDependencies []*ModelPublicPlanDependencies `bun:"rel:has-many,join:id=depends_on_plan_id" json:"reldependsonplanidpublicplandependencies,omitempty"` // Has many ModelPublicPlanDependencies
RelPlanIDPublicPlanDependencies []*ModelPublicPlanDependencies `bun:"rel:has-many,join:id=plan_id" json:"relplanidpublicplandependencies,omitempty"` // Has many ModelPublicPlanDependencies RelPlanIDPublicPlanDependencies []*ModelPublicPlanDependencies `bun:"rel:has-many,join:id=plan_id" json:"relplanidpublicplandependencies,omitempty"` // Has many ModelPublicPlanDependencies
RelPlanAIDPublicPlanRelatedPlans []*ModelPublicPlanRelatedPlans `bun:"rel:has-many,join:id=plan_a_id" json:"relplanaidpublicplanrelatedplans,omitempty"` // Has many ModelPublicPlanRelatedPlans RelPlanAIDPublicPlanRelatedPlans []*ModelPublicPlanRelatedPlans `bun:"rel:has-many,join:id=plan_a_id" json:"relplanaidpublicplanrelatedplans,omitempty"` // Has many ModelPublicPlanRelatedPlans
RelPlanBIDPublicPlanRelatedPlans []*ModelPublicPlanRelatedPlans `bun:"rel:has-many,join:id=plan_b_id" json:"relplanbidpublicplanrelatedplans,omitempty"` // Has many ModelPublicPlanRelatedPlans RelPlanBIDPublicPlanRelatedPlans []*ModelPublicPlanRelatedPlans `bun:"rel:has-many,join:id=plan_b_id" json:"relplanbidpublicplanrelatedplans,omitempty"` // Has many ModelPublicPlanRelatedPlans
RelPlanIDPublicPlanSkills []*ModelPublicPlanSkills `bun:"rel:has-many,join:id=plan_id" json:"relplanidpublicplanskills,omitempty"` // Has many ModelPublicPlanSkills RelPlanIDPublicPlanSkills []*ModelPublicPlanSkills `bun:"rel:has-many,join:id=plan_id" json:"relplanidpublicplanskills,omitempty"` // Has many ModelPublicPlanSkills
RelPlanIDPublicPlanGuardrails []*ModelPublicPlanGuardrails `bun:"rel:has-many,join:id=plan_id" json:"relplanidpublicplanguardrails,omitempty"` // Has many ModelPublicPlanGuardrails RelPlanIDPublicPlanGuardrails []*ModelPublicPlanGuardrails `bun:"rel:has-many,join:id=plan_id" json:"relplanidpublicplanguardrails,omitempty"` // Has many ModelPublicPlanGuardrails
} }
// TableName returns the table name for ModelPublicPlans // TableName returns the table name for ModelPublicPlans

View File

@@ -14,7 +14,7 @@ type ModelPublicThoughts struct {
Content resolvespec_common.SqlString `bun:"content,type:text,notnull," json:"content"` Content resolvespec_common.SqlString `bun:"content,type:text,notnull," json:"content"`
CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),nullzero," json:"created_at"` CreatedAt resolvespec_common.SqlTimeStamp `bun:"created_at,type:timestamptz,default:now(),nullzero," json:"created_at"`
GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"` GUID resolvespec_common.SqlUUID `bun:"guid,type:uuid,default:gen_random_uuid(),notnull," json:"guid"`
Metadata resolvespec_common.SqlJSONB `bun:"metadata,type:jsonb,default:'{}::jsonb',nullzero," json:"metadata"` Metadata resolvespec_common.SqlJSONB `bun:"metadata,type:jsonb,default:{}::jsonb,nullzero," json:"metadata"`
ProjectID resolvespec_common.SqlInt64 `bun:"project_id,type:bigint,nullzero," json:"project_id"` ProjectID resolvespec_common.SqlInt64 `bun:"project_id,type:bigint,nullzero," json:"project_id"`
UpdatedAt resolvespec_common.SqlTimeStamp `bun:"updated_at,type:timestamptz,default:now(),nullzero," json:"updated_at"` UpdatedAt resolvespec_common.SqlTimeStamp `bun:"updated_at,type:timestamptz,default:now(),nullzero," json:"updated_at"`
RelProjectID *ModelPublicProjects `bun:"rel:has-one,join:project_id=id" json:"relprojectid,omitempty"` // Has one ModelPublicProjects RelProjectID *ModelPublicProjects `bun:"rel:has-one,join:project_id=id" json:"relprojectid,omitempty"` // Has one ModelPublicProjects

View File

@@ -2,6 +2,7 @@
-- Tables with uuid PK → bigserial: agent_skills, agent_guardrails, chat_histories, learnings, plans -- Tables with uuid PK → bigserial: agent_skills, agent_guardrails, chat_histories, learnings, plans
-- Tables with serial → bigserial: thought_links, plan_dependencies, plan_related_plans, plan_skills, plan_guardrails, project_skills, project_guardrails -- Tables with serial → bigserial: thought_links, plan_dependencies, plan_related_plans, plan_skills, plan_guardrails, project_skills, project_guardrails
-- FK columns: all uuid FK columns converted to bigint referencing .id -- FK columns: all uuid FK columns converted to bigint referencing .id
-- Idempotent: safe to re-run at any point.
BEGIN; BEGIN;
@@ -10,217 +11,373 @@ BEGIN;
-- ============================================================ -- ============================================================
ALTER TABLE public.thoughts DROP CONSTRAINT IF EXISTS thoughts_project_id_fkey; ALTER TABLE public.thoughts DROP CONSTRAINT IF EXISTS thoughts_project_id_fkey;
ALTER TABLE public.thoughts DROP CONSTRAINT IF EXISTS fk_thoughts_project_id;
ALTER TABLE public.embeddings DROP CONSTRAINT IF EXISTS embeddings_thought_id_fkey; ALTER TABLE public.embeddings DROP CONSTRAINT IF EXISTS embeddings_thought_id_fkey;
ALTER TABLE public.embeddings DROP CONSTRAINT IF EXISTS fk_embeddings_thought_id;
ALTER TABLE public.stored_files DROP CONSTRAINT IF EXISTS stored_files_thought_id_fkey; ALTER TABLE public.stored_files DROP CONSTRAINT IF EXISTS stored_files_thought_id_fkey;
ALTER TABLE public.stored_files DROP CONSTRAINT IF EXISTS fk_stored_files_thought_id;
ALTER TABLE public.stored_files DROP CONSTRAINT IF EXISTS stored_files_project_id_fkey; ALTER TABLE public.stored_files DROP CONSTRAINT IF EXISTS stored_files_project_id_fkey;
ALTER TABLE public.stored_files DROP CONSTRAINT IF EXISTS fk_stored_files_project_id;
ALTER TABLE public.project_skills DROP CONSTRAINT IF EXISTS project_skills_project_id_fkey; ALTER TABLE public.project_skills DROP CONSTRAINT IF EXISTS project_skills_project_id_fkey;
ALTER TABLE public.project_skills DROP CONSTRAINT IF EXISTS fk_project_skills_project_id;
ALTER TABLE public.project_skills DROP CONSTRAINT IF EXISTS project_skills_skill_id_fkey; ALTER TABLE public.project_skills DROP CONSTRAINT IF EXISTS project_skills_skill_id_fkey;
ALTER TABLE public.project_skills DROP CONSTRAINT IF EXISTS fk_project_skills_skill_id;
ALTER TABLE public.project_guardrails DROP CONSTRAINT IF EXISTS project_guardrails_project_id_fkey; ALTER TABLE public.project_guardrails DROP CONSTRAINT IF EXISTS project_guardrails_project_id_fkey;
ALTER TABLE public.project_guardrails DROP CONSTRAINT IF EXISTS fk_project_guardrails_project_id;
ALTER TABLE public.project_guardrails DROP CONSTRAINT IF EXISTS project_guardrails_guardrail_id_fkey; ALTER TABLE public.project_guardrails DROP CONSTRAINT IF EXISTS project_guardrails_guardrail_id_fkey;
ALTER TABLE public.project_guardrails DROP CONSTRAINT IF EXISTS fk_project_guardrails_guardrail_id;
ALTER TABLE public.chat_histories DROP CONSTRAINT IF EXISTS chat_histories_project_id_fkey; ALTER TABLE public.chat_histories DROP CONSTRAINT IF EXISTS chat_histories_project_id_fkey;
ALTER TABLE public.chat_histories DROP CONSTRAINT IF EXISTS fk_chat_histories_project_id;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_project_id_fkey; ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_project_id_fkey;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS fk_learnings_project_id;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_related_thought_id_fkey; ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_related_thought_id_fkey;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS fk_learnings_related_thought_id;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_related_skill_id_fkey; ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_related_skill_id_fkey;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS fk_learnings_related_skill_id;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_duplicate_of_learning_id_fkey; ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_duplicate_of_learning_id_fkey;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS fk_learnings_duplicate_of_learning_id;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_supersedes_learning_id_fkey; ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_supersedes_learning_id_fkey;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS fk_learnings_supersedes_learning_id;
ALTER TABLE public.plans DROP CONSTRAINT IF EXISTS plans_project_id_fkey; ALTER TABLE public.plans DROP CONSTRAINT IF EXISTS plans_project_id_fkey;
ALTER TABLE public.plans DROP CONSTRAINT IF EXISTS fk_plans_project_id;
ALTER TABLE public.plans DROP CONSTRAINT IF EXISTS plans_supersedes_plan_id_fkey; ALTER TABLE public.plans DROP CONSTRAINT IF EXISTS plans_supersedes_plan_id_fkey;
ALTER TABLE public.plans DROP CONSTRAINT IF EXISTS fk_plans_supersedes_plan_id;
ALTER TABLE public.plan_dependencies DROP CONSTRAINT IF EXISTS plan_dependencies_plan_id_fkey; ALTER TABLE public.plan_dependencies DROP CONSTRAINT IF EXISTS plan_dependencies_plan_id_fkey;
ALTER TABLE public.plan_dependencies DROP CONSTRAINT IF EXISTS fk_plan_dependencies_plan_id;
ALTER TABLE public.plan_dependencies DROP CONSTRAINT IF EXISTS plan_dependencies_depends_on_plan_id_fkey; ALTER TABLE public.plan_dependencies DROP CONSTRAINT IF EXISTS plan_dependencies_depends_on_plan_id_fkey;
ALTER TABLE public.plan_dependencies DROP CONSTRAINT IF EXISTS fk_plan_dependencies_depends_on_plan_id;
ALTER TABLE public.plan_related_plans DROP CONSTRAINT IF EXISTS plan_related_plans_plan_a_id_fkey; ALTER TABLE public.plan_related_plans DROP CONSTRAINT IF EXISTS plan_related_plans_plan_a_id_fkey;
ALTER TABLE public.plan_related_plans DROP CONSTRAINT IF EXISTS fk_plan_related_plans_plan_a_id;
ALTER TABLE public.plan_related_plans DROP CONSTRAINT IF EXISTS plan_related_plans_plan_b_id_fkey; ALTER TABLE public.plan_related_plans DROP CONSTRAINT IF EXISTS plan_related_plans_plan_b_id_fkey;
ALTER TABLE public.plan_related_plans DROP CONSTRAINT IF EXISTS fk_plan_related_plans_plan_b_id;
ALTER TABLE public.plan_skills DROP CONSTRAINT IF EXISTS plan_skills_plan_id_fkey; ALTER TABLE public.plan_skills DROP CONSTRAINT IF EXISTS plan_skills_plan_id_fkey;
ALTER TABLE public.plan_skills DROP CONSTRAINT IF EXISTS fk_plan_skills_plan_id;
ALTER TABLE public.plan_skills DROP CONSTRAINT IF EXISTS plan_skills_skill_id_fkey; ALTER TABLE public.plan_skills DROP CONSTRAINT IF EXISTS plan_skills_skill_id_fkey;
ALTER TABLE public.plan_skills DROP CONSTRAINT IF EXISTS fk_plan_skills_skill_id;
ALTER TABLE public.plan_guardrails DROP CONSTRAINT IF EXISTS plan_guardrails_plan_id_fkey; ALTER TABLE public.plan_guardrails DROP CONSTRAINT IF EXISTS plan_guardrails_plan_id_fkey;
ALTER TABLE public.plan_guardrails DROP CONSTRAINT IF EXISTS fk_plan_guardrails_plan_id;
ALTER TABLE public.plan_guardrails DROP CONSTRAINT IF EXISTS plan_guardrails_guardrail_id_fkey; ALTER TABLE public.plan_guardrails DROP CONSTRAINT IF EXISTS plan_guardrails_guardrail_id_fkey;
ALTER TABLE public.plan_guardrails DROP CONSTRAINT IF EXISTS fk_plan_guardrails_guardrail_id;
-- ============================================================ -- ============================================================
-- STEP 2: Drop PK constraints on uuid-pk tables -- STEP 2: Drop PK constraints on uuid-pk tables
-- ============================================================ -- ============================================================
ALTER TABLE public.agent_skills DROP CONSTRAINT IF EXISTS agent_skills_pkey; ALTER TABLE public.agent_skills DROP CONSTRAINT IF EXISTS agent_skills_pkey;
ALTER TABLE public.agent_skills DROP CONSTRAINT IF EXISTS pk_public_agent_skills;
ALTER TABLE public.agent_guardrails DROP CONSTRAINT IF EXISTS agent_guardrails_pkey; ALTER TABLE public.agent_guardrails DROP CONSTRAINT IF EXISTS agent_guardrails_pkey;
ALTER TABLE public.agent_guardrails DROP CONSTRAINT IF EXISTS pk_public_agent_guardrails;
ALTER TABLE public.chat_histories DROP CONSTRAINT IF EXISTS chat_histories_pkey; ALTER TABLE public.chat_histories DROP CONSTRAINT IF EXISTS chat_histories_pkey;
ALTER TABLE public.chat_histories DROP CONSTRAINT IF EXISTS pk_public_chat_histories;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_pkey; ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_pkey;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS pk_public_learnings;
ALTER TABLE public.plans DROP CONSTRAINT IF EXISTS plans_pkey; ALTER TABLE public.plans DROP CONSTRAINT IF EXISTS plans_pkey;
ALTER TABLE public.plans DROP CONSTRAINT IF EXISTS pk_public_plans;
-- ============================================================ -- ============================================================
-- STEP 3: Rename uuid id → guid on formerly uuid-pk tables -- STEP 3: Rename uuid id → guid on formerly uuid-pk tables
-- Only renames if id exists and guid does not yet exist.
-- ============================================================ -- ============================================================
ALTER TABLE public.agent_skills RENAME COLUMN id TO guid; DO $$ BEGIN
ALTER TABLE public.agent_guardrails RENAME COLUMN id TO guid; IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='agent_skills' AND column_name='id')
ALTER TABLE public.chat_histories RENAME COLUMN id TO guid; AND NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='agent_skills' AND column_name='guid') THEN
ALTER TABLE public.learnings RENAME COLUMN id TO guid; ALTER TABLE public.agent_skills RENAME COLUMN id TO guid;
ALTER TABLE public.plans RENAME COLUMN id TO guid; END IF;
END $$;
DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='agent_guardrails' AND column_name='id')
AND NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='agent_guardrails' AND column_name='guid') THEN
ALTER TABLE public.agent_guardrails RENAME COLUMN id TO guid;
END IF;
END $$;
DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='chat_histories' AND column_name='id')
AND NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='chat_histories' AND column_name='guid') THEN
ALTER TABLE public.chat_histories RENAME COLUMN id TO guid;
END IF;
END $$;
DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='learnings' AND column_name='id')
AND NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='learnings' AND column_name='guid') THEN
ALTER TABLE public.learnings RENAME COLUMN id TO guid;
END IF;
END $$;
DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plans' AND column_name='id')
AND NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plans' AND column_name='guid') THEN
ALTER TABLE public.plans RENAME COLUMN id TO guid;
END IF;
END $$;
-- ============================================================ -- ============================================================
-- STEP 4: Add bigserial id columns to formerly uuid-pk tables -- STEP 4: Add bigserial id columns to formerly uuid-pk tables
-- ============================================================ -- ============================================================
ALTER TABLE public.agent_skills ADD COLUMN id bigserial; ALTER TABLE public.agent_skills ADD COLUMN IF NOT EXISTS id bigserial;
ALTER TABLE public.agent_guardrails ADD COLUMN id bigserial; ALTER TABLE public.agent_guardrails ADD COLUMN IF NOT EXISTS id bigserial;
ALTER TABLE public.chat_histories ADD COLUMN id bigserial; ALTER TABLE public.chat_histories ADD COLUMN IF NOT EXISTS id bigserial;
ALTER TABLE public.learnings ADD COLUMN id bigserial; ALTER TABLE public.learnings ADD COLUMN IF NOT EXISTS id bigserial;
ALTER TABLE public.plans ADD COLUMN id bigserial; ALTER TABLE public.plans ADD COLUMN IF NOT EXISTS id bigserial;
-- ============================================================ -- ============================================================
-- STEP 5: Add new bigint FK columns (prefixed _new) where uuid FKs exist -- STEP 5: Add new bigint FK columns and migrate data from uuid columns.
-- Each update is guarded: only runs when the source column is still uuid type.
-- ============================================================ -- ============================================================
-- thoughts.project_id (uuid → bigint via projects.guid) -- thoughts.project_id (uuid → bigint via projects.guid)
ALTER TABLE public.thoughts ADD COLUMN project_id_new bigint; ALTER TABLE public.thoughts ADD COLUMN IF NOT EXISTS project_id_new bigint;
UPDATE public.thoughts t SET project_id_new = p.id FROM public.projects p WHERE p.guid = t.project_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='thoughts' AND column_name='project_id' AND data_type='uuid') THEN
UPDATE public.thoughts t SET project_id_new = p.id FROM public.projects p WHERE p.guid = t.project_id AND t.project_id_new IS NULL;
END IF;
END $$;
-- embeddings.thought_id (uuid → bigint via thoughts.guid) -- embeddings.thought_id (uuid → bigint via thoughts.guid)
ALTER TABLE public.embeddings ADD COLUMN thought_id_new bigint; ALTER TABLE public.embeddings ADD COLUMN IF NOT EXISTS thought_id_new bigint;
UPDATE public.embeddings e SET thought_id_new = t.id FROM public.thoughts t WHERE t.guid = e.thought_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='embeddings' AND column_name='thought_id' AND data_type='uuid') THEN
UPDATE public.embeddings e SET thought_id_new = t.id FROM public.thoughts t WHERE t.guid = e.thought_id AND e.thought_id_new IS NULL;
END IF;
END $$;
-- stored_files.thought_id (uuid → bigint via thoughts.guid) -- stored_files.thought_id (uuid → bigint via thoughts.guid)
ALTER TABLE public.stored_files ADD COLUMN thought_id_new bigint; ALTER TABLE public.stored_files ADD COLUMN IF NOT EXISTS thought_id_new bigint;
UPDATE public.stored_files f SET thought_id_new = t.id FROM public.thoughts t WHERE t.guid = f.thought_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='stored_files' AND column_name='thought_id' AND data_type='uuid') THEN
UPDATE public.stored_files f SET thought_id_new = t.id FROM public.thoughts t WHERE t.guid = f.thought_id AND f.thought_id_new IS NULL;
END IF;
END $$;
-- stored_files.project_id (uuid → bigint via projects.guid) -- stored_files.project_id (uuid → bigint via projects.guid)
ALTER TABLE public.stored_files ADD COLUMN project_id_new bigint; ALTER TABLE public.stored_files ADD COLUMN IF NOT EXISTS project_id_new bigint;
UPDATE public.stored_files f SET project_id_new = p.id FROM public.projects p WHERE p.guid = f.project_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='stored_files' AND column_name='project_id' AND data_type='uuid') THEN
UPDATE public.stored_files f SET project_id_new = p.id FROM public.projects p WHERE p.guid = f.project_id AND f.project_id_new IS NULL;
END IF;
END $$;
-- project_skills.project_id (uuid → bigint via projects.guid) -- project_skills.project_id (uuid → bigint via projects.guid)
ALTER TABLE public.project_skills ADD COLUMN project_id_new bigint; ALTER TABLE public.project_skills ADD COLUMN IF NOT EXISTS project_id_new bigint;
UPDATE public.project_skills ps SET project_id_new = p.id FROM public.projects p WHERE p.guid = ps.project_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='project_skills' AND column_name='project_id' AND data_type='uuid') THEN
UPDATE public.project_skills ps SET project_id_new = p.id FROM public.projects p WHERE p.guid = ps.project_id AND ps.project_id_new IS NULL;
END IF;
END $$;
-- project_skills.skill_id (uuid → bigint via agent_skills.guid) -- project_skills.skill_id (uuid → bigint via agent_skills.guid)
ALTER TABLE public.project_skills ADD COLUMN skill_id_new bigint; ALTER TABLE public.project_skills ADD COLUMN IF NOT EXISTS skill_id_new bigint;
UPDATE public.project_skills ps SET skill_id_new = s.id FROM public.agent_skills s WHERE s.guid = ps.skill_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='project_skills' AND column_name='skill_id' AND data_type='uuid') THEN
UPDATE public.project_skills ps SET skill_id_new = s.id FROM public.agent_skills s WHERE s.guid = ps.skill_id AND ps.skill_id_new IS NULL;
END IF;
END $$;
-- project_guardrails.project_id (uuid → bigint via projects.guid) -- project_guardrails.project_id (uuid → bigint via projects.guid)
ALTER TABLE public.project_guardrails ADD COLUMN project_id_new bigint; ALTER TABLE public.project_guardrails ADD COLUMN IF NOT EXISTS project_id_new bigint;
UPDATE public.project_guardrails pg SET project_id_new = p.id FROM public.projects p WHERE p.guid = pg.project_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='project_guardrails' AND column_name='project_id' AND data_type='uuid') THEN
UPDATE public.project_guardrails pg SET project_id_new = p.id FROM public.projects p WHERE p.guid = pg.project_id AND pg.project_id_new IS NULL;
END IF;
END $$;
-- project_guardrails.guardrail_id (uuid → bigint via agent_guardrails.guid) -- project_guardrails.guardrail_id (uuid → bigint via agent_guardrails.guid)
ALTER TABLE public.project_guardrails ADD COLUMN guardrail_id_new bigint; ALTER TABLE public.project_guardrails ADD COLUMN IF NOT EXISTS guardrail_id_new bigint;
UPDATE public.project_guardrails pg SET guardrail_id_new = g.id FROM public.agent_guardrails g WHERE g.guid = pg.guardrail_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='project_guardrails' AND column_name='guardrail_id' AND data_type='uuid') THEN
UPDATE public.project_guardrails pg SET guardrail_id_new = g.id FROM public.agent_guardrails g WHERE g.guid = pg.guardrail_id AND pg.guardrail_id_new IS NULL;
END IF;
END $$;
-- chat_histories.project_id (uuid → bigint via projects.guid) -- chat_histories.project_id (uuid → bigint via projects.guid)
ALTER TABLE public.chat_histories ADD COLUMN project_id_new bigint; ALTER TABLE public.chat_histories ADD COLUMN IF NOT EXISTS project_id_new bigint;
UPDATE public.chat_histories ch SET project_id_new = p.id FROM public.projects p WHERE p.guid = ch.project_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='chat_histories' AND column_name='project_id' AND data_type='uuid') THEN
UPDATE public.chat_histories ch SET project_id_new = p.id FROM public.projects p WHERE p.guid = ch.project_id AND ch.project_id_new IS NULL;
END IF;
END $$;
-- learnings.project_id (uuid → bigint via projects.guid) -- learnings.project_id (uuid → bigint via projects.guid)
ALTER TABLE public.learnings ADD COLUMN project_id_new bigint; ALTER TABLE public.learnings ADD COLUMN IF NOT EXISTS project_id_new bigint;
UPDATE public.learnings l SET project_id_new = p.id FROM public.projects p WHERE p.guid = l.project_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='learnings' AND column_name='project_id' AND data_type='uuid') THEN
UPDATE public.learnings l SET project_id_new = p.id FROM public.projects p WHERE p.guid = l.project_id AND l.project_id_new IS NULL;
END IF;
END $$;
-- learnings.related_thought_id (uuid → bigint via thoughts.guid) -- learnings.related_thought_id (uuid → bigint via thoughts.guid)
ALTER TABLE public.learnings ADD COLUMN related_thought_id_new bigint; ALTER TABLE public.learnings ADD COLUMN IF NOT EXISTS related_thought_id_new bigint;
UPDATE public.learnings l SET related_thought_id_new = t.id FROM public.thoughts t WHERE t.guid = l.related_thought_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='learnings' AND column_name='related_thought_id' AND data_type='uuid') THEN
UPDATE public.learnings l SET related_thought_id_new = t.id FROM public.thoughts t WHERE t.guid = l.related_thought_id AND l.related_thought_id_new IS NULL;
END IF;
END $$;
-- learnings.related_skill_id (uuid → bigint via agent_skills.guid) -- learnings.related_skill_id (uuid → bigint via agent_skills.guid)
ALTER TABLE public.learnings ADD COLUMN related_skill_id_new bigint; ALTER TABLE public.learnings ADD COLUMN IF NOT EXISTS related_skill_id_new bigint;
UPDATE public.learnings l SET related_skill_id_new = s.id FROM public.agent_skills s WHERE s.guid = l.related_skill_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='learnings' AND column_name='related_skill_id' AND data_type='uuid') THEN
UPDATE public.learnings l SET related_skill_id_new = s.id FROM public.agent_skills s WHERE s.guid = l.related_skill_id AND l.related_skill_id_new IS NULL;
END IF;
END $$;
-- learnings.duplicate_of_learning_id (uuid → bigint via learnings.guid) -- learnings.duplicate_of_learning_id (uuid → bigint via learnings.guid)
ALTER TABLE public.learnings ADD COLUMN duplicate_of_learning_id_new bigint; ALTER TABLE public.learnings ADD COLUMN IF NOT EXISTS duplicate_of_learning_id_new bigint;
UPDATE public.learnings l SET duplicate_of_learning_id_new = l2.id FROM public.learnings l2 WHERE l2.guid = l.duplicate_of_learning_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='learnings' AND column_name='duplicate_of_learning_id' AND data_type='uuid') THEN
UPDATE public.learnings l SET duplicate_of_learning_id_new = l2.id FROM public.learnings l2 WHERE l2.guid = l.duplicate_of_learning_id AND l.duplicate_of_learning_id_new IS NULL;
END IF;
END $$;
-- learnings.supersedes_learning_id (uuid → bigint via learnings.guid) -- learnings.supersedes_learning_id (uuid → bigint via learnings.guid)
ALTER TABLE public.learnings ADD COLUMN supersedes_learning_id_new bigint; ALTER TABLE public.learnings ADD COLUMN IF NOT EXISTS supersedes_learning_id_new bigint;
UPDATE public.learnings l SET supersedes_learning_id_new = l2.id FROM public.learnings l2 WHERE l2.guid = l.supersedes_learning_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='learnings' AND column_name='supersedes_learning_id' AND data_type='uuid') THEN
UPDATE public.learnings l SET supersedes_learning_id_new = l2.id FROM public.learnings l2 WHERE l2.guid = l.supersedes_learning_id AND l.supersedes_learning_id_new IS NULL;
END IF;
END $$;
-- plans.project_id (uuid → bigint via projects.guid) -- plans.project_id (uuid → bigint via projects.guid)
ALTER TABLE public.plans ADD COLUMN project_id_new bigint; ALTER TABLE public.plans ADD COLUMN IF NOT EXISTS project_id_new bigint;
UPDATE public.plans pl SET project_id_new = p.id FROM public.projects p WHERE p.guid = pl.project_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plans' AND column_name='project_id' AND data_type='uuid') THEN
UPDATE public.plans pl SET project_id_new = p.id FROM public.projects p WHERE p.guid = pl.project_id AND pl.project_id_new IS NULL;
END IF;
END $$;
-- plans.supersedes_plan_id (uuid → bigint via plans.guid) -- plans.supersedes_plan_id (uuid → bigint via plans.guid)
ALTER TABLE public.plans ADD COLUMN supersedes_plan_id_new bigint; ALTER TABLE public.plans ADD COLUMN IF NOT EXISTS supersedes_plan_id_new bigint;
UPDATE public.plans pl SET supersedes_plan_id_new = pl2.id FROM public.plans pl2 WHERE pl2.guid = pl.supersedes_plan_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plans' AND column_name='supersedes_plan_id' AND data_type='uuid') THEN
UPDATE public.plans pl SET supersedes_plan_id_new = pl2.id FROM public.plans pl2 WHERE pl2.guid = pl.supersedes_plan_id AND pl.supersedes_plan_id_new IS NULL;
END IF;
END $$;
-- plan_dependencies.plan_id (uuid → bigint via plans.guid) -- plan_dependencies.plan_id (uuid → bigint via plans.guid)
ALTER TABLE public.plan_dependencies ADD COLUMN plan_id_new bigint; ALTER TABLE public.plan_dependencies ADD COLUMN IF NOT EXISTS plan_id_new bigint;
UPDATE public.plan_dependencies pd SET plan_id_new = pl.id FROM public.plans pl WHERE pl.guid = pd.plan_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_dependencies' AND column_name='plan_id' AND data_type='uuid') THEN
UPDATE public.plan_dependencies pd SET plan_id_new = pl.id FROM public.plans pl WHERE pl.guid = pd.plan_id AND pd.plan_id_new IS NULL;
END IF;
END $$;
-- plan_dependencies.depends_on_plan_id (uuid → bigint via plans.guid) -- plan_dependencies.depends_on_plan_id (uuid → bigint via plans.guid)
ALTER TABLE public.plan_dependencies ADD COLUMN depends_on_plan_id_new bigint; ALTER TABLE public.plan_dependencies ADD COLUMN IF NOT EXISTS depends_on_plan_id_new bigint;
UPDATE public.plan_dependencies pd SET depends_on_plan_id_new = pl.id FROM public.plans pl WHERE pl.guid = pd.depends_on_plan_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_dependencies' AND column_name='depends_on_plan_id' AND data_type='uuid') THEN
UPDATE public.plan_dependencies pd SET depends_on_plan_id_new = pl.id FROM public.plans pl WHERE pl.guid = pd.depends_on_plan_id AND pd.depends_on_plan_id_new IS NULL;
END IF;
END $$;
-- plan_related_plans.plan_a_id (uuid → bigint via plans.guid) -- plan_related_plans.plan_a_id (uuid → bigint via plans.guid)
ALTER TABLE public.plan_related_plans ADD COLUMN plan_a_id_new bigint; ALTER TABLE public.plan_related_plans ADD COLUMN IF NOT EXISTS plan_a_id_new bigint;
UPDATE public.plan_related_plans pr SET plan_a_id_new = pl.id FROM public.plans pl WHERE pl.guid = pr.plan_a_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_related_plans' AND column_name='plan_a_id' AND data_type='uuid') THEN
UPDATE public.plan_related_plans pr SET plan_a_id_new = pl.id FROM public.plans pl WHERE pl.guid = pr.plan_a_id AND pr.plan_a_id_new IS NULL;
END IF;
END $$;
-- plan_related_plans.plan_b_id (uuid → bigint via plans.guid) -- plan_related_plans.plan_b_id (uuid → bigint via plans.guid)
ALTER TABLE public.plan_related_plans ADD COLUMN plan_b_id_new bigint; ALTER TABLE public.plan_related_plans ADD COLUMN IF NOT EXISTS plan_b_id_new bigint;
UPDATE public.plan_related_plans pr SET plan_b_id_new = pl.id FROM public.plans pl WHERE pl.guid = pr.plan_b_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_related_plans' AND column_name='plan_b_id' AND data_type='uuid') THEN
UPDATE public.plan_related_plans pr SET plan_b_id_new = pl.id FROM public.plans pl WHERE pl.guid = pr.plan_b_id AND pr.plan_b_id_new IS NULL;
END IF;
END $$;
-- plan_skills.plan_id (uuid → bigint via plans.guid) -- plan_skills.plan_id (uuid → bigint via plans.guid)
ALTER TABLE public.plan_skills ADD COLUMN plan_id_new bigint; ALTER TABLE public.plan_skills ADD COLUMN IF NOT EXISTS plan_id_new bigint;
UPDATE public.plan_skills ps SET plan_id_new = pl.id FROM public.plans pl WHERE pl.guid = ps.plan_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_skills' AND column_name='plan_id' AND data_type='uuid') THEN
UPDATE public.plan_skills ps SET plan_id_new = pl.id FROM public.plans pl WHERE pl.guid = ps.plan_id AND ps.plan_id_new IS NULL;
END IF;
END $$;
-- plan_skills.skill_id (uuid → bigint via agent_skills.guid) -- plan_skills.skill_id (uuid → bigint via agent_skills.guid)
ALTER TABLE public.plan_skills ADD COLUMN skill_id_new bigint; ALTER TABLE public.plan_skills ADD COLUMN IF NOT EXISTS skill_id_new bigint;
UPDATE public.plan_skills ps SET skill_id_new = s.id FROM public.agent_skills s WHERE s.guid = ps.skill_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_skills' AND column_name='skill_id' AND data_type='uuid') THEN
UPDATE public.plan_skills ps SET skill_id_new = s.id FROM public.agent_skills s WHERE s.guid = ps.skill_id AND ps.skill_id_new IS NULL;
END IF;
END $$;
-- plan_guardrails.plan_id (uuid → bigint via plans.guid) -- plan_guardrails.plan_id (uuid → bigint via plans.guid)
ALTER TABLE public.plan_guardrails ADD COLUMN plan_id_new bigint; ALTER TABLE public.plan_guardrails ADD COLUMN IF NOT EXISTS plan_id_new bigint;
UPDATE public.plan_guardrails pg SET plan_id_new = pl.id FROM public.plans pl WHERE pl.guid = pg.plan_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_guardrails' AND column_name='plan_id' AND data_type='uuid') THEN
UPDATE public.plan_guardrails pg SET plan_id_new = pl.id FROM public.plans pl WHERE pl.guid = pg.plan_id AND pg.plan_id_new IS NULL;
END IF;
END $$;
-- plan_guardrails.guardrail_id (uuid → bigint via agent_guardrails.guid) -- plan_guardrails.guardrail_id (uuid → bigint via agent_guardrails.guid)
ALTER TABLE public.plan_guardrails ADD COLUMN guardrail_id_new bigint; ALTER TABLE public.plan_guardrails ADD COLUMN IF NOT EXISTS guardrail_id_new bigint;
UPDATE public.plan_guardrails pg SET guardrail_id_new = g.id FROM public.agent_guardrails g WHERE g.guid = pg.guardrail_id; DO $$ BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_guardrails' AND column_name='guardrail_id' AND data_type='uuid') THEN
UPDATE public.plan_guardrails pg SET guardrail_id_new = g.id FROM public.agent_guardrails g WHERE g.guid = pg.guardrail_id AND pg.guardrail_id_new IS NULL;
END IF;
END $$;
-- ============================================================ -- ============================================================
-- STEP 6: Drop old uuid FK columns -- STEP 6: Drop old uuid FK columns
-- ============================================================ -- ============================================================
ALTER TABLE public.thoughts DROP COLUMN project_id; ALTER TABLE public.thoughts DROP COLUMN IF EXISTS project_id;
ALTER TABLE public.embeddings DROP COLUMN thought_id; ALTER TABLE public.embeddings DROP COLUMN IF EXISTS thought_id;
ALTER TABLE public.stored_files DROP COLUMN thought_id; ALTER TABLE public.stored_files DROP COLUMN IF EXISTS thought_id;
ALTER TABLE public.stored_files DROP COLUMN project_id; ALTER TABLE public.stored_files DROP COLUMN IF EXISTS project_id;
ALTER TABLE public.project_skills DROP COLUMN project_id; ALTER TABLE public.project_skills DROP COLUMN IF EXISTS project_id;
ALTER TABLE public.project_skills DROP COLUMN skill_id; ALTER TABLE public.project_skills DROP COLUMN IF EXISTS skill_id;
ALTER TABLE public.project_guardrails DROP COLUMN project_id; ALTER TABLE public.project_guardrails DROP COLUMN IF EXISTS project_id;
ALTER TABLE public.project_guardrails DROP COLUMN guardrail_id; ALTER TABLE public.project_guardrails DROP COLUMN IF EXISTS guardrail_id;
ALTER TABLE public.chat_histories DROP COLUMN project_id; ALTER TABLE public.chat_histories DROP COLUMN IF EXISTS project_id;
ALTER TABLE public.learnings DROP COLUMN project_id; ALTER TABLE public.learnings DROP COLUMN IF EXISTS project_id;
ALTER TABLE public.learnings DROP COLUMN related_thought_id; ALTER TABLE public.learnings DROP COLUMN IF EXISTS related_thought_id;
ALTER TABLE public.learnings DROP COLUMN related_skill_id; ALTER TABLE public.learnings DROP COLUMN IF EXISTS related_skill_id;
ALTER TABLE public.learnings DROP COLUMN duplicate_of_learning_id; ALTER TABLE public.learnings DROP COLUMN IF EXISTS duplicate_of_learning_id;
ALTER TABLE public.learnings DROP COLUMN supersedes_learning_id; ALTER TABLE public.learnings DROP COLUMN IF EXISTS supersedes_learning_id;
ALTER TABLE public.plans DROP COLUMN project_id; ALTER TABLE public.plans DROP COLUMN IF EXISTS project_id;
ALTER TABLE public.plans DROP COLUMN supersedes_plan_id; ALTER TABLE public.plans DROP COLUMN IF EXISTS supersedes_plan_id;
ALTER TABLE public.plan_dependencies DROP COLUMN plan_id; ALTER TABLE public.plan_dependencies DROP COLUMN IF EXISTS plan_id;
ALTER TABLE public.plan_dependencies DROP COLUMN depends_on_plan_id; ALTER TABLE public.plan_dependencies DROP COLUMN IF EXISTS depends_on_plan_id;
ALTER TABLE public.plan_related_plans DROP COLUMN plan_a_id; ALTER TABLE public.plan_related_plans DROP COLUMN IF EXISTS plan_a_id;
ALTER TABLE public.plan_related_plans DROP COLUMN plan_b_id; ALTER TABLE public.plan_related_plans DROP COLUMN IF EXISTS plan_b_id;
ALTER TABLE public.plan_skills DROP COLUMN plan_id; ALTER TABLE public.plan_skills DROP COLUMN IF EXISTS plan_id;
ALTER TABLE public.plan_skills DROP COLUMN skill_id; ALTER TABLE public.plan_skills DROP COLUMN IF EXISTS skill_id;
ALTER TABLE public.plan_guardrails DROP COLUMN plan_id; ALTER TABLE public.plan_guardrails DROP COLUMN IF EXISTS plan_id;
ALTER TABLE public.plan_guardrails DROP COLUMN guardrail_id; ALTER TABLE public.plan_guardrails DROP COLUMN IF EXISTS guardrail_id;
-- ============================================================ -- ============================================================
-- STEP 7: Rename _new columns to final names -- STEP 7: Rename _new columns to final names (idempotent)
-- ============================================================ -- ============================================================
ALTER TABLE public.thoughts RENAME COLUMN project_id_new TO project_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='thoughts' AND column_name='project_id_new') THEN ALTER TABLE public.thoughts RENAME COLUMN project_id_new TO project_id; END IF; END $$;
ALTER TABLE public.embeddings RENAME COLUMN thought_id_new TO thought_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='embeddings' AND column_name='thought_id_new') THEN ALTER TABLE public.embeddings RENAME COLUMN thought_id_new TO thought_id; END IF; END $$;
ALTER TABLE public.stored_files RENAME COLUMN thought_id_new TO thought_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='stored_files' AND column_name='thought_id_new') THEN ALTER TABLE public.stored_files RENAME COLUMN thought_id_new TO thought_id; END IF; END $$;
ALTER TABLE public.stored_files RENAME COLUMN project_id_new TO project_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='stored_files' AND column_name='project_id_new') THEN ALTER TABLE public.stored_files RENAME COLUMN project_id_new TO project_id; END IF; END $$;
ALTER TABLE public.project_skills RENAME COLUMN project_id_new TO project_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='project_skills' AND column_name='project_id_new') THEN ALTER TABLE public.project_skills RENAME COLUMN project_id_new TO project_id; END IF; END $$;
ALTER TABLE public.project_skills RENAME COLUMN skill_id_new TO skill_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='project_skills' AND column_name='skill_id_new') THEN ALTER TABLE public.project_skills RENAME COLUMN skill_id_new TO skill_id; END IF; END $$;
ALTER TABLE public.project_guardrails RENAME COLUMN project_id_new TO project_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='project_guardrails' AND column_name='project_id_new') THEN ALTER TABLE public.project_guardrails RENAME COLUMN project_id_new TO project_id; END IF; END $$;
ALTER TABLE public.project_guardrails RENAME COLUMN guardrail_id_new TO guardrail_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='project_guardrails' AND column_name='guardrail_id_new') THEN ALTER TABLE public.project_guardrails RENAME COLUMN guardrail_id_new TO guardrail_id; END IF; END $$;
ALTER TABLE public.chat_histories RENAME COLUMN project_id_new TO project_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='chat_histories' AND column_name='project_id_new') THEN ALTER TABLE public.chat_histories RENAME COLUMN project_id_new TO project_id; END IF; END $$;
ALTER TABLE public.learnings RENAME COLUMN project_id_new TO project_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='learnings' AND column_name='project_id_new') THEN ALTER TABLE public.learnings RENAME COLUMN project_id_new TO project_id; END IF; END $$;
ALTER TABLE public.learnings RENAME COLUMN related_thought_id_new TO related_thought_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='learnings' AND column_name='related_thought_id_new') THEN ALTER TABLE public.learnings RENAME COLUMN related_thought_id_new TO related_thought_id; END IF; END $$;
ALTER TABLE public.learnings RENAME COLUMN related_skill_id_new TO related_skill_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='learnings' AND column_name='related_skill_id_new') THEN ALTER TABLE public.learnings RENAME COLUMN related_skill_id_new TO related_skill_id; END IF; END $$;
ALTER TABLE public.learnings RENAME COLUMN duplicate_of_learning_id_new TO duplicate_of_learning_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='learnings' AND column_name='duplicate_of_learning_id_new') THEN ALTER TABLE public.learnings RENAME COLUMN duplicate_of_learning_id_new TO duplicate_of_learning_id; END IF; END $$;
ALTER TABLE public.learnings RENAME COLUMN supersedes_learning_id_new TO supersedes_learning_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='learnings' AND column_name='supersedes_learning_id_new') THEN ALTER TABLE public.learnings RENAME COLUMN supersedes_learning_id_new TO supersedes_learning_id; END IF; END $$;
ALTER TABLE public.plans RENAME COLUMN project_id_new TO project_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plans' AND column_name='project_id_new') THEN ALTER TABLE public.plans RENAME COLUMN project_id_new TO project_id; END IF; END $$;
ALTER TABLE public.plans RENAME COLUMN supersedes_plan_id_new TO supersedes_plan_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plans' AND column_name='supersedes_plan_id_new') THEN ALTER TABLE public.plans RENAME COLUMN supersedes_plan_id_new TO supersedes_plan_id; END IF; END $$;
ALTER TABLE public.plan_dependencies RENAME COLUMN plan_id_new TO plan_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_dependencies' AND column_name='plan_id_new') THEN ALTER TABLE public.plan_dependencies RENAME COLUMN plan_id_new TO plan_id; END IF; END $$;
ALTER TABLE public.plan_dependencies RENAME COLUMN depends_on_plan_id_new TO depends_on_plan_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_dependencies' AND column_name='depends_on_plan_id_new') THEN ALTER TABLE public.plan_dependencies RENAME COLUMN depends_on_plan_id_new TO depends_on_plan_id; END IF; END $$;
ALTER TABLE public.plan_related_plans RENAME COLUMN plan_a_id_new TO plan_a_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_related_plans' AND column_name='plan_a_id_new') THEN ALTER TABLE public.plan_related_plans RENAME COLUMN plan_a_id_new TO plan_a_id; END IF; END $$;
ALTER TABLE public.plan_related_plans RENAME COLUMN plan_b_id_new TO plan_b_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_related_plans' AND column_name='plan_b_id_new') THEN ALTER TABLE public.plan_related_plans RENAME COLUMN plan_b_id_new TO plan_b_id; END IF; END $$;
ALTER TABLE public.plan_skills RENAME COLUMN plan_id_new TO plan_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_skills' AND column_name='plan_id_new') THEN ALTER TABLE public.plan_skills RENAME COLUMN plan_id_new TO plan_id; END IF; END $$;
ALTER TABLE public.plan_skills RENAME COLUMN skill_id_new TO skill_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_skills' AND column_name='skill_id_new') THEN ALTER TABLE public.plan_skills RENAME COLUMN skill_id_new TO skill_id; END IF; END $$;
ALTER TABLE public.plan_guardrails RENAME COLUMN plan_id_new TO plan_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_guardrails' AND column_name='plan_id_new') THEN ALTER TABLE public.plan_guardrails RENAME COLUMN plan_id_new TO plan_id; END IF; END $$;
ALTER TABLE public.plan_guardrails RENAME COLUMN guardrail_id_new TO guardrail_id; DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='plan_guardrails' AND column_name='guardrail_id_new') THEN ALTER TABLE public.plan_guardrails RENAME COLUMN guardrail_id_new TO guardrail_id; END IF; END $$;
-- ============================================================ -- ============================================================
-- STEP 8: Upgrade serial → bigserial (alter sequence type) -- STEP 8: Upgrade serial → bigserial (alter sequence type)
@@ -258,6 +415,12 @@ ALTER TABLE public.project_guardrails ALTER COLUMN id TYPE bigint;
-- STEP 9: Add PK constraints to formerly uuid-pk tables -- STEP 9: Add PK constraints to formerly uuid-pk tables
-- ============================================================ -- ============================================================
ALTER TABLE public.agent_skills DROP CONSTRAINT IF EXISTS agent_skills_pkey;
ALTER TABLE public.agent_guardrails DROP CONSTRAINT IF EXISTS agent_guardrails_pkey;
ALTER TABLE public.chat_histories DROP CONSTRAINT IF EXISTS chat_histories_pkey;
ALTER TABLE public.learnings DROP CONSTRAINT IF EXISTS learnings_pkey;
ALTER TABLE public.plans DROP CONSTRAINT IF EXISTS plans_pkey;
ALTER TABLE public.agent_skills ADD CONSTRAINT agent_skills_pkey PRIMARY KEY (id); ALTER TABLE public.agent_skills ADD CONSTRAINT agent_skills_pkey PRIMARY KEY (id);
ALTER TABLE public.agent_guardrails ADD CONSTRAINT agent_guardrails_pkey PRIMARY KEY (id); ALTER TABLE public.agent_guardrails ADD CONSTRAINT agent_guardrails_pkey PRIMARY KEY (id);
ALTER TABLE public.chat_histories ADD CONSTRAINT chat_histories_pkey PRIMARY KEY (id); ALTER TABLE public.chat_histories ADD CONSTRAINT chat_histories_pkey PRIMARY KEY (id);
@@ -265,74 +428,39 @@ ALTER TABLE public.learnings ADD CONSTRAINT learnings_pkey PRIMARY KEY (id);
ALTER TABLE public.plans ADD CONSTRAINT plans_pkey PRIMARY KEY (id); ALTER TABLE public.plans ADD CONSTRAINT plans_pkey PRIMARY KEY (id);
-- Add unique constraint on guid columns -- Add unique constraint on guid columns
ALTER TABLE public.agent_skills ADD CONSTRAINT agent_skills_guid_key UNIQUE (guid); DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='agent_skills' AND constraint_name='agent_skills_guid_key') THEN ALTER TABLE public.agent_skills ADD CONSTRAINT agent_skills_guid_key UNIQUE (guid); END IF; END $$;
ALTER TABLE public.agent_guardrails ADD CONSTRAINT agent_guardrails_guid_key UNIQUE (guid); DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='agent_guardrails' AND constraint_name='agent_guardrails_guid_key') THEN ALTER TABLE public.agent_guardrails ADD CONSTRAINT agent_guardrails_guid_key UNIQUE (guid); END IF; END $$;
ALTER TABLE public.chat_histories ADD CONSTRAINT chat_histories_guid_key UNIQUE (guid); DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='chat_histories' AND constraint_name='chat_histories_guid_key') THEN ALTER TABLE public.chat_histories ADD CONSTRAINT chat_histories_guid_key UNIQUE (guid); END IF; END $$;
ALTER TABLE public.learnings ADD CONSTRAINT learnings_guid_key UNIQUE (guid); DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='learnings' AND constraint_name='learnings_guid_key') THEN ALTER TABLE public.learnings ADD CONSTRAINT learnings_guid_key UNIQUE (guid); END IF; END $$;
ALTER TABLE public.plans ADD CONSTRAINT plans_guid_key UNIQUE (guid); DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='plans' AND constraint_name='plans_guid_key') THEN ALTER TABLE public.plans ADD CONSTRAINT plans_guid_key UNIQUE (guid); END IF; END $$;
-- ============================================================ -- ============================================================
-- STEP 10: Re-add FK constraints -- STEP 10: Re-add FK constraints
-- ============================================================ -- ============================================================
ALTER TABLE public.thoughts DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='thoughts' AND constraint_name='thoughts_project_id_fkey') THEN ALTER TABLE public.thoughts ADD CONSTRAINT thoughts_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id); END IF; END $$;
ADD CONSTRAINT thoughts_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id); DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='embeddings' AND constraint_name='embeddings_thought_id_fkey') THEN ALTER TABLE public.embeddings ADD CONSTRAINT embeddings_thought_id_fkey FOREIGN KEY (thought_id) REFERENCES public.thoughts(id); END IF; END $$;
DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='stored_files' AND constraint_name='stored_files_thought_id_fkey') THEN ALTER TABLE public.stored_files ADD CONSTRAINT stored_files_thought_id_fkey FOREIGN KEY (thought_id) REFERENCES public.thoughts(id); END IF; END $$;
ALTER TABLE public.embeddings DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='stored_files' AND constraint_name='stored_files_project_id_fkey') THEN ALTER TABLE public.stored_files ADD CONSTRAINT stored_files_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id); END IF; END $$;
ADD CONSTRAINT embeddings_thought_id_fkey FOREIGN KEY (thought_id) REFERENCES public.thoughts(id); DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='project_skills' AND constraint_name='project_skills_project_id_fkey') THEN ALTER TABLE public.project_skills ADD CONSTRAINT project_skills_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE; END IF; END $$;
DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='project_skills' AND constraint_name='project_skills_skill_id_fkey') THEN ALTER TABLE public.project_skills ADD CONSTRAINT project_skills_skill_id_fkey FOREIGN KEY (skill_id) REFERENCES public.agent_skills(id) ON DELETE CASCADE; END IF; END $$;
ALTER TABLE public.stored_files DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='project_guardrails' AND constraint_name='project_guardrails_project_id_fkey') THEN ALTER TABLE public.project_guardrails ADD CONSTRAINT project_guardrails_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE; END IF; END $$;
ADD CONSTRAINT stored_files_thought_id_fkey FOREIGN KEY (thought_id) REFERENCES public.thoughts(id); DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='project_guardrails' AND constraint_name='project_guardrails_guardrail_id_fkey') THEN ALTER TABLE public.project_guardrails ADD CONSTRAINT project_guardrails_guardrail_id_fkey FOREIGN KEY (guardrail_id) REFERENCES public.agent_guardrails(id) ON DELETE CASCADE; END IF; END $$;
ALTER TABLE public.stored_files DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='chat_histories' AND constraint_name='chat_histories_project_id_fkey') THEN ALTER TABLE public.chat_histories ADD CONSTRAINT chat_histories_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE SET NULL; END IF; END $$;
ADD CONSTRAINT stored_files_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id); DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='learnings' AND constraint_name='learnings_project_id_fkey') THEN ALTER TABLE public.learnings ADD CONSTRAINT learnings_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE SET NULL; END IF; END $$;
DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='learnings' AND constraint_name='learnings_related_thought_id_fkey') THEN ALTER TABLE public.learnings ADD CONSTRAINT learnings_related_thought_id_fkey FOREIGN KEY (related_thought_id) REFERENCES public.thoughts(id) ON DELETE SET NULL; END IF; END $$;
ALTER TABLE public.project_skills DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='learnings' AND constraint_name='learnings_related_skill_id_fkey') THEN ALTER TABLE public.learnings ADD CONSTRAINT learnings_related_skill_id_fkey FOREIGN KEY (related_skill_id) REFERENCES public.agent_skills(id) ON DELETE SET NULL; END IF; END $$;
ADD CONSTRAINT project_skills_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE; DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='learnings' AND constraint_name='learnings_duplicate_of_learning_id_fkey') THEN ALTER TABLE public.learnings ADD CONSTRAINT learnings_duplicate_of_learning_id_fkey FOREIGN KEY (duplicate_of_learning_id) REFERENCES public.learnings(id) ON DELETE SET NULL; END IF; END $$;
ALTER TABLE public.project_skills DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='learnings' AND constraint_name='learnings_supersedes_learning_id_fkey') THEN ALTER TABLE public.learnings ADD CONSTRAINT learnings_supersedes_learning_id_fkey FOREIGN KEY (supersedes_learning_id) REFERENCES public.learnings(id) ON DELETE SET NULL; END IF; END $$;
ADD CONSTRAINT project_skills_skill_id_fkey FOREIGN KEY (skill_id) REFERENCES public.agent_skills(id) ON DELETE CASCADE; DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='plans' AND constraint_name='plans_project_id_fkey') THEN ALTER TABLE public.plans ADD CONSTRAINT plans_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE SET NULL; END IF; END $$;
DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='plans' AND constraint_name='plans_supersedes_plan_id_fkey') THEN ALTER TABLE public.plans ADD CONSTRAINT plans_supersedes_plan_id_fkey FOREIGN KEY (supersedes_plan_id) REFERENCES public.plans(id) ON DELETE SET NULL; END IF; END $$;
ALTER TABLE public.project_guardrails DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='plan_dependencies' AND constraint_name='plan_dependencies_plan_id_fkey') THEN ALTER TABLE public.plan_dependencies ADD CONSTRAINT plan_dependencies_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE; END IF; END $$;
ADD CONSTRAINT project_guardrails_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE; DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='plan_dependencies' AND constraint_name='plan_dependencies_depends_on_plan_id_fkey') THEN ALTER TABLE public.plan_dependencies ADD CONSTRAINT plan_dependencies_depends_on_plan_id_fkey FOREIGN KEY (depends_on_plan_id) REFERENCES public.plans(id) ON DELETE CASCADE; END IF; END $$;
ALTER TABLE public.project_guardrails DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='plan_related_plans' AND constraint_name='plan_related_plans_plan_a_id_fkey') THEN ALTER TABLE public.plan_related_plans ADD CONSTRAINT plan_related_plans_plan_a_id_fkey FOREIGN KEY (plan_a_id) REFERENCES public.plans(id) ON DELETE CASCADE; END IF; END $$;
ADD CONSTRAINT project_guardrails_guardrail_id_fkey FOREIGN KEY (guardrail_id) REFERENCES public.agent_guardrails(id) ON DELETE CASCADE; DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='plan_related_plans' AND constraint_name='plan_related_plans_plan_b_id_fkey') THEN ALTER TABLE public.plan_related_plans ADD CONSTRAINT plan_related_plans_plan_b_id_fkey FOREIGN KEY (plan_b_id) REFERENCES public.plans(id) ON DELETE CASCADE; END IF; END $$;
DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='plan_skills' AND constraint_name='plan_skills_plan_id_fkey') THEN ALTER TABLE public.plan_skills ADD CONSTRAINT plan_skills_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE; END IF; END $$;
ALTER TABLE public.chat_histories DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='plan_skills' AND constraint_name='plan_skills_skill_id_fkey') THEN ALTER TABLE public.plan_skills ADD CONSTRAINT plan_skills_skill_id_fkey FOREIGN KEY (skill_id) REFERENCES public.agent_skills(id) ON DELETE CASCADE; END IF; END $$;
ADD CONSTRAINT chat_histories_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE SET NULL; DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='plan_guardrails' AND constraint_name='plan_guardrails_plan_id_fkey') THEN ALTER TABLE public.plan_guardrails ADD CONSTRAINT plan_guardrails_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE; END IF; END $$;
DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE table_schema='public' AND table_name='plan_guardrails' AND constraint_name='plan_guardrails_guardrail_id_fkey') THEN ALTER TABLE public.plan_guardrails ADD CONSTRAINT plan_guardrails_guardrail_id_fkey FOREIGN KEY (guardrail_id) REFERENCES public.agent_guardrails(id) ON DELETE CASCADE; END IF; END $$;
ALTER TABLE public.learnings
ADD CONSTRAINT learnings_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE SET NULL;
ALTER TABLE public.learnings
ADD CONSTRAINT learnings_related_thought_id_fkey FOREIGN KEY (related_thought_id) REFERENCES public.thoughts(id) ON DELETE SET NULL;
ALTER TABLE public.learnings
ADD CONSTRAINT learnings_related_skill_id_fkey FOREIGN KEY (related_skill_id) REFERENCES public.agent_skills(id) ON DELETE SET NULL;
ALTER TABLE public.learnings
ADD CONSTRAINT learnings_duplicate_of_learning_id_fkey FOREIGN KEY (duplicate_of_learning_id) REFERENCES public.learnings(id) ON DELETE SET NULL;
ALTER TABLE public.learnings
ADD CONSTRAINT learnings_supersedes_learning_id_fkey FOREIGN KEY (supersedes_learning_id) REFERENCES public.learnings(id) ON DELETE SET NULL;
ALTER TABLE public.plans
ADD CONSTRAINT plans_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE SET NULL;
ALTER TABLE public.plans
ADD CONSTRAINT plans_supersedes_plan_id_fkey FOREIGN KEY (supersedes_plan_id) REFERENCES public.plans(id) ON DELETE SET NULL;
ALTER TABLE public.plan_dependencies
ADD CONSTRAINT plan_dependencies_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
ALTER TABLE public.plan_dependencies
ADD CONSTRAINT plan_dependencies_depends_on_plan_id_fkey FOREIGN KEY (depends_on_plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
ALTER TABLE public.plan_related_plans
ADD CONSTRAINT plan_related_plans_plan_a_id_fkey FOREIGN KEY (plan_a_id) REFERENCES public.plans(id) ON DELETE CASCADE;
ALTER TABLE public.plan_related_plans
ADD CONSTRAINT plan_related_plans_plan_b_id_fkey FOREIGN KEY (plan_b_id) REFERENCES public.plans(id) ON DELETE CASCADE;
ALTER TABLE public.plan_skills
ADD CONSTRAINT plan_skills_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
ALTER TABLE public.plan_skills
ADD CONSTRAINT plan_skills_skill_id_fkey FOREIGN KEY (skill_id) REFERENCES public.agent_skills(id) ON DELETE CASCADE;
ALTER TABLE public.plan_guardrails
ADD CONSTRAINT plan_guardrails_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id) ON DELETE CASCADE;
ALTER TABLE public.plan_guardrails
ADD CONSTRAINT plan_guardrails_guardrail_id_fkey FOREIGN KEY (guardrail_id) REFERENCES public.agent_guardrails(id) ON DELETE CASCADE;
COMMIT; COMMIT;

View File

@@ -129,7 +129,7 @@ CREATE TABLE IF NOT EXISTS public.thoughts (
created_at timestamptz DEFAULT now(), created_at timestamptz DEFAULT now(),
guid uuid NOT NULL DEFAULT gen_random_uuid(), guid uuid NOT NULL DEFAULT gen_random_uuid(),
id bigserial NOT NULL, id bigserial NOT NULL,
metadata jsonb DEFAULT '''{}''::jsonb', metadata jsonb DEFAULT '{}'::jsonb,
project_id bigint, project_id bigint,
updated_at timestamptz DEFAULT now() updated_at timestamptz DEFAULT now()
); );
@@ -184,8 +184,8 @@ CREATE TABLE IF NOT EXISTS public.chat_histories (
created_at timestamptz NOT NULL DEFAULT now(), created_at timestamptz NOT NULL DEFAULT now(),
guid uuid NOT NULL DEFAULT gen_random_uuid(), guid uuid NOT NULL DEFAULT gen_random_uuid(),
id bigserial NOT NULL, id bigserial NOT NULL,
messages jsonb NOT NULL DEFAULT '''[', messages jsonb NOT NULL DEFAULT '[]',
metadata jsonb NOT NULL DEFAULT '''{}''', metadata jsonb NOT NULL DEFAULT '{}',
project_id bigint, project_id bigint,
session_id text NOT NULL, session_id text NOT NULL,
summary text, summary text,
@@ -222,7 +222,7 @@ CREATE TABLE IF NOT EXISTS public.learnings (
status text NOT NULL DEFAULT 'pending', status text NOT NULL DEFAULT 'pending',
summary text NOT NULL, summary text NOT NULL,
supersedes_learning_id bigint, supersedes_learning_id bigint,
tags text, tags text[] NOT NULL DEFAULT '{}',
updated_at timestamptz NOT NULL DEFAULT now() updated_at timestamptz NOT NULL DEFAULT now()
); );
@@ -240,7 +240,7 @@ CREATE TABLE IF NOT EXISTS public.plans (
reviewed_by text, reviewed_by text,
status text NOT NULL DEFAULT 'draft', status text NOT NULL DEFAULT 'draft',
supersedes_plan_id bigint, supersedes_plan_id bigint,
tags text, tags text[] NOT NULL DEFAULT '{}',
title text NOT NULL, title text NOT NULL,
updated_at timestamptz NOT NULL DEFAULT now() updated_at timestamptz NOT NULL DEFAULT now()
); );
@@ -280,7 +280,7 @@ CREATE TABLE IF NOT EXISTS public.agent_skills (
guid uuid NOT NULL DEFAULT gen_random_uuid(), guid uuid NOT NULL DEFAULT gen_random_uuid(),
id bigserial NOT NULL, id bigserial NOT NULL,
name text NOT NULL, name text NOT NULL,
tags text, tags text[] NOT NULL DEFAULT '{}',
updated_at timestamptz NOT NULL DEFAULT now() updated_at timestamptz NOT NULL DEFAULT now()
); );
@@ -292,7 +292,7 @@ CREATE TABLE IF NOT EXISTS public.agent_guardrails (
id bigserial NOT NULL, id bigserial NOT NULL,
name text NOT NULL, name text NOT NULL,
severity text NOT NULL DEFAULT 'medium', severity text NOT NULL DEFAULT 'medium',
tags text, tags text[] NOT NULL DEFAULT '{}',
updated_at timestamptz NOT NULL DEFAULT now() updated_at timestamptz NOT NULL DEFAULT now()
); );
@@ -384,7 +384,7 @@ BEGIN
AND table_name = 'thoughts' AND table_name = 'thoughts'
AND column_name = 'metadata' AND column_name = 'metadata'
) THEN ) THEN
ALTER TABLE public.thoughts ADD COLUMN metadata jsonb DEFAULT '''{}''::jsonb'; ALTER TABLE public.thoughts ADD COLUMN metadata jsonb DEFAULT '{}'::jsonb;
END IF; END IF;
END; END;
$$; $$;
@@ -904,7 +904,7 @@ BEGIN
AND table_name = 'chat_histories' AND table_name = 'chat_histories'
AND column_name = 'messages' AND column_name = 'messages'
) THEN ) THEN
ALTER TABLE public.chat_histories ADD COLUMN messages jsonb NOT NULL DEFAULT '''['; ALTER TABLE public.chat_histories ADD COLUMN messages jsonb NOT NULL DEFAULT '[]';
END IF; END IF;
END; END;
$$; $$;
@@ -917,7 +917,7 @@ BEGIN
AND table_name = 'chat_histories' AND table_name = 'chat_histories'
AND column_name = 'metadata' AND column_name = 'metadata'
) THEN ) THEN
ALTER TABLE public.chat_histories ADD COLUMN metadata jsonb NOT NULL DEFAULT '''{}'''; ALTER TABLE public.chat_histories ADD COLUMN metadata jsonb NOT NULL DEFAULT '{}';
END IF; END IF;
END; END;
$$; $$;
@@ -1320,7 +1320,7 @@ BEGIN
AND table_name = 'learnings' AND table_name = 'learnings'
AND column_name = 'tags' AND column_name = 'tags'
) THEN ) THEN
ALTER TABLE public.learnings ADD COLUMN tags text; ALTER TABLE public.learnings ADD COLUMN tags text[] NOT NULL DEFAULT '{}';
END IF; END IF;
END; END;
$$; $$;
@@ -1515,7 +1515,7 @@ BEGIN
AND table_name = 'plans' AND table_name = 'plans'
AND column_name = 'tags' AND column_name = 'tags'
) THEN ) THEN
ALTER TABLE public.plans ADD COLUMN tags text; ALTER TABLE public.plans ADD COLUMN tags text[] NOT NULL DEFAULT '{}';
END IF; END IF;
END; END;
$$; $$;
@@ -1840,7 +1840,7 @@ BEGIN
AND table_name = 'agent_skills' AND table_name = 'agent_skills'
AND column_name = 'tags' AND column_name = 'tags'
) THEN ) THEN
ALTER TABLE public.agent_skills ADD COLUMN tags text; ALTER TABLE public.agent_skills ADD COLUMN tags text[] NOT NULL DEFAULT '{}';
END IF; END IF;
END; END;
$$; $$;
@@ -1957,7 +1957,7 @@ BEGIN
AND table_name = 'agent_guardrails' AND table_name = 'agent_guardrails'
AND column_name = 'tags' AND column_name = 'tags'
) THEN ) THEN
ALTER TABLE public.agent_guardrails ADD COLUMN tags text; ALTER TABLE public.agent_guardrails ADD COLUMN tags text[] NOT NULL DEFAULT '{}';
END IF; END IF;
END; END;
$$; $$;
@@ -2570,10 +2570,10 @@ CREATE INDEX IF NOT EXISTS idx_learnings_summary
ON public.learnings USING gin (summary gin_trgm_ops); ON public.learnings USING gin (summary gin_trgm_ops);
CREATE INDEX IF NOT EXISTS idx_learnings_tags CREATE INDEX IF NOT EXISTS idx_learnings_tags
ON public.learnings USING gin (tags gin_trgm_ops); ON public.learnings USING gin (tags);
CREATE INDEX IF NOT EXISTS idx_plans_tags CREATE INDEX IF NOT EXISTS idx_plans_tags
ON public.plans USING gin (tags gin_trgm_ops); ON public.plans USING gin (tags);
CREATE INDEX IF NOT EXISTS idx_plans_title CREATE INDEX IF NOT EXISTS idx_plans_title
ON public.plans USING gin (title gin_trgm_ops); ON public.plans USING gin (title gin_trgm_ops);