fix: migrator: more accurate check for hectic.migrator isntalled
This commit is contained in:
@@ -217,7 +217,7 @@ BEGIN;
|
|||||||
|
|
||||||
DO \$\$
|
DO \$\$
|
||||||
DECLARE
|
DECLARE
|
||||||
version TEXT;
|
ver TEXT;
|
||||||
BEGIN
|
BEGIN
|
||||||
CREATE SCHEMA IF NOT EXISTS hectic;
|
CREATE SCHEMA IF NOT EXISTS hectic;
|
||||||
|
|
||||||
@@ -230,28 +230,43 @@ BEGIN
|
|||||||
AND n.nspname = 'hectic'
|
AND n.nspname = 'hectic'
|
||||||
AND c.relkind = 'r'
|
AND c.relkind = 'r'
|
||||||
) THEN
|
) THEN
|
||||||
SELECT hectic.version.version FROM hectic.version WHERE name = 'migrator' INTO version;
|
SELECT v.version INTO ver FROM hectic.version v WHERE v.name = 'migrator';
|
||||||
IF version != '$VERSION' THEN
|
IF ver IS NOT NULL AND ver != '$VERSION' THEN
|
||||||
RAISE EXCEPTION 'Incompatible migrator versions: % and $VERSION', version;
|
RAISE EXCEPTION 'Incompatible migrator versions: % and $VERSION', ver;
|
||||||
END IF;
|
END IF;
|
||||||
ELSE
|
ELSE
|
||||||
CREATE DOMAIN hectic.migration_name AS TEXT CHECK (VALUE ~ '^[0-9]{14}-.*');
|
|
||||||
CREATE DOMAIN hectic.sha256 AS CHAR(64) CHECK (VALUE ~ '^[0-9a-f]{64}\$');
|
|
||||||
|
|
||||||
CREATE FUNCTION hectic.sha256_lower() RETURNS trigger AS \$fn\$
|
|
||||||
BEGIN
|
|
||||||
NEW.hash = lower(NEW.hash);
|
|
||||||
RETURN NEW;
|
|
||||||
END;
|
|
||||||
\$fn\$ LANGUAGE plpgsql;
|
|
||||||
|
|
||||||
CREATE TABLE hectic.version (
|
CREATE TABLE hectic.version (
|
||||||
name TEXT PRIMARY KEY,
|
name TEXT PRIMARY KEY,
|
||||||
version TEXT NOT NULL,
|
version TEXT NOT NULL,
|
||||||
installed_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
installed_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||||
)$inherits;
|
)$inherits;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- NOTE(yukkop): check migrator is registered in version table
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1 FROM hectic.version WHERE name = 'migrator'
|
||||||
|
) THEN
|
||||||
INSERT INTO hectic.version (name, version) VALUES ('migrator', '$VERSION');
|
INSERT INTO hectic.version (name, version) VALUES ('migrator', '$VERSION');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- NOTE(yukkop): create migrator-specific objects if not yet present
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM pg_class c
|
||||||
|
JOIN pg_namespace n ON n.oid = c.relnamespace
|
||||||
|
WHERE c.relname = 'migration'
|
||||||
|
AND n.nspname = 'hectic'
|
||||||
|
AND c.relkind = 'r'
|
||||||
|
) THEN
|
||||||
|
CREATE DOMAIN hectic.migration_name AS TEXT CHECK (VALUE ~ '^[0-9]{14}-.*');
|
||||||
|
CREATE DOMAIN hectic.sha256 AS CHAR(64) CHECK (VALUE ~ '^[0-9a-f]{64}\$');
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION hectic.sha256_lower() RETURNS trigger AS \$fn\$
|
||||||
|
BEGIN
|
||||||
|
NEW.hash = lower(NEW.hash);
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
\$fn\$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
CREATE TABLE hectic.migration (
|
CREATE TABLE hectic.migration (
|
||||||
id SERIAL PRIMARY KEY,
|
id SERIAL PRIMARY KEY,
|
||||||
|
|||||||
Reference in New Issue
Block a user