diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-08-18 11:17:02 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-08-18 11:17:02 +0300 |
commit | b39512ed755239198a9c294b6a45e65c05900235 (patch) | |
tree | d234a3efade1de67c46b9e5a38ce813627726aa7 /db/migrate/20220722203840_update_lock_writes_function_disabled_via_setting.rb | |
parent | d31474cf3b17ece37939d20082b07f6657cc79a9 (diff) |
Add latest changes from gitlab-org/gitlab@15-3-stable-eev15.3.0-rc42
Diffstat (limited to 'db/migrate/20220722203840_update_lock_writes_function_disabled_via_setting.rb')
-rw-r--r-- | db/migrate/20220722203840_update_lock_writes_function_disabled_via_setting.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/db/migrate/20220722203840_update_lock_writes_function_disabled_via_setting.rb b/db/migrate/20220722203840_update_lock_writes_function_disabled_via_setting.rb new file mode 100644 index 00000000000..f78d2b7f155 --- /dev/null +++ b/db/migrate/20220722203840_update_lock_writes_function_disabled_via_setting.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class UpdateLockWritesFunctionDisabledViaSetting < Gitlab::Database::Migration[2.0] + TRIGGER_FUNCTION_NAME = 'gitlab_schema_prevent_write' + + def up + execute(<<~SQL) + CREATE OR REPLACE FUNCTION #{TRIGGER_FUNCTION_NAME}() + RETURNS TRIGGER AS + $$ + BEGIN + IF COALESCE(NULLIF(current_setting(CONCAT('lock_writes.', TG_TABLE_NAME), true), ''), 'true') THEN + RAISE EXCEPTION 'Table: "%" is write protected within this Gitlab database.', TG_TABLE_NAME + USING ERRCODE = 'modifying_sql_data_not_permitted', + HINT = 'Make sure you are using the right database connection'; + END IF; + RETURN NEW; + END + $$ LANGUAGE PLPGSQL; + SQL + end + + def down + execute(<<~SQL) + CREATE OR REPLACE FUNCTION #{TRIGGER_FUNCTION_NAME}() + RETURNS TRIGGER AS + $$ + BEGIN + RAISE EXCEPTION 'Table: "%" is write protected within this Gitlab database.', TG_TABLE_NAME + USING ERRCODE = 'modifying_sql_data_not_permitted', + HINT = 'Make sure you are using the right database connection'; + END + $$ LANGUAGE PLPGSQL + SQL + end +end |