123456789_123456789_123456789_123456789_123456789_

Class: ActiveRecord::ConnectionAdapters::PostgreSQLAdapter

Overview

The PostgreSQL adapter works with the native C (github.com/ged/ruby-pg) driver.

Options:

  • :host - Defaults to a Unix-domain socket in /tmp. On machines without Unix-domain sockets, the default is to connect to localhost.

  • :port - Defaults to 5432.

  • :username - Defaults to be the same as the operating system name of the user running the application.

  • :password - Password to be used if the server demands password authentication.

  • :database - Defaults to be the same as the user name.

  • :schema_search_path - An optional schema search path for the connection given as a string of comma-separated schema names. This is backward-compatible with the :schema_order option.

  • :encoding - An optional client encoding that is used in a SET client_encoding TO <encoding> call on the connection.

  • :min_messages - An optional client min messages that is used in a SET client_min_messages TO <min_messages> call on the connection.

  • :variables - An optional hash of additional parameters that will be used in SET SESSION key = val calls on the connection.

  • :insert_returning - An optional boolean to control the use of RETURNING for INSERT statements defaults to true.

Any further options are used as connection parameters to libpq. See www.postgresql.org/docs/current/static/libpq-connect.html for the list of parameters.

In addition, default connection parameters of libpq can be set per environment variables. See www.postgresql.org/docs/current/static/libpq-envars.html .

Constant Summary

::ActiveSupport::Callbacks - Included

CALLBACK_FILTER_TYPES

DatabaseStatements - Included

DEFAULT_INSERT_VALUE

Quoting - Included

COLUMN_NAME, COLUMN_NAME_WITH_ORDER

AbstractAdapter - Inherited

ADAPTER_NAME, COMMENT_REGEX, SIMPLE_INT

PostgreSQL::Quoting - Included

COLUMN_NAME, COLUMN_NAME_WITH_ORDER

Class Attribute Summary

Class Method Summary

Instance Attribute Summary

PostgreSQL::SchemaStatements - Included

#client_min_messages

Returns the current client message level.

#client_min_messages=

Set the client message level.

#schema_search_path

Returns the active schema search path.

#schema_search_path=

Sets the schema search path to a string of comma-separated schema names.

AbstractAdapter - Inherited

#__callbacks, #__callbacks?,
#active?

Checks whether the connection to the database is still active.

#in_use?
#lock, #logger, #owner, #pool,
#prepared_statements
#preventing_writes?

Determines whether writes are currently being prevented.

#replica?,
#requires_reloading?

Returns true if its required to reload the connection between requests for development mode.

#schema_cache, #schema_cache=,
#supports_advisory_locks?

Does this adapter support application-enforced advisory locking?

#supports_bulk_alter?,
#supports_check_constraints?

Does this adapter support creating check constraints?

#supports_comments?

Does this adapter support metadata comments on database objects (tables, columns, indexes)?

#supports_comments_in_create?

Can comments for tables, columns, and indexes be specified in create/alter table statements?

#supports_common_table_expressions?,
#supports_datetime_with_precision?

Does this adapter support datetime with precision?

#supports_ddl_transactions?

Does this adapter support DDL rollbacks in transactions? That is, would CREATE TABLE or ALTER TABLE get rolled back by a transaction?

#supports_explain?

Does this adapter support explain?

#supports_expression_index?

Does this adapter support expression indices?

#supports_extensions?

Does this adapter support database extensions?

#supports_foreign_keys?

Does this adapter support creating foreign key constraints?

#supports_foreign_tables?

Does this adapter support foreign/external tables?

#supports_index_sort_order?

Does this adapter support index sort order?

#supports_indexes_in_create?

Does this adapter support creating indexes in the same statement as creating the table?

#supports_insert_conflict_target?, #supports_insert_on_duplicate_skip?, #supports_insert_on_duplicate_update?, #supports_insert_returning?,
#supports_json?

Does this adapter support json data type?

#supports_lazy_transactions?,
#supports_materialized_views?

Does this adapter support materialized views?

#supports_optimizer_hints?

Does this adapter support optimizer hints?

#supports_partial_index?

Does this adapter support partial indices?

#supports_partitioned_indexes?,
#supports_savepoints?

Does this adapter support savepoints?

#supports_transaction_isolation?

Does this adapter support setting the isolation level for a transaction?

#supports_validate_constraints?

Does this adapter support creating invalid constraints?

#supports_views?

Does this adapter support views?

#supports_virtual_columns?

Does this adapter support virtual columns?

#use_metadata_table?, #visitor

DatabaseStatements - Included

Instance Method Summary

PostgreSQL::DatabaseStatements - Included

#begin_db_transaction

Begins a transaction.

#begin_isolated_db_transaction,
#commit_db_transaction

Commits a transaction.

#exec_delete, #exec_insert, #exec_query,
#exec_rollback_db_transaction

Aborts a transaction.

#exec_update
#execute

Executes an SQL statement, returning a PG::Result object on success or raising a PG::Error exception otherwise.

#explain

PostgreSQL::SchemaStatements - Included

#collation

Returns the current database collation.

#create_database

Create a new PostgreSQL database.

#create_schema

Creates a schema for the given schema name.

#ctype

Returns the current database ctype.

#current_database

Returns the current database name.

#current_schema

Returns the current schema name.

#drop_schema

Drops the schema for the given schema name.

#encoding

Returns the current database encoding format.

#foreign_keys, #foreign_table_exists?, #foreign_tables,
#index_name_exists?

Verifies existence of an index with a given name.

#rename_index

Renames an index of a table.

#rename_table

Renames a table.

#schema_exists?

Returns true if schema exists.

#schema_names

Returns an array of schema names.

#serial_sequence,
#validate_check_constraint

Validates the given check constraint.

#validate_constraint

Validates the given constraint.

#validate_foreign_key

Validates the given foreign key.

PostgreSQL::Quoting - Included

#column_name_matcher, #column_name_with_order_matcher,
#escape_bytea

Escapes binary strings for bytea input to the database.

#quote_schema_name

Quotes schema names for use in SQL queries.

#quote_table_name_for_assignment,
#unescape_bytea

Unescapes bytea output from a database to the binary string it represents.

AbstractAdapter - Inherited

#adapter_name

Returns the human-readable name of the adapter.

#clear_cache!

Clear any caching the database adapter may be doing.

#close

Check the connection back in to the connection pool.

#disable_extension

This is meant to be implemented by the adapters that support extensions.

#disable_referential_integrity

Override to turn off referential integrity while executing &block.

#discard!

Immediately forget this connection ever existed.

#disconnect!

Disconnects from the database if already connected.

#enable_extension

This is meant to be implemented by the adapters that support extensions.

#expire

this method must only be called while holding connection poolā€™s mutex.

#extensions

A list of extensions, to be filled in by adapters that support them.

#index_algorithms

A list of index algorithms, to be filled by adapters that support them.

#lease

this method must only be called while holding connection poolā€™s mutex.

#prefetch_primary_key?

Should primary key values be selected from their corresponding sequence before the insert statement? If true, next_sequence_value is called before each insert to set the recordā€™s primary key.

#prepared_statements?,
#raw_connection

Provides access to the underlying database driver for this adapter.

#reconnect!

Disconnects from the database if already connected, and establishes a new connection with the database.

#reset!

Reset the state of this connection, directing the DBMS to clear transactions and other connection-related server-side state.

#throw_away!

Removes the connection from the pool and disconnect it.

#unprepared_statement,
#verify!

Checks whether the connection to the database is still active (i.e. not stale).

#log

Savepoints - Included

DatabaseLimits - Included

#allowed_index_name_length

Returns the maximum allowed length for an index name.

#in_clause_length

Returns the maximum number of elements in an IN (x,y,z) clause.

#index_name_length

Returns the maximum length of an index name.

#table_alias_length

Returns the maximum length of a table alias.

Quoting - Included

#quote

Quotes the column value to help prevent SQL injection attacks.

#quote_column_name

Quotes the column name.

#quote_string

Quotes a string, escaping any ā€˜ (single quote) and \ (backslash) characters.

#quote_table_name

Quotes the table name.

#quote_table_name_for_assignment

Override to return the quoted table name for assignment.

#quoted_date

Quote date/time values for use in SQL input.

#quoted_false, #quoted_true,
#type_cast

Cast a value to a type that the database understands.

#unquoted_false, #unquoted_true

DatabaseStatements - Included

#add_transaction_record

Register a record with the current transaction so that its after_commit and after_rollback callbacks can be called.

#begin_db_transaction

Begins the transaction (and turns off auto-committing).

#begin_isolated_db_transaction

Begins the transaction with the isolation level set.

#commit_db_transaction

Commits the transaction (and turns on auto-committing).

#create
#default_sequence_name,
#delete

Executes the delete statement and returns the number of rows affected.

#disable_lazy_transactions!, #empty_insert_statement_value, #enable_lazy_transactions!,
#exec_delete

Executes delete sql statement in the context of this connection using binds as the bind substitutes.

#exec_insert

Executes insert sql statement in the context of this connection using binds as the bind substitutes.

#exec_query

Executes sql statement in the context of this connection using binds as the bind substitutes.

#exec_update

Executes update sql statement in the context of this connection using binds as the bind substitutes.

#execute

Executes the SQL statement in the context of this connection and returns the raw result from the connection adapter.

#initialize,
#insert

Executes an INSERT query and returns the new recordā€™s ID.

#insert_fixture

Inserts the given fixture into the table.

#insert_fixtures_set,
#reset_sequence!

Set the sequence to the max value of the tableā€™s column.

#rollback_db_transaction

Rolls back the transaction (and turns on auto-committing).

#rollback_to_savepoint,
#sanitize_limit

Sanitizes the given LIMIT parameter in order to prevent SQL injection.

#select_all

Returns an ::ActiveRecord::Result instance.

#select_one

Returns a record hash with the column names as keys and column values as values.

#select_rows

Returns an array of arrays containing the field values.

#select_value

Returns a single value from a record.

#select_values

Returns an array of the values of the first column in a select:

#to_sql

Converts an arel AST to SQL.

#transaction

Runs the given block in a database transaction, and returns the result of the block.

#transaction_isolation_levels,
#truncate

Executes the truncate statement.

#update

Executes the update statement and returns the number of rows affected.

#write_query?

Determines whether the SQL statement is a write query.

SchemaStatements - Included

#add_belongs_to
#add_check_constraint

Adds a new check constraint to the table.

#add_column

Add a new type column named column_name to table_name.

#add_foreign_key

Adds a new foreign key.

#add_index

Adds a new index to the table.

#add_reference

Adds a reference.

#add_timestamps

Adds timestamps (created_at and updated_at) columns to table_name.

#assume_migrated_upto_version,
#change_column

Changes the columnā€™s definition according to the new options.

#change_column_comment

Changes the comment for a column or removes it if nil.

#change_column_default

Sets a new default value for a column:

#change_column_null

Sets or removes a NOT NULL constraint on a column.

#change_table

A block for changing columns in table.

#change_table_comment

Changes the comment for a table or removes it if nil.

#check_constraints

Returns an array of check constraints for the given table.

#column_exists?

Checks to see if a column exists in a given table.

#columns

Returns an array of Column objects for the table specified by table_name.

#create_join_table

Creates a new join table with the name created using the lexical order of the first two arguments.

#create_table

Creates a new table with the name table_name.

#data_source_exists?

Checks to see if the data source name exists on the database.

#data_sources

Returns the relation names useable to back Active Record models.

#drop_join_table

Drops the join table specified by the given arguments.

#drop_table

Drops a table from the database.

#foreign_key_exists?

Checks to see if a foreign key exists on a table for a given foreign key definition.

#foreign_keys

Returns an array of foreign keys for the given table.

#index_exists?

Checks to see if an index exists on a table for a given index definition.

#index_name_exists?

Verifies the existence of an index with a given name.

#indexes

Returns an array of indexes for the given table.

#native_database_types

Returns a hash of mappings from the abstract data types to the native database types.

#options_include_default?,
#primary_key

Returns just a tableā€™s primary key.

#remove_belongs_to
#remove_check_constraint

Removes the given check constraint from the table.

#remove_column

Removes the column from the table definition.

#remove_columns

Removes the given columns from the table definition.

#remove_foreign_key

Removes the given foreign key from the table.

#remove_index

Removes the given index from the table.

#remove_reference

Removes the reference(s).

#remove_timestamps

Removes the timestamp columns (created_at and updated_at) from the table definition.

#rename_column

Renames a column.

#rename_index

Renames an index.

#rename_table

Renames a table.

#table_alias_for

Truncates a table alias according to the limits of the current adapter.

#table_comment

Returns the table comment thatā€™s stored in database metadata.

#table_exists?

Checks to see if the table table_name exists on the database.

#table_options,
#tables

Returns an array of table names defined in the database.

#view_exists?

Checks to see if the view view_name exists on the database.

#views

Returns an array of view names defined in the database.

::ActiveSupport::Callbacks - Included

#run_callbacks

Runs the callbacks for the given event.

Constructor Details

.new(connection, logger, connection_parameters, config) ⇒ PostgreSQLAdapter

Initializes and connects a PostgreSQL adapter.

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 247

def initialize(connection, logger, connection_parameters, config)
  super(connection, logger, config)

  @connection_parameters = connection_parameters || {}

  # @local_tz is initialized as nil to avoid warnings when connect tries to use it
  @local_tz = nil
  @max_identifier_length = nil

  configure_connection
  add_pg_encoders
  add_pg_decoders

  @type_map = Type::HashLookupTypeMap.new
  initialize_type_map
  @local_tz = execute("SHOW TIME ZONE", "SCHEMA").first["TimeZone"]
  @use_insert_returning = @config.key?(:insert_returning) ? self.class.type_cast_config_to_boolean(@config[:insert_returning]) : true
end

Class Attribute Details

.create_unlogged_tables (rw)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 99

class_attribute :create_unlogged_tables, default: false

.create_unlogged_tables?Boolean (rw)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 99

class_attribute :create_unlogged_tables, default: false

Class Method Details

.database_exists?(config) ⇒ Boolean

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 266

def self.database_exists?(config)
  !!ActiveRecord::Base.postgresql_connection(config)
rescue ActiveRecord::NoDatabaseError
  false
end

.new_client(conn_params)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 77

def new_client(conn_params)
  PG.connect(**conn_params)
rescue ::PG::Error => error
  if conn_params && conn_params[:dbname] && error.message.include?(conn_params[:dbname])
    raise ActiveRecord::NoDatabaseError
  else
    raise ActiveRecord::ConnectionNotEstablished, error.message
  end
end

Instance Attribute Details

#active?Boolean (readonly)

Is this connection alive and ready for queries?

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 273

def active?
  @lock.synchronize do
    @connection.query "SELECT 1"
  end
  true
rescue PG::Error
  false
end

#create_unlogged_tables (rw)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 99

class_attribute :create_unlogged_tables, default: false

#create_unlogged_tables?Boolean (rw)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 99

class_attribute :create_unlogged_tables, default: false

#session_auth=(user) (writeonly)

Set the authorized user for this session

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 415

def session_auth=(user)
  clear_cache!
  execute("SET SESSION AUTHORIZATION #{user}")
end

#supports_advisory_locks?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 332

def supports_advisory_locks?
  true
end

#supports_bulk_alter?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 151

def supports_bulk_alter?
  true
end

#supports_check_constraints?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 179

def supports_check_constraints?
  true
end

#supports_comments?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 199

def supports_comments?
  true
end

#supports_common_table_expressions?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 363

def supports_common_table_expressions?
  true
end

#supports_datetime_with_precision?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 191

def supports_datetime_with_precision?
  true
end

#supports_ddl_transactions?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 328

def supports_ddl_transactions?
  true
end

#supports_explain?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 336

def supports_explain?
  true
end

#supports_expression_index?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 167

def supports_expression_index?
  true
end

#supports_extensions?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 340

def supports_extensions?
  true
end

#supports_foreign_keys?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 175

def supports_foreign_keys?
  true
end

#supports_foreign_tables?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 348

def supports_foreign_tables?
  true
end

#supports_index_sort_order?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 155

def supports_index_sort_order?
  true
end

#supports_insert_conflict_target? (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 216

alias supports_insert_conflict_target? supports_insert_on_conflict?

#supports_insert_on_conflict?Boolean (readonly) Also known as: #supports_insert_on_duplicate_skip?, #supports_insert_on_duplicate_update?, #supports_insert_conflict_target?

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 211

def supports_insert_on_conflict?
  database_version >= 90500
end

#supports_insert_on_duplicate_skip? (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 214

alias supports_insert_on_duplicate_skip? supports_insert_on_conflict?

#supports_insert_on_duplicate_update? (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 215

alias supports_insert_on_duplicate_update? supports_insert_on_conflict?

#supports_insert_returning?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 207

def supports_insert_returning?
  true
end

#supports_json?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 195

def supports_json?
  true
end

#supports_lazy_transactions?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 367

def supports_lazy_transactions?
  true
end

#supports_materialized_views?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 344

def supports_materialized_views?
  true
end

#supports_optimizer_hints?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 356

def supports_optimizer_hints?
  unless defined?(@has_pg_hint_plan)
    @has_pg_hint_plan = extension_available?("pg_hint_plan")
  end
  @has_pg_hint_plan
end

#supports_partial_index?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 163

def supports_partial_index?
  true
end

#supports_partitioned_indexes?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 159

def supports_partitioned_indexes?
  database_version >= 110_000
end

#supports_pgcrypto_uuid?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 352

def supports_pgcrypto_uuid?
  database_version >= 90400
end

#supports_savepoints?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 203

def supports_savepoints?
  true
end

#supports_transaction_isolation?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 171

def supports_transaction_isolation?
  true
end

#supports_validate_constraints?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 183

def supports_validate_constraints?
  true
end

#supports_views?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 187

def supports_views?
  true
end

#use_insert_returning?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 420

def use_insert_returning?
  @use_insert_returning
end

Instance Method Details

#disable_extension(name)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 391

def disable_extension(name)
  exec_query("DROP EXTENSION IF EXISTS \"#{name}\" CASCADE").tap {
    reload_type_map
  }
end

#disconnect!

Disconnects from the database if already connected. Otherwise, this method does nothing.

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 307

def disconnect!
  @lock.synchronize do
    super
    @connection.close rescue nil
  end
end

#enable_extension(name)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 385

def enable_extension(name)
  exec_query("CREATE EXTENSION IF NOT EXISTS \"#{name}\"").tap {
    reload_type_map
  }
end

#extension_available?(name) ⇒ Boolean

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 397

def extension_available?(name)
  query_value("SELECT true FROM pg_available_extensions WHERE name = #{quote(name)}", "SCHEMA")
end

#extension_enabled?(name) ⇒ Boolean

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 401

def extension_enabled?(name)
  query_value("SELECT installed_version IS NOT NULL FROM pg_available_extensions WHERE name = #{quote(name)}", "SCHEMA")
end

#extensions

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 405

def extensions
  exec_query("SELECT extname FROM pg_extension", "SCHEMA").cast_values
end

#index_algorithms

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 218

def index_algorithms
  { concurrently: "CONCURRENTLY" }
end

#max_identifier_length

Returns the configured supported identifier length supported by PostgreSQL

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 410

def max_identifier_length
  @max_identifier_length ||= query_value("SHOW max_identifier_length", "SCHEMA").to_i
end

#postgresql_version

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 428

alias :postgresql_version :database_version

#reconnect!

Close then reopen the connection.

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 283

def reconnect!
  @lock.synchronize do
    super
    @connection.reset
    configure_connection
  rescue PG::ConnectionBad
    connect
  end
end

#reset!

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 293

def reset!
  @lock.synchronize do
    clear_cache!
    reset_transaction
    unless @connection.transaction_status == ::PG::PQTRANS_IDLE
      @connection.query "ROLLBACK"
    end
    @connection.query "DISCARD ALL"
    configure_connection
  end
end

#set_standard_conforming_strings

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 324

def set_standard_conforming_strings
  execute("SET standard_conforming_strings = on", "SCHEMA")
end