@@ -6,7 +6,7 @@ CREATE EXTENSION IF NOT EXISTS plpython3u;
6
6
-- -
7
7
-- - Create schema for models.
8
8
-- -
9
- DROP SCHEMA pgml CASCADE;
9
+ -- DROP SCHEMA pgml CASCADE;
10
10
CREATE SCHEMA IF NOT EXISTS pgml;
11
11
12
12
CREATE OR REPLACE FUNCTION pgml .auto_updated_at(tbl regclass)
40
40
$$
41
41
LANGUAGE plpgsql;
42
42
43
- CREATE TABLE pgml .projects(
43
+ CREATE TABLE IF NOT EXISTS pgml .projects (
44
44
idBIGSERIAL PRIMARY KEY ,
45
45
nameTEXT NOT NULL ,
46
46
objectiveTEXT NOT NULL ,
47
47
created_atTIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT clock_timestamp(),
48
48
updated_atTIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT clock_timestamp()
49
49
);
50
50
SELECT pgml .auto_updated_at (' pgml.projects' );
51
- CREATE UNIQUE INDEX projects_name_idx ON pgml .projects (name);
51
+ CREATE UNIQUE INDEX IF NOT EXISTS projects_name_idxON pgml .projects (name);
52
52
53
- CREATE TABLE pgml .snapshots(
53
+ CREATE TABLE IF NOT EXISTS pgml .snapshots (
54
54
idBIGSERIAL PRIMARY KEY ,
55
55
relation_nameTEXT NOT NULL ,
56
56
y_column_nameTEXT NOT NULL ,
@@ -62,7 +62,7 @@ CREATE TABLE pgml.snapshots(
62
62
);
63
63
SELECT pgml .auto_updated_at (' pgml.snapshots' );
64
64
65
- CREATE TABLE pgml .models(
65
+ CREATE TABLE IF NOT EXISTS pgml .models (
66
66
idBIGSERIAL PRIMARY KEY ,
67
67
project_idBIGINT NOT NULL ,
68
68
snapshot_idBIGINT NOT NULL ,
@@ -76,17 +76,17 @@ CREATE TABLE pgml.models(
76
76
CONSTRAINT project_id_fkFOREIGN KEY (project_id)REFERENCES pgml .projects (id),
77
77
CONSTRAINT snapshot_id_fkFOREIGN KEY (snapshot_id)REFERENCES pgml .snapshots (id)
78
78
);
79
- CREATE INDEX models_project_id_created_at_idx ON pgml .models (project_id, created_at);
79
+ CREATE INDEX IF NOT EXISTS models_project_id_created_at_idxON pgml .models (project_id, created_at);
80
80
SELECT pgml .auto_updated_at (' pgml.models' );
81
81
82
- CREATE TABLE pgml .deployments(
82
+ CREATE TABLE IF NOT EXISTS pgml .deployments (
83
83
project_idBIGINT NOT NULL ,
84
84
model_idBIGINT NOT NULL ,
85
85
created_atTIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT clock_timestamp(),
86
86
CONSTRAINT project_id_fkFOREIGN KEY (project_id)REFERENCES pgml .projects (id),
87
87
CONSTRAINT model_id_fkFOREIGN KEY (model_id)REFERENCES pgml .models (id)
88
88
);
89
- CREATE INDEX deployments_project_id_created_at_idx ON pgml .deployments (project_id, created_at);
89
+ CREATE INDEX IF NOT EXISTS deployments_project_id_created_at_idxON pgml .deployments (project_id, created_at);
90
90
SELECT pgml .auto_updated_at (' pgml.deployments' );
91
91
92
92
@@ -103,12 +103,15 @@ $$ LANGUAGE plpython3u;
103
103
-- -
104
104
-- - Regression
105
105
-- -
106
+ DROP FUNCTION IF EXISTSpgml .train (project_nameTEXT , objectiveTEXT , relation_nameTEXT , y_column_nameTEXT );
106
107
CREATE OR REPLACE FUNCTION pgml .train(project_nameTEXT , objectiveTEXT , relation_nameTEXT , y_column_nameTEXT )
107
- RETURNSVOID
108
+ RETURNSTABLE(project_name TEXT , objective TEXT , status TEXT )
108
109
AS $$
109
110
from pgml .model import train
110
111
111
112
train(project_name, objective, relation_name, y_column_name)
113
+
114
+ return [(project_name, objective," deployed" )]
112
115
$$ LANGUAGE plpython3u;
113
116
114
117
-- -
@@ -121,3 +124,26 @@ AS $$
121
124
122
125
returnProject .find_by_name (project_name).deployed_model .predict ([features,])[0 ]
123
126
$$ LANGUAGE plpython3u;
127
+
128
+ -- -
129
+ -- - Quick status check on the system.
130
+ -- -
131
+ DROP VIEW IF EXISTSpgml .overview ;
132
+ CREATE VIEW pgml .overviewAS
133
+ SELECT
134
+ p .name ,
135
+ d .created_at AS deployed_at,
136
+ p .objective ,
137
+ m .algorithm_name ,
138
+ m .mean_squared_error ,
139
+ m .r2_score ,
140
+ s .relation_name ,
141
+ s .y_column_name ,
142
+ s .test_sampling ,
143
+ s .test_size
144
+ FROM pgml .projects p
145
+ INNER JOIN pgml .models mON p .id = m .project_id
146
+ INNER JOIN pgml .deployments dON d .project_id = p .id
147
+ AND d .model_id = m .id
148
+ INNER JOIN pgml .snapshots sON s .id = m .snapshot_id
149
+ ORDER BY d .created_at DESC ;