@@ -6,7 +6,7 @@ CREATE EXTENSION IF NOT EXISTS plpython3u;
66-- -
77-- - Create schema for models.
88-- -
9- DROP SCHEMA pgml CASCADE;
9+ -- DROP SCHEMA pgml CASCADE;
1010CREATE SCHEMA IF NOT EXISTS pgml;
1111
1212CREATE OR REPLACE FUNCTION pgml .auto_updated_at(tbl regclass)
4040$$
4141LANGUAGE plpgsql;
4242
43- CREATE TABLE pgml .projects(
43+ CREATE TABLE IF NOT EXISTS pgml .projects (
4444idBIGSERIAL PRIMARY KEY ,
4545nameTEXT NOT NULL ,
4646objectiveTEXT NOT NULL ,
4747created_atTIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT clock_timestamp(),
4848updated_atTIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT clock_timestamp()
4949);
5050SELECT 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);
5252
53- CREATE TABLE pgml .snapshots(
53+ CREATE TABLE IF NOT EXISTS pgml .snapshots (
5454idBIGSERIAL PRIMARY KEY ,
5555relation_nameTEXT NOT NULL ,
5656y_column_nameTEXT NOT NULL ,
@@ -62,7 +62,7 @@ CREATE TABLE pgml.snapshots(
6262);
6363SELECT pgml .auto_updated_at (' pgml.snapshots' );
6464
65- CREATE TABLE pgml .models(
65+ CREATE TABLE IF NOT EXISTS pgml .models (
6666idBIGSERIAL PRIMARY KEY ,
6767project_idBIGINT NOT NULL ,
6868snapshot_idBIGINT NOT NULL ,
@@ -76,17 +76,17 @@ CREATE TABLE pgml.models(
7676CONSTRAINT project_id_fkFOREIGN KEY (project_id)REFERENCES pgml .projects (id),
7777CONSTRAINT snapshot_id_fkFOREIGN KEY (snapshot_id)REFERENCES pgml .snapshots (id)
7878);
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);
8080SELECT pgml .auto_updated_at (' pgml.models' );
8181
82- CREATE TABLE pgml .deployments(
82+ CREATE TABLE IF NOT EXISTS pgml .deployments (
8383project_idBIGINT NOT NULL ,
8484model_idBIGINT NOT NULL ,
8585created_atTIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT clock_timestamp(),
8686CONSTRAINT project_id_fkFOREIGN KEY (project_id)REFERENCES pgml .projects (id),
8787CONSTRAINT model_id_fkFOREIGN KEY (model_id)REFERENCES pgml .models (id)
8888);
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);
9090SELECT pgml .auto_updated_at (' pgml.deployments' );
9191
9292
@@ -103,12 +103,15 @@ $$ LANGUAGE plpython3u;
103103-- -
104104-- - Regression
105105-- -
106+ DROP FUNCTION IF EXISTSpgml .train (project_nameTEXT , objectiveTEXT , relation_nameTEXT , y_column_nameTEXT );
106107CREATE OR REPLACE FUNCTION pgml .train(project_nameTEXT , objectiveTEXT , relation_nameTEXT , y_column_nameTEXT )
107- RETURNSVOID
108+ RETURNSTABLE(project_name TEXT , objective TEXT , status TEXT )
108109AS $$
109110from pgml .model import train
110111
111112train(project_name, objective, relation_name, y_column_name)
113+
114+ return [(project_name, objective," deployed" )]
112115$$ LANGUAGE plpython3u;
113116
114117-- -
@@ -121,3 +124,26 @@ AS $$
121124
122125returnProject .find_by_name (project_name).deployed_model .predict ([features,])[0 ]
123126$$ 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 ;