module ActiveRecord::ConnectionAdapters::PostgreSQL::DatabaseStatements

Public Instance Methods

# File activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb, line 134
def build_explain_clause(options = [])
  return "EXPLAIN" if options.empty?

  "EXPLAIN (#{options.join(", ").upcase})"
end
# File activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb, line 7
def explain(arel, binds = [], options = [])
  sql    = build_explain_clause(options) + " " + to_sql(arel, binds)
  result = internal_exec_query(sql, "EXPLAIN", binds)
  PostgreSQL::ExplainPrettyPrinter.new.pp(result)
end
# File activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb, line 130
def high_precision_current_timestamp
  HIGH_PRECISION_CURRENT_TIMESTAMP
end
# File activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb, line 53
def raw_execute(sql, name, async: false, allow_retry: false, materialize_transactions: true)
  log(sql, name, async: async) do |notification_payload|
    with_raw_connection(allow_retry: allow_retry, materialize_transactions: materialize_transactions) do |conn|
      result = conn.async_exec(sql)
      verified!
      handle_warnings(result)
      notification_payload[:row_count] = result.count
      result
    end
  end
end

Set when constraints will be checked for the current transaction.

Not passing any specific constraint names will set the value for all deferrable constraints.

deferred

Valid values are :deferred or :immediate.

See www.postgresql.org/docs/current/sql-set-constraints.html

# File activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb, line 148
def set_constraints(deferred, *constraints)
  unless %i[deferred immediate].include?(deferred)
    raise ArgumentError, "deferred must be :deferred or :immediate"
  end

  constraints = if constraints.empty?
    "ALL"
  else
    constraints.map { |c| quote_table_name(c) }.join(", ")
  end
  execute("SET CONSTRAINTS #{constraints} #{deferred.to_s.upcase}")
end