module PgSaurus::ConnectionAdapters::PostgreSQLAdapter::SchemaMethods

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

Public Instance Methods

create_schema_if_not_exists(schema_name) click to toggle source

Create schema if it does not exist yet.

@param schema_name [String]

# File lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb, line 14
def create_schema_if_not_exists(schema_name)
  ::PgSaurus::Tools.create_schema_if_not_exists(schema_name)
end
current_schema_search_path() click to toggle source

Reads the current schema search path (it may have been altered from the initial value used when creating the connection)

# File lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb, line 80
def current_schema_search_path
  select_value("SHOW search_path;")
end
drop_schema_if_exists(schema_name) click to toggle source

Drop schema if it exists.

@param schema_name [String]

# File lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb, line 21
def drop_schema_if_exists(schema_name)
  ::PgSaurus::Tools.drop_schema_if_exists(schema_name)
end
drop_table(table_name, options = {}) click to toggle source

Provide :schema option to drop_table method.

Calls superclass method
# File lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb, line 26
def drop_table(table_name, options = {})
  options     = options.dup
  schema_name = options.delete(:schema)
  table_name  = "#{schema_name}.#{table_name}" if schema_name
  super(table_name, options)
end
in_schema(schema_name) { || ... } click to toggle source

Execute operations in the context of the schema

# File lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb, line 68
def in_schema(schema_name)
  search_path = current_schema_search_path
  begin
    execute("SET search_path TO '%s'" % schema_name)
    yield
  ensure
    execute("SET search_path TO #{search_path};")
  end
end
move_table_to_schema(table, schema) click to toggle source

Move table to another schema @param [String] table table name. Can be with schema prefix e.g. “demography.people” @param [String] schema schema where table should be moved to.

# File lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb, line 7
def move_table_to_schema(table, schema)
  ::PgSaurus::Tools.move_table_to_schema(table, schema)
end
rename_table(table_name, new_name, options = {}) click to toggle source

Provide :schema option to rename_table method.

Calls superclass method
# File lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb, line 56
def rename_table(table_name, new_name, options = {})
  schema_name = options[:schema]
  if schema_name
    in_schema schema_name do
      super(table_name, new_name)
    end
  else
    super(table_name, new_name)
  end
end
tables(*args) click to toggle source

Make method tables return tables not only from public schema.

@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: https://github.com/TMXCredit/pg_power/pull/42

@return [Array<String>] table names

Calls superclass method
# File lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb, line 42
  def tables(*args)
    public_tables = super(*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