Class: ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
|
|
|
Instance Chain:
|
|
| Inherits: |
ActiveRecord::ConnectionAdapters::AbstractAdapter
|
| Defined in: | activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb |
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_orderoption. -
:encoding- An optional client encoding that is used in aSET client_encoding TO <encoding>call on the connection. -
:min_messages- An optional client min messages that is used in aSET client_min_messages TO <min_messages>call on the connection. -
:variables- An optional hash of additional parameters that will be used inSET SESSION key = valcalls on the connection. -
:insert_returning- An optional boolean to control the use ofRETURNINGforINSERTstatements 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
-
ADAPTER_NAME =
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 74"PostgreSQL" -
DEADLOCK_DETECTED =
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 463"40P01" -
DUPLICATE_DATABASE =
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 464"42P04" -
FOREIGN_KEY_VIOLATION =
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 460"23503" -
LOCK_NOT_AVAILABLE =
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 465"55P03" -
NATIVE_DATABASE_TYPES =
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 101{ primary_key: "bigserial primary key", string: { name: "character varying" }, text: { name: "text" }, integer: { name: "integer", limit: 4 }, float: { name: "float" }, decimal: { name: "decimal" }, datetime: { name: "timestamp" }, time: { name: "time" }, date: { name: "date" }, daterange: { name: "daterange" }, numrange: { name: "numrange" }, tsrange: { name: "tsrange" }, tstzrange: { name: "tstzrange" }, int4range: { name: "int4range" }, int8range: { name: "int8range" }, binary: { name: "bytea" }, boolean: { name: "boolean" }, xml: { name: "xml" }, tsvector: { name: "tsvector" }, hstore: { name: "hstore" }, inet: { name: "inet" }, cidr: { name: "cidr" }, macaddr: { name: "macaddr" }, uuid: { name: "uuid" }, json: { name: "json" }, jsonb: { name: "jsonb" }, ltree: { name: "ltree" }, citext: { name: "citext" }, point: { name: "point" }, line: { name: "line" }, lseg: { name: "lseg" }, box: { name: "box" }, path: { name: "path" }, polygon: { name: "polygon" }, circle: { name: "circle" }, bit: { name: "bit" }, bit_varying: { name: "bit varying" }, money: { name: "money" }, interval: { name: "interval" }, oid: { name: "oid" }, } -
NOT_NULL_VIOLATION =
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 459"23502" -
NUMERIC_VALUE_OUT_OF_RANGE =
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 458"22003" -
QUERY_CANCELED =
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 466"57014" -
SERIALIZATION_FAILURE =
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 462"40001" -
UNIQUE_VIOLATION =
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 461"23505" -
VALUE_LIMIT_VIOLATION =
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 457
"22001"
::ActiveSupport::Callbacks - Included
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
AbstractAdapter - Inherited
Class Method Summary
- .database_exists?(config) ⇒ Boolean
-
.new(connection, logger, connection_parameters, config) ⇒ PostgreSQLAdapter
constructor
Initializes and connects a
PostgreSQLadapter. - .new_client(conn_params)
AbstractAdapter - Inherited
| .database_exists? | Does the database for this adapter exist? |
| .type_cast_config_to_boolean, .type_cast_config_to_integer | |
::ActiveSupport::DescendantsTracker - Inherited
| clear, descendants, direct_descendants, | |
| store_inherited | This is the only method that is not thread safe, but is only ever called during the eager loading phase. |
| subclasses | |
Instance Attribute Summary
-
#active? ⇒ Boolean
readonly
Is this connection alive and ready for queries?
- #create_unlogged_tables rw
- #create_unlogged_tables? ⇒ Boolean rw
-
#session_auth=(user)
writeonly
Set the authorized user for this session.
- #supports_advisory_locks? ⇒ Boolean readonly
- #supports_bulk_alter? ⇒ Boolean readonly
- #supports_check_constraints? ⇒ Boolean readonly
- #supports_comments? ⇒ Boolean readonly
- #supports_common_table_expressions? ⇒ Boolean readonly
- #supports_datetime_with_precision? ⇒ Boolean readonly
- #supports_ddl_transactions? ⇒ Boolean readonly
- #supports_explain? ⇒ Boolean readonly
- #supports_expression_index? ⇒ Boolean readonly
- #supports_extensions? ⇒ Boolean readonly
- #supports_foreign_keys? ⇒ Boolean readonly
- #supports_foreign_tables? ⇒ Boolean readonly
- #supports_index_sort_order? ⇒ Boolean readonly
-
#supports_insert_conflict_target?
readonly
Alias for #supports_insert_on_conflict?.
- #supports_insert_on_conflict? ⇒ Boolean (also: #supports_insert_on_duplicate_skip?, #supports_insert_on_duplicate_update?, #supports_insert_conflict_target?) readonly
-
#supports_insert_on_duplicate_skip?
readonly
Alias for #supports_insert_on_conflict?.
-
#supports_insert_on_duplicate_update?
readonly
Alias for #supports_insert_on_conflict?.
- #supports_insert_returning? ⇒ Boolean readonly
- #supports_json? ⇒ Boolean readonly
- #supports_lazy_transactions? ⇒ Boolean readonly
- #supports_materialized_views? ⇒ Boolean readonly
- #supports_optimizer_hints? ⇒ Boolean readonly
- #supports_partial_index? ⇒ Boolean readonly
- #supports_partitioned_indexes? ⇒ Boolean readonly
- #supports_pgcrypto_uuid? ⇒ Boolean readonly
- #supports_savepoints? ⇒ Boolean readonly
- #supports_transaction_isolation? ⇒ Boolean readonly
- #supports_validate_constraints? ⇒ Boolean readonly
- #supports_views? ⇒ Boolean readonly
- #use_insert_returning? ⇒ Boolean readonly
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? | Alias for AbstractAdapter#owner. |
| #lock, #logger, #owner, #pool, | |
| #prepared_statements | Alias for AbstractAdapter#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
- #disable_extension(name)
-
#disconnect!
Disconnects from the database if already connected.
- #enable_extension(name)
- #extension_available?(name) ⇒ Boolean
- #extension_enabled?(name) ⇒ Boolean
- #extensions
- #index_algorithms
-
#max_identifier_length
Returns the configured supported identifier length supported by
PostgreSQL. -
#postgresql_version
Alias for AbstractAdapter#database_version.
-
#reconnect!
Close then reopen the connection.
- #reset!
- #set_standard_conforming_strings
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 | Alias for PostgreSQL::DatabaseStatements#exec_delete. |
| #execute | Executes an SQL statement, returning a |
| #explain | |
PostgreSQL::SchemaStatements - Included
| #collation | Returns the current database collation. |
| #create_database | Create a new |
| #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 |
| #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 |
| #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 | Alias for DatabaseStatements#insert. |
| #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 |
| #exec_insert | Executes insert |
| #exec_query | Executes |
| #exec_update | Executes update |
| #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 |
| #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 | Alias for SchemaStatements#add_reference. |
| #add_check_constraint | Adds a new check constraint to the table. |
| #add_column | Add a new |
| #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 ( |
| #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 |
| #change_column_default | Sets a new default value for a column: |
| #change_column_null | Sets or removes a |
| #change_table | A block for changing columns in |
| #change_table_comment | Changes the comment for a table or removes it if |
| #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 |
| #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 |
| #data_source_exists? | Checks to see if the data source |
| #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 | Alias for SchemaStatements#remove_reference. |
| #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 ( |
| #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_options, | |
| #tables | Returns an array of table names defined in the database. |
| #view_exists? | Checks to see if the view |
| #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.
# 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
# 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..include?(conn_params[:dbname]) raise ActiveRecord::NoDatabaseError else raise ActiveRecord::ConnectionNotEstablished, error. end end
Instance Attribute Details
#active? ⇒ Boolean (readonly)
Is this connection alive and ready for queries?
# 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
# 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)
Alias for #supports_insert_on_conflict?.
# 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)
Alias for #supports_insert_on_conflict?.
# 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)
Alias for #supports_insert_on_conflict?.
# 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.
# 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
# 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
# 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
# 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
Alias for AbstractAdapter#database_version.
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 428
alias :postgresql_version :database_version
#reconnect!
Close then reopen the connection.
# 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