aegida-console / db / migrations / 004_aegida_gate_models.sql
004_aegida_gate_models.sql
Raw
DO $$
DECLARE
  constraint_name text;
BEGIN
  FOR constraint_name IN
    SELECT con.conname
    FROM pg_constraint AS con
    JOIN pg_class AS rel ON rel.oid = con.conrelid
    JOIN pg_namespace AS namespace ON namespace.oid = rel.relnamespace
    JOIN pg_attribute AS att
      ON att.attrelid = rel.oid AND att.attnum = ANY(con.conkey)
    WHERE namespace.nspname = current_schema()
      AND rel.relname = 'users'
      AND con.contype = 'c'
      AND att.attname = 'last_model_id'
  LOOP
    EXECUTE format('ALTER TABLE users DROP CONSTRAINT %I', constraint_name);
  END LOOP;

  FOR constraint_name IN
    SELECT con.conname
    FROM pg_constraint AS con
    JOIN pg_class AS rel ON rel.oid = con.conrelid
    JOIN pg_namespace AS namespace ON namespace.oid = rel.relnamespace
    JOIN pg_attribute AS att
      ON att.attrelid = rel.oid AND att.attnum = ANY(con.conkey)
    WHERE namespace.nspname = current_schema()
      AND rel.relname = 'conversations'
      AND con.contype = 'c'
      AND att.attname = 'model_id'
  LOOP
    EXECUTE format('ALTER TABLE conversations DROP CONSTRAINT %I', constraint_name);
  END LOOP;
END
$$;

ALTER TABLE users
  ALTER COLUMN last_model_id SET DEFAULT 'auto';
ALTER TABLE conversations
  ALTER COLUMN model_id SET DEFAULT 'auto';

ALTER TABLE users
  ADD CONSTRAINT users_last_model_id_slug_check
  CHECK (last_model_id ~ '^[a-z0-9][a-z0-9._-]{0,127}$');
ALTER TABLE conversations
  ADD CONSTRAINT conversations_model_id_slug_check
  CHECK (model_id ~ '^[a-z0-9][a-z0-9._-]{0,127}$');