Module: PgPower::ConnectionAdapters::PostgreSQLAdapter::SchemaMethods

Included in:
PgPower::ConnectionAdapters::PostgreSQLAdapter
Defined in:
lib/pg_power/connection_adapters/postgresql_adapter/schema_methods.rb

Overview

Provides methods to extend ActiveRecord::ConnectionAdapters::PostgreSQLAdapter to support schemas feature.

Instance Method Summary collapse

Instance Method Details

#create_schema(schema_name) ⇒ Object

Creates new schema in DB.

Parameters:

  • schema_name (String)


6
7
8
# File 'lib/pg_power/connection_adapters/postgresql_adapter/schema_methods.rb', line 6

def create_schema(schema_name)
  ::PgPower::Tools.create_schema(schema_name)
end

#drop_schema(schema_name) ⇒ Object

Drops schema in DB.

Parameters:

  • schema_name (String)


12
13
14
# File 'lib/pg_power/connection_adapters/postgresql_adapter/schema_methods.rb', line 12

def drop_schema(schema_name)
  ::PgPower::Tools.drop_schema(schema_name)
end

#move_table_to_schema(table, schema) ⇒ Object

Move table to another schema

Parameters:

  • table (String)

    table name. Can be with schema prefix e.g. “demography.people”

  • schema (String)

    schema where table should be moved to.



19
20
21
# File 'lib/pg_power/connection_adapters/postgresql_adapter/schema_methods.rb', line 19

def move_table_to_schema(table, schema)
  ::PgPower::Tools.move_table_to_schema(table, schema)
end

#tables_with_non_public_schema_tables(*args) ⇒ Array<String>

Note:

Tables from public schema have no “public.” prefix. It’s done for compatibility with other libraries that relies on a table name. Tables from other schemas has appropriate prefix with schema name. See: github.com/TMXCredit/pg_power/pull/42

Make method tables return tables not only from public schema.

Returns:

  • (Array<String>)

    table names



32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/pg_power/connection_adapters/postgresql_adapter/schema_methods.rb', line 32

def tables_with_non_public_schema_tables(*args)
  public_tables = tables_without_non_public_schema_tables(*args)

  non_public_tables =
    query(<<-SQL, 'SCHEMA').map { |row| row[0] }
      SELECT schemaname || '.' || tablename AS table
      FROM pg_tables
      WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'public')
    SQL

  public_tables + non_public_tables
end