diff options
Diffstat (limited to 'db/migrate/20201019172704_add_partitions_view.rb')
-rw-r--r-- | db/migrate/20201019172704_add_partitions_view.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/db/migrate/20201019172704_add_partitions_view.rb b/db/migrate/20201019172704_add_partitions_view.rb new file mode 100644 index 00000000000..991d137faf3 --- /dev/null +++ b/db/migrate/20201019172704_add_partitions_view.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +class AddPartitionsView < ActiveRecord::Migration[6.0] + DOWNTIME = false + + def up + execute(<<~SQL) + CREATE OR REPLACE VIEW postgres_partitions AS + SELECT + pg_namespace.nspname::text || '.'::text || pg_class.relname::text AS identifier, + pg_class.oid AS oid, + pg_namespace.nspname AS schema, + pg_class.relname AS name, + parent_namespace.nspname::text || '.'::text || parent_class.relname::text AS parent_identifier, + pg_get_expr(pg_class.relpartbound, pg_inherits.inhrelid) AS condition + FROM pg_class + INNER JOIN pg_namespace + ON pg_namespace.oid = pg_class.relnamespace + INNER JOIN pg_inherits + ON pg_class.oid = pg_inherits.inhrelid + INNER JOIN pg_class parent_class + ON pg_inherits.inhparent = parent_class.oid + INNER JOIN pg_namespace parent_namespace + ON parent_class.relnamespace = parent_namespace.oid + WHERE pg_class.relispartition + AND pg_namespace.nspname IN ( + current_schema(), + 'gitlab_partitions_dynamic', + 'gitlab_partitions_static' + ) + SQL + end + + def down + execute(<<~SQL) + DROP VIEW IF EXISTS postgres_partitions + SQL + end +end |