openreplay/ee/scripts/helm/db/init_dbs/postgresql/1.3.6/1.3.6.sql
Taha Yassine Kraiem 1264b8e89b feat(api): changed SAML blueprint
feat(db): changed delta version
2021-12-01 18:24:39 +01:00

64 lines
No EOL
2.4 KiB
PL/PgSQL

BEGIN;
CREATE INDEX sessions_user_id_useridNN_idx ON sessions (user_id) WHERE user_id IS NOT NULL;
CREATE INDEX sessions_uid_projectid_startts_sessionid_uidNN_durGTZ_idx ON sessions (user_id, project_id, start_ts, session_id) WHERE user_id IS NOT NULL AND duration > 0;
CREATE INDEX pages_base_path_base_pathLNGT2_idx ON events.pages (base_path) WHERE length(base_path) > 2;
CREATE INDEX users_tenant_id_deleted_at_N_idx ON users (tenant_id) WHERE deleted_at ISNULL;
CREATE INDEX issues_issue_id_timestamp_idx ON events_common.issues (issue_id, timestamp);
CREATE INDEX issues_timestamp_idx ON events_common.issues (timestamp);
CREATE INDEX issues_project_id_issue_id_idx ON public.issues (project_id, issue_id);
CREATE TABLE roles
(
role_id integer generated BY DEFAULT AS IDENTITY PRIMARY KEY,
tenant_id integer NOT NULL REFERENCES tenants (tenant_id) ON DELETE CASCADE,
name text NOT NULL,
description text DEFAULT NULL,
permissions text[] NOT NULL DEFAULT '{}',
protected bool NOT NULL DEFAULT FALSE,
created_at timestamp NOT NULL DEFAULT timezone('utc'::text, now()),
deleted_at timestamp NULL DEFAULT NULL
);
INSERT INTO roles(tenant_id, name, description, permissions, protected)
SELECT *
FROM (SELECT tenant_id FROM tenants) AS tenants,
(VALUES ('Owner', 'The company''s owner', '{}'::text[], TRUE),
('Admin', 'Admin member', '{}'::text[], TRUE),
('Member', 'A member', '{}'::text[], TRUE)
) AS default_roles(name, description, permissions, protected);
ALTER TABLE users
ADD COLUMN role_id integer REFERENCES roles (role_id) ON DELETE SET NULL;
UPDATE users
SET role_id = r.role_id
FROM (SELECT tenant_id, role_id
FROM tenants
INNER JOIN roles USING (tenant_id)
WHERE roles.name = 'Owner') AS r(tenant_id, role_id)
WHERE users.tenant_id = r.tenant_id
AND users.role = 'owner';
UPDATE users
SET role_id = r.role_id
FROM (SELECT tenant_id, role_id
FROM tenants
INNER JOIN roles USING (tenant_id)
WHERE roles.name = 'Admin') AS r(tenant_id, role_id)
WHERE users.tenant_id = r.tenant_id
AND users.role = 'admin';
UPDATE users
SET role_id = r.role_id
FROM (SELECT tenant_id, role_id
FROM tenants
INNER JOIN roles USING (tenant_id)
WHERE roles.name = 'Member') AS r(tenant_id, role_id)
WHERE users.tenant_id = r.tenant_id
AND users.role = 'member';
COMMIT;