mirror of
https://github.com/LemmyNet/lemmy.git
synced 2025-01-10 20:15:56 +00:00
6b1b29419d
* Update schema.rs * rename * stuff * finish new implementation of schema_setup::run (not including revert, test, etc.) * fmt * refactor * fix sql * migriation run command * use trigger on migrations table * add Options with disable_migrations field for test * rename to enable_forbid_diesel_cli_trigger * fix * fix merge * diff_checker (partial) * Revert "diff_checker (partial)" This reverts commit6709882e14
. * Revert "Revert "diff_checker (partial)"" This reverts commitd4bdda5d11
. * diff check * improve schema diff * timestamp replacement * ignore column order * remove fedi_name default * stuff * improve diff * stuff * attempt parallel pg_dump * attempt 2 * Revert "attempt 2" This reverts commita909d2d643
. * Revert "attempt parallel pg_dump" This reverts commit592a127954
. * improve diff check * finish fixing migrations * stuff * use advisory lock * stuff * Update lib.rs * fmt * fmt * clippy * Update diff_check.rs * Update .woodpecker.yml * Update lib.rs * Update lib.rs * Update lib.rs * Update .woodpecker.yml * Update .woodpecker.yml * Update lib.rs * re-run ci * fmt * fmt * Update .woodpecker.yml * Update .woodpecker.yml * create separate database in ci * Update .woodpecker.yml * Update .woodpecker.yml * Update .woodpecker.yml * Update .woodpecker.yml * try to fix env var * Update diff_check.rs * Remove condition that's not needed anymore * clippy * exclude views and fast tables * revert some migration changes * fix * fmt * re-attempt checking character after skipped trigger name, and make code less confusing * fmt * fix * rerun ci * rerun ci * fix strip_prefix order * fix weird big Cargo.lock change by running `git checkout upstream/main Cargo.lock` then letting it auto update again * fix * remove installation commands that were removed in main branch * Revert "remove installation commands that were removed in main branch" This reverts commitfd65234a76
. * move create_database_user woodpecker step to make diff less weird * fix clippy * Make diff check work just like before * Move new migrations to the end * Revert changes to old migrations * don't assume that migrations are already sorted * retry CI * fix merge * find migrations dir in debug mode using CARGO_MANIFEST_DIR variable instead of current working directory * always use embedded migrations * improve doc comments for migration subcommand * clippy fix * move cfg(test) attribute to diff_check.rs * copy `o` variable instead of calling `o` function * use chrono::TimeDelta Display implementation to show migration duration
33 lines
1.4 KiB
PL/PgSQL
33 lines
1.4 KiB
PL/PgSQL
-- 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 NOT EXISTS (
|
|
SELECT
|
|
FROM
|
|
pg_locks
|
|
WHERE (locktype, pid, objid) = ('advisory', pg_backend_pid(), 0)) 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 ();
|
|
|