crimson/build/db-init/base.sql

87 lines
2.1 KiB
MySQL
Raw Normal View History

2024-12-23 15:39:16 +00:00
--- CRIMSON --- A simple PHP framework.
--- Copyright © 2024 Freya Murphy <contact@freyacat.org>
---
--- This file is part of CRIMSON.
---
--- CRIMSON is free software; you can redistribute it and/or modify it
--- under the terms of the GNU General Public License as published by
--- the Free Software Foundation; either version 3 of the License, or (at
--- your option) any later version.
---
--- CRIMSON is distributed in the hope that it will be useful, but
--- WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with CRIMSON. If not, see <http://www.gnu.org/licenses/>.
-- Set's up crimsons baseline database. Can be run multiple times.
BEGIN TRANSACTION;
SET search_path = public;
SET client_min_messages TO WARNING;
-- Migration Start
CREATE SCHEMA IF NOT EXISTS sys;
-- sys
ALTER SCHEMA sys OWNER TO POSTGRES_USER;
-- sys.*/*
DROP DOMAIN IF EXISTS sys."*/*" CASCADE;
CREATE DOMAIN sys."*/*" AS BYTEA;
-- sys.database_info
CREATE TABLE IF NOT EXISTS sys.database_info (
name TEXT DEFAULT ''::text NOT NULL,
jwt_secret TEXT DEFAULT ''::text NOT NULL,
curr_revision INTEGER DEFAULT 0 NOT NULL
);
ALTER TABLE sys.database_info
DROP CONSTRAINT IF EXISTS database_info_pkey;
ALTER TABLE sys.database_info
ADD CONSTRAINT database_info_pkey PRIMARY KEY (name);
ALTER TABLE sys.database_info OWNER TO POSTGRES_USER;
INSERT INTO sys.database_info
(name, curr_revision) VALUES (current_database(), 0)
ON CONFLICT DO NOTHING;
-- sys.JWT
DROP TYPE IF EXISTS sys.JWT CASCADE;
CREATE TYPE sys.JWT AS (
token TEXT
);
-- authenticator
DO
$$
BEGIN
IF NOT EXISTS (SELECT * FROM pg_user WHERE usename = 'authenticator')
THEN
CREATE ROLE authenticator
LOGIN NOINHERIT NOCREATEDB NOCREATEROLE NOSUPERUSER;
END IF;
END
$$;
ALTER ROLE authenticator WITH PASSWORD 'postgrest';
-- anonymous
DROP ROLE IF EXISTS anonymous;
CREATE ROLE anonymous NOLOGIN;
-- Migration End;
COMMIT TRANSACTION;