Skip to content

Commit a471a45

Browse files
committed
SQL: Ensure creation is idempotent
This was meant to be done a long time ago, but it was lost in a Git stash. (Sorry!) This is needed to make sure the updater service doesn't continually fail when it is run. Ref: AP-558
1 parent 6399420 commit a471a45

1 file changed

Lines changed: 78 additions & 101 deletions

File tree

sql/willa.sql

Lines changed: 78 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -12,56 +12,55 @@ CREATE EXTENSION IF NOT EXISTS pgcrypto;
1212
COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions';
1313

1414

15-
CREATE TYPE "StepType" AS ENUM (
16-
'assistant_message',
17-
'embedding',
18-
'llm',
19-
'retrieval',
20-
'rerank',
21-
'run',
22-
'system_message',
23-
'tool',
24-
'undefined',
25-
'user_message'
26-
);
15+
DO $$ BEGIN
16+
IF to_regtype('"StepType"') IS NULL THEN
17+
CREATE TYPE "StepType" AS ENUM (
18+
'assistant_message',
19+
'embedding',
20+
'llm',
21+
'retrieval',
22+
'rerank',
23+
'run',
24+
'system_message',
25+
'tool',
26+
'undefined',
27+
'user_message'
28+
);
29+
END IF;
30+
END $$;
2731

2832

2933
SET default_tablespace = '';
3034
SET default_table_access_method = heap;
3135

3236

33-
CREATE TABLE "Element" (
37+
38+
CREATE TABLE IF NOT EXISTS "User" (
3439
id text DEFAULT gen_random_uuid() NOT NULL,
3540
"createdAt" timestamp(3) without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
3641
"updatedAt" timestamp(3) without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
37-
"threadId" text,
38-
"stepId" text NOT NULL,
3942
metadata jsonb NOT NULL,
40-
mime text,
41-
name text NOT NULL,
42-
"objectKey" text,
43-
url text,
44-
"chainlitKey" text,
45-
display text,
46-
size text,
47-
language text,
48-
page integer,
49-
props jsonb
43+
identifier text NOT NULL,
44+
PRIMARY KEY (id),
45+
UNIQUE (identifier)
5046
);
5147

5248

53-
CREATE TABLE "Feedback" (
49+
CREATE TABLE IF NOT EXISTS "Thread" (
5450
id text DEFAULT gen_random_uuid() NOT NULL,
5551
"createdAt" timestamp(3) without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
5652
"updatedAt" timestamp(3) without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
57-
"stepId" text,
58-
name text NOT NULL,
59-
value double precision NOT NULL,
60-
comment text
53+
"deletedAt" timestamp(3) without time zone,
54+
name text,
55+
metadata jsonb NOT NULL,
56+
"userId" text,
57+
tags text[] DEFAULT ARRAY[]::text[],
58+
PRIMARY KEY (id),
59+
FOREIGN KEY ("userId") REFERENCES "User"(id) ON UPDATE CASCADE ON DELETE SET NULL
6160
);
6261

6362

64-
CREATE TABLE "Step" (
63+
CREATE TABLE IF NOT EXISTS "Step" (
6564
id text DEFAULT gen_random_uuid() NOT NULL,
6665
"createdAt" timestamp(3) without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
6766
"updatedAt" timestamp(3) without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
@@ -75,119 +74,97 @@ CREATE TABLE "Step" (
7574
"showInput" text DEFAULT 'json'::text,
7675
"isError" boolean DEFAULT false,
7776
"startTime" timestamp(3) without time zone NOT NULL,
78-
"endTime" timestamp(3) without time zone NOT NULL
77+
"endTime" timestamp(3) without time zone NOT NULL,
78+
PRIMARY KEY (id),
79+
FOREIGN KEY ("parentId") REFERENCES "Step"(id) ON UPDATE CASCADE ON DELETE CASCADE,
80+
FOREIGN KEY ("threadId") REFERENCES "Thread"(id) ON UPDATE CASCADE ON DELETE CASCADE
7981
);
8082

8183

82-
CREATE TABLE "Thread" (
84+
CREATE TABLE IF NOT EXISTS "Element" (
8385
id text DEFAULT gen_random_uuid() NOT NULL,
8486
"createdAt" timestamp(3) without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
8587
"updatedAt" timestamp(3) without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
86-
"deletedAt" timestamp(3) without time zone,
87-
name text,
88+
"threadId" text,
89+
"stepId" text NOT NULL,
8890
metadata jsonb NOT NULL,
89-
"userId" text,
90-
tags text[] DEFAULT ARRAY[]::text[]
91+
mime text,
92+
name text NOT NULL,
93+
"objectKey" text,
94+
url text,
95+
"chainlitKey" text,
96+
display text,
97+
size text,
98+
language text,
99+
page integer,
100+
props jsonb,
101+
PRIMARY KEY (id),
102+
FOREIGN KEY ("stepId") REFERENCES "Step"(id) ON UPDATE CASCADE ON DELETE CASCADE,
103+
FOREIGN KEY ("threadId") REFERENCES "Thread"(id) ON UPDATE CASCADE ON DELETE CASCADE
91104
);
92105

93106

94-
CREATE TABLE "User" (
107+
CREATE TABLE IF NOT EXISTS "Feedback" (
95108
id text DEFAULT gen_random_uuid() NOT NULL,
96109
"createdAt" timestamp(3) without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
97110
"updatedAt" timestamp(3) without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
98-
metadata jsonb NOT NULL,
99-
identifier text NOT NULL
111+
"stepId" text,
112+
name text NOT NULL,
113+
value double precision NOT NULL,
114+
comment text,
115+
PRIMARY KEY (id),
116+
FOREIGN KEY ("stepId") REFERENCES "Step"(id) ON UPDATE CASCADE ON DELETE SET NULL
100117
);
101118

102119

103-
CREATE TABLE _prisma_migrations (
120+
CREATE TABLE IF NOT EXISTS _prisma_migrations (
104121
id character varying(36) NOT NULL,
105122
checksum character varying(64) NOT NULL,
106123
finished_at timestamp with time zone,
107124
migration_name character varying(255) NOT NULL,
108125
logs text,
109126
rolled_back_at timestamp with time zone,
110127
started_at timestamp with time zone DEFAULT now() NOT NULL,
111-
applied_steps_count integer DEFAULT 0 NOT NULL
128+
applied_steps_count integer DEFAULT 0 NOT NULL,
129+
PRIMARY KEY (id)
112130
);
113131

114132

115-
ALTER TABLE ONLY "Element"
116-
ADD CONSTRAINT "Element_pkey" PRIMARY KEY (id);
117-
118-
ALTER TABLE ONLY "Feedback"
119-
ADD CONSTRAINT "Feedback_pkey" PRIMARY KEY (id);
120-
121-
ALTER TABLE ONLY "Step"
122-
ADD CONSTRAINT "Step_pkey" PRIMARY KEY (id);
123-
124-
ALTER TABLE ONLY "Thread"
125-
ADD CONSTRAINT "Thread_pkey" PRIMARY KEY (id);
126-
127-
ALTER TABLE ONLY "User"
128-
ADD CONSTRAINT "User_pkey" PRIMARY KEY (id);
129-
130-
ALTER TABLE ONLY _prisma_migrations
131-
ADD CONSTRAINT _prisma_migrations_pkey PRIMARY KEY (id);
132-
133-
134-
CREATE INDEX "Element_stepId_idx" ON "Element" USING btree ("stepId");
135-
136-
CREATE INDEX "Element_threadId_idx" ON "Element" USING btree ("threadId");
137-
138-
CREATE INDEX "Feedback_createdAt_idx" ON "Feedback" USING btree ("createdAt");
139-
140-
CREATE INDEX "Feedback_name_idx" ON "Feedback" USING btree (name);
141-
142-
CREATE INDEX "Feedback_name_value_idx" ON "Feedback" USING btree (name, value);
143-
144-
CREATE INDEX "Feedback_stepId_idx" ON "Feedback" USING btree ("stepId");
145-
146-
CREATE INDEX "Feedback_value_idx" ON "Feedback" USING btree (value);
147-
148-
CREATE INDEX "Step_createdAt_idx" ON "Step" USING btree ("createdAt");
149-
150-
CREATE INDEX "Step_endTime_idx" ON "Step" USING btree ("endTime");
151-
152-
CREATE INDEX "Step_name_idx" ON "Step" USING btree (name);
133+
CREATE INDEX IF NOT EXISTS "Element_stepId_idx" ON "Element" USING btree ("stepId");
153134

154-
CREATE INDEX "Step_parentId_idx" ON "Step" USING btree ("parentId");
135+
CREATE INDEX IF NOT EXISTS "Element_threadId_idx" ON "Element" USING btree ("threadId");
155136

156-
CREATE INDEX "Step_startTime_idx" ON "Step" USING btree ("startTime");
137+
CREATE INDEX IF NOT EXISTS "Feedback_createdAt_idx" ON "Feedback" USING btree ("createdAt");
157138

158-
CREATE INDEX "Step_threadId_idx" ON "Step" USING btree ("threadId");
139+
CREATE INDEX IF NOT EXISTS "Feedback_name_idx" ON "Feedback" USING btree (name);
159140

160-
CREATE INDEX "Step_threadId_startTime_endTime_idx" ON "Step" USING btree ("threadId", "startTime", "endTime");
141+
CREATE INDEX IF NOT EXISTS "Feedback_name_value_idx" ON "Feedback" USING btree (name, value);
161142

162-
CREATE INDEX "Step_type_idx" ON "Step" USING btree (type);
143+
CREATE INDEX IF NOT EXISTS "Feedback_stepId_idx" ON "Feedback" USING btree ("stepId");
163144

164-
CREATE INDEX "Thread_createdAt_idx" ON "Thread" USING btree ("createdAt");
145+
CREATE INDEX IF NOT EXISTS "Feedback_value_idx" ON "Feedback" USING btree (value);
165146

166-
CREATE INDEX "Thread_name_idx" ON "Thread" USING btree (name);
147+
CREATE INDEX IF NOT EXISTS "Step_createdAt_idx" ON "Step" USING btree ("createdAt");
167148

168-
CREATE INDEX "User_identifier_idx" ON "User" USING btree (identifier);
149+
CREATE INDEX IF NOT EXISTS "Step_endTime_idx" ON "Step" USING btree ("endTime");
169150

151+
CREATE INDEX IF NOT EXISTS "Step_name_idx" ON "Step" USING btree (name);
170152

171-
CREATE UNIQUE INDEX "User_identifier_key" ON "User" USING btree (identifier);
153+
CREATE INDEX IF NOT EXISTS "Step_parentId_idx" ON "Step" USING btree ("parentId");
172154

155+
CREATE INDEX IF NOT EXISTS "Step_startTime_idx" ON "Step" USING btree ("startTime");
173156

174-
ALTER TABLE ONLY "Element"
175-
ADD CONSTRAINT "Element_stepId_fkey" FOREIGN KEY ("stepId") REFERENCES "Step"(id) ON UPDATE CASCADE ON DELETE CASCADE;
157+
CREATE INDEX IF NOT EXISTS "Step_threadId_idx" ON "Step" USING btree ("threadId");
176158

177-
ALTER TABLE ONLY "Element"
178-
ADD CONSTRAINT "Element_threadId_fkey" FOREIGN KEY ("threadId") REFERENCES "Thread"(id) ON UPDATE CASCADE ON DELETE CASCADE;
159+
CREATE INDEX IF NOT EXISTS "Step_threadId_startTime_endTime_idx" ON "Step" USING btree ("threadId", "startTime", "endTime");
179160

180-
ALTER TABLE ONLY "Feedback"
181-
ADD CONSTRAINT "Feedback_stepId_fkey" FOREIGN KEY ("stepId") REFERENCES "Step"(id) ON UPDATE CASCADE ON DELETE SET NULL;
161+
CREATE INDEX IF NOT EXISTS "Step_type_idx" ON "Step" USING btree (type);
182162

183-
ALTER TABLE ONLY "Step"
184-
ADD CONSTRAINT "Step_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "Step"(id) ON UPDATE CASCADE ON DELETE CASCADE;
163+
CREATE INDEX IF NOT EXISTS "Thread_createdAt_idx" ON "Thread" USING btree ("createdAt");
185164

186-
ALTER TABLE ONLY "Step"
187-
ADD CONSTRAINT "Step_threadId_fkey" FOREIGN KEY ("threadId") REFERENCES "Thread"(id) ON UPDATE CASCADE ON DELETE CASCADE;
165+
CREATE INDEX IF NOT EXISTS "Thread_name_idx" ON "Thread" USING btree (name);
188166

189-
ALTER TABLE ONLY "Thread"
190-
ADD CONSTRAINT "Thread_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"(id) ON UPDATE CASCADE ON DELETE SET NULL;
167+
CREATE INDEX IF NOT EXISTS "User_identifier_idx" ON "User" USING btree (identifier);
191168

192169

193170
--

0 commit comments

Comments
 (0)