diff options
Diffstat (limited to 'lib/gitlab/database/schema_helpers.rb')
-rw-r--r-- | lib/gitlab/database/schema_helpers.rb | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/lib/gitlab/database/schema_helpers.rb b/lib/gitlab/database/schema_helpers.rb index 8e544307d81..34daafd06de 100644 --- a/lib/gitlab/database/schema_helpers.rb +++ b/lib/gitlab/database/schema_helpers.rb @@ -16,15 +16,30 @@ module Gitlab SQL end - def create_trigger(name, function_name, fires: nil) + def function_exists?(name) + connection.select_value("SELECT 1 FROM pg_proc WHERE proname = '#{name}'") + end + + def create_trigger(table_name, name, function_name, fires:) execute(<<~SQL) CREATE TRIGGER #{name} - #{fires} + #{fires} ON #{table_name} FOR EACH ROW EXECUTE PROCEDURE #{function_name}() SQL end + def trigger_exists?(table_name, name) + connection.select_value(<<~SQL) + SELECT 1 + FROM pg_trigger + INNER JOIN pg_class + ON pg_trigger.tgrelid = pg_class.oid + WHERE pg_class.relname = '#{table_name}' + AND pg_trigger.tgname = '#{name}' + SQL + end + def drop_function(name, if_exists: true) exists_clause = optional_clause(if_exists, "IF EXISTS") execute("DROP FUNCTION #{exists_clause} #{name}()") @@ -69,9 +84,13 @@ module Gitlab private + def table_for_range_partition(partition_name) + "#{Gitlab::Database::DYNAMIC_PARTITIONS_SCHEMA}.#{partition_name}" + end + def create_range_partition(partition_name, table_name, lower_bound, upper_bound) execute(<<~SQL) - CREATE TABLE #{partition_name} PARTITION OF #{table_name} + CREATE TABLE #{table_for_range_partition(partition_name)} PARTITION OF #{table_name} FOR VALUES FROM (#{lower_bound}) TO (#{upper_bound}) SQL end |