mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-27 06:41:18 +00:00
30 lines
1.4 KiB
MySQL
30 lines
1.4 KiB
MySQL
|
-- This trigger prevents using the Diesel CLI to run or revert migrations, so the custom migration runner
|
||
|
-- can drop and recreate the `r` schema for new migrations.
|
||
|
--
|
||
|
-- This migration being seperate from the next migration (created in the same PR) guarantees that the
|
||
|
-- Diesel CLI will fail to bring the number of pending migrations to 0, which is one of the conditions
|
||
|
-- required to skip running replaceable_schema.
|
||
|
--
|
||
|
-- If the Diesel CLI could run or revert migrations, this scenario would be possible:
|
||
|
--
|
||
|
-- Run `diesel migration redo` when the newest migration has a new table with triggers. End up with triggers
|
||
|
-- being dropped and not replaced because triggers are created outside of up.sql. The custom migration runner
|
||
|
-- sees that there are no pending migrations and the value in the `previously_run_sql` trigger is correct, so
|
||
|
-- it doesn't rebuild the `r` schema. There is now incorrect behavior but no error messages.
|
||
|
CREATE FUNCTION forbid_diesel_cli ()
|
||
|
RETURNS TRIGGER
|
||
|
LANGUAGE plpgsql
|
||
|
AS $$
|
||
|
BEGIN
|
||
|
IF current_setting('lemmy.enable_migrations', TRUE) IS DISTINCT FROM 'on' THEN
|
||
|
RAISE 'migrations must be managed using lemmy_server instead of diesel CLI';
|
||
|
END IF;
|
||
|
RETURN NULL;
|
||
|
END;
|
||
|
$$;
|
||
|
|
||
|
CREATE TRIGGER forbid_diesel_cli
|
||
|
BEFORE INSERT OR UPDATE OR DELETE OR TRUNCATE ON __diesel_schema_migrations
|
||
|
EXECUTE FUNCTION forbid_diesel_cli ();
|
||
|
|