Active Record PostgreSQL 适配器
PostgreSQL 适配器使用原生 C (github.com/ged/ruby-pg) 驱动程序。
选项
-
:host
- 默认值为 /tmp 中的 Unix 域套接字。在没有 Unix 域套接字的机器上,默认值为连接到本地主机。 -
:port
- 默认值为 5432。 -
:username
- 默认值为运行应用程序的用户的操作系统名称。 -
:password
- 如果服务器需要密码身份验证,则使用此密码。 -
:database
- 默认值为与用户名相同。 -
:schema_search_path
- 连接的可选模式搜索路径,以逗号分隔的模式名称字符串形式给出。此选项与:schema_order
选项向后兼容。 -
:encoding
- 可选的客户端编码,在连接上使用SET client_encoding TO <encoding>
调用。 -
:min_messages
- 可选的客户端最小消息,在连接上使用SET client_min_messages TO <min_messages>
调用。 -
:variables
- 可选的附加参数哈希,将在连接上的SET SESSION key = val
调用中使用。 -
:insert_returning
- 可选的布尔值,用于控制INSERT
语句是否使用RETURNING
,默认值为 true。
任何其他选项都用作 libpq 的连接参数。有关参数列表,请参阅 www.postgresql.org/docs/current/static/libpq-connect.html。
此外,libpq 的默认连接参数可以根据环境变量设置。请参阅 www.postgresql.org/docs/current/static/libpq-envars.html。
- A
- C
- D
- E
- I
- M
- N
- R
- S
-
- session_auth=,
- set_standard_conforming_strings,
- supports_advisory_locks?,
- supports_bulk_alter?,
- supports_check_constraints?,
- supports_comments?,
- supports_common_table_expressions?,
- supports_datetime_with_precision?,
- supports_ddl_transactions?,
- supports_deferrable_constraints?,
- supports_exclusion_constraints?,
- supports_explain?,
- supports_expression_index?,
- supports_extensions?,
- supports_foreign_keys?,
- supports_foreign_tables?,
- supports_index_include?,
- supports_index_sort_order?,
- supports_insert_conflict_target?,
- supports_insert_on_conflict?,
- supports_insert_on_duplicate_skip?,
- supports_insert_on_duplicate_update?,
- supports_insert_returning?,
- supports_json?,
- supports_lazy_transactions?,
- supports_materialized_views?,
- supports_nulls_not_distinct?,
- supports_optimizer_hints?,
- supports_partial_index?,
- supports_partitioned_indexes?,
- supports_pgcrypto_uuid?,
- supports_restart_db_transaction?,
- supports_savepoints?,
- supports_transaction_isolation?,
- supports_unique_constraints?,
- supports_validate_constraints?,
- supports_views?,
- supports_virtual_columns?
- U
- ActiveRecord::ConnectionAdapters::PostgreSQL::Quoting
- ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements
- ActiveRecord::ConnectionAdapters::PostgreSQL::DatabaseStatements
常量
ADAPTER_NAME | = | "PostgreSQL" |
DEADLOCK_DETECTED | = | "40P01" |
DUPLICATE_DATABASE | = | "42P04" |
FOREIGN_KEY_VIOLATION | = | "23503" |
LOCK_NOT_AVAILABLE | = | "55P03" |
NATIVE_DATABASE_TYPES | = | { primary_key: "bigserial primary key", string: { name: "character varying" }, text: { name: "text" }, integer: { name: "integer", limit: 4 }, bigint: { name: "bigint" }, float: { name: "float" }, decimal: { name: "decimal" }, datetime: {}, # 根据 datetime_type 动态设置 timestamp: { name: "timestamp" }, timestamptz: { name: "timestamptz" }, 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" }, enum: {} # 特殊类型 https://postgresql.ac.cn/docs/current/datatype-enum.html } |
NOT_NULL_VIOLATION | = | "23502" |
NUMERIC_VALUE_OUT_OF_RANGE | = | "22003" |
QUERY_CANCELED | = | "57014" |
SERIALIZATION_FAILURE | = | "40001" |
UNIQUE_VIOLATION | = | "23505" |
VALUE_LIMIT_VIOLATION | = | "22001" |
请参阅 www.postgresql.org/docs/current/static/errcodes-appendix.html |
类公共方法
create_unlogged_tables 链接
PostgreSQL 允许创建“非日志”表,这些表不会在 PostgreSQL 预写日志中记录数据。这可以使表更快,但如果数据库崩溃,会大大增加数据丢失的风险。因此,在生产环境中不应使用此功能。如果您希望在测试环境中创建的所有表都为非日志,您可以在 test.rb 文件中添加以下内容
ActiveSupport.on_load(:active_record_postgresqladapter) do
self.create_unlogged_tables = true
end
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 105 class_attribute :create_unlogged_tables, default: false
datetime_type 链接
PostgreSQL 支持多种用于 DateTimes 的类型。默认情况下,如果您在迁移中使用 datetime
,Rails 将将其转换为 PostgreSQL 的“timestamp without time zone”。在初始化程序中更改此设置以使用另一个 NATIVE_DATABASE_TYPES
。例如,将 DateTimes 存储为“timestamp with time zone”
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_type = :timestamptz
或者,如果您要添加自定义类型
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:my_custom_type] = { name: "my_custom_type_name" }
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_type = :my_custom_type
如果您使用 :ruby
作为您的 config.active_record.schema_format
并且更改了此设置,则应立即运行 bin/rails db:migrate
以更新 schema.rb 中的类型。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 123 class_attribute :datetime_type, default: :timestamp
dbconsole(config, options = {}) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 73 def dbconsole(config, options = {}) pg_config = config.configuration_hash ENV["PGUSER"] = pg_config[:username] if pg_config[:username] ENV["PGHOST"] = pg_config[:host] if pg_config[:host] ENV["PGPORT"] = pg_config[:port].to_s if pg_config[:port] ENV["PGPASSWORD"] = pg_config[:password].to_s if pg_config[:password] && options[:include_password] ENV["PGSSLMODE"] = pg_config[:sslmode].to_s if pg_config[:sslmode] ENV["PGSSLCERT"] = pg_config[:sslcert].to_s if pg_config[:sslcert] ENV["PGSSLKEY"] = pg_config[:sslkey].to_s if pg_config[:sslkey] ENV["PGSSLROOTCERT"] = pg_config[:sslrootcert].to_s if pg_config[:sslrootcert] if pg_config[:variables] ENV["PGOPTIONS"] = pg_config[:variables].filter_map do |name, value| "-c #{name}=#{value.to_s.gsub(/[ \\]/, '\\\\\0')}" unless value == ":default" || value == :default end.join(" ") end find_cmd_and_exec(ActiveRecord.database_cli[:postgresql], config.database) end
decode_dates 链接
切换日期列的自动解码。
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.select_value("select '2024-01-01'::date").class #=> String
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.decode_dates = true
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.select_value("select '2024-01-01'::date").class #=> Date
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 132 class_attribute :decode_dates, default: false
new(...) 链接
初始化并连接 PostgreSQL 适配器。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 320 def initialize(...) super conn_params = @config.compact # Map ActiveRecords param names to PGs. conn_params[:user] = conn_params.delete(:username) if conn_params[:username] conn_params[:dbname] = conn_params.delete(:database) if conn_params[:database] # Forward only valid config params to PG::Connection.connect. valid_conn_param_keys = PG::Connection.conndefaults_hash.keys + [:requiressl] conn_params.slice!(*valid_conn_param_keys) @connection_parameters = conn_params @max_identifier_length = nil @type_map = nil @raw_connection = nil @notice_receiver_sql_warnings = [] @use_insert_returning = @config.key?(:insert_returning) ? self.class.type_cast_config_to_boolean(@config[:insert_returning]) : true end
new_client(conn_params) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 57 def new_client(conn_params) PG.connect(**conn_params) rescue ::PG::Error => error if conn_params && conn_params[:dbname] == "postgres" raise ActiveRecord::ConnectionNotEstablished, error.message elsif conn_params && conn_params[:dbname] && error.message.include?(conn_params[:dbname]) raise ActiveRecord::NoDatabaseError.db_error(conn_params[:dbname]) elsif conn_params && conn_params[:user] && error.message.include?(conn_params[:user]) raise ActiveRecord::DatabaseConnectionError.username_error(conn_params[:user]) elsif conn_params && conn_params[:host] && error.message.include?(conn_params[:host]) raise ActiveRecord::DatabaseConnectionError.hostname_error(conn_params[:host]) else raise ActiveRecord::ConnectionNotEstablished, error.message end end
实例公共方法
active?() 链接
此连接是否存活并准备执行查询?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 348 def active? @lock.synchronize do return false unless @raw_connection @raw_connection.query ";" end true rescue PG::Error false end
add_enum_value(type_name, value, **options) 链接
将枚举值添加到现有的枚举类型。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 587 def add_enum_value(type_name, value, **options) before, after = options.values_at(:before, :after) sql = +"ALTER TYPE #{quote_table_name(type_name)} ADD VALUE" sql << " IF NOT EXISTS" if options[:if_not_exists] sql << " #{quote(value)}" if before && after raise ArgumentError, "Cannot have both :before and :after at the same time" elsif before sql << " BEFORE #{quote(before)}" elsif after sql << " AFTER #{quote(after)}" end execute(sql).tap { reload_type_map } end
connected?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 343 def connected? !(@raw_connection.nil? || @raw_connection.finished?) end
create_enum(name, values, **options) 链接
给定名称和值数组,创建枚举类型。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 540 def create_enum(name, values, **options) sql_values = values.map { |s| quote(s) }.join(", ") scope = quoted_scope(name) query = <<~SQL DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_type t JOIN pg_namespace n ON t.typnamespace = n.oid WHERE t.typname = #{scope[:name]} AND n.nspname = #{scope[:schema]} ) THEN CREATE TYPE #{quote_table_name(name)} AS ENUM (#{sql_values}); END IF; END $$; SQL internal_exec_query(query).tap { reload_type_map } end
disable_extension(name, force: false) 链接
从数据库中删除扩展。
:force
-
设置为
:cascade
以同时删除依赖项。默认为 false。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 485 def disable_extension(name, force: false) _schema, name = name.to_s.split(".").values_at(-2, -1) internal_exec_query("DROP EXTENSION IF EXISTS \"#{name}\"#{' CASCADE' if force == :cascade}").tap { reload_type_map } end
disconnect!() 链接
如果已连接,则断开与数据库的连接。否则,此方法不执行任何操作。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 385 def disconnect! @lock.synchronize do super @raw_connection&.close rescue nil @raw_connection = nil end end
drop_enum(name, values = nil, **options) 链接
删除枚举类型。
如果提供了 if_exists: true
选项,则仅在枚举存在时才会删除它。否则,如果枚举不存在,则会引发错误。
如果存在 values
参数,将被忽略。它在迁移的 change
方法中提供可能很有用,以便它可以被还原。在这种情况下,values
将由 create_enum
使用。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 570 def drop_enum(name, values = nil, **options) query = <<~SQL DROP TYPE#{' IF EXISTS' if options[:if_exists]} #{quote_table_name(name)}; SQL internal_exec_query(query).tap { reload_type_map } end
enable_extension(name, **) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 472 def enable_extension(name, **) schema, name = name.to_s.split(".").values_at(-2, -1) sql = +"CREATE EXTENSION IF NOT EXISTS \"#{name}\"" sql << " SCHEMA #{schema}" if schema internal_exec_query(sql).tap { reload_type_map } end
enum_types() 链接
返回定义的枚举类型列表及其值。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 517 def enum_types query = <<~SQL SELECT type.typname AS name, type.OID AS oid, n.nspname AS schema, string_agg(enum.enumlabel, ',' ORDER BY enum.enumsortorder) AS value FROM pg_enum AS enum JOIN pg_type AS type ON (type.oid = enum.enumtypid) JOIN pg_namespace n ON type.typnamespace = n.oid WHERE n.nspname = ANY (current_schemas(false)) GROUP BY type.OID, n.nspname, type.typname; SQL internal_exec_query(query, "SCHEMA", allow_retry: true, materialize_transactions: false).cast_values.each_with_object({}) do |row, memo| name, schema = row[0], row[2] schema = nil if schema == current_schema full_name = [schema, name].compact.join(".") memo[full_name] = row.last end.to_a end
extension_available?(name) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 492 def extension_available?(name) query_value("SELECT true FROM pg_available_extensions WHERE name = #{quote(name)}", "SCHEMA") end
extension_enabled?(name) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 496 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 500 def extensions query = <<~SQL SELECT pg_extension.extname, n.nspname AS schema FROM pg_extension JOIN pg_namespace n ON pg_extension.extnamespace = n.oid SQL internal_exec_query(query, "SCHEMA", allow_retry: true, materialize_transactions: false).cast_values.map do |row| name, schema = row[0], row[1] schema = nil if schema == current_schema [schema, name].compact.join(".") end end
index_algorithms() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 291 def index_algorithms { concurrently: "CONCURRENTLY" } end
max_identifier_length() 链接
返回 PostgreSQL 配置的支持的标识符长度。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 619 def max_identifier_length @max_identifier_length ||= query_value("SHOW max_identifier_length", "SCHEMA").to_i end
rename_enum(name, new_name = nil, **options) 链接
将现有枚举类型重命名为其他名称。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 578 def rename_enum(name, new_name = nil, **options) new_name ||= options.fetch(:to) do raise ArgumentError, "rename_enum requires two from/to name positional arguments." end exec_query("ALTER TYPE #{quote_table_name(name)} RENAME TO #{quote_table_name(new_name)}").tap { reload_type_map } end
rename_enum_value(type_name, **options) 链接
重命名现有枚举类型上的枚举值。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 605 def rename_enum_value(type_name, **options) unless database_version >= 10_00_00 # >= 10.0 raise ArgumentError, "Renaming enum values is only supported in PostgreSQL 10 or later" end from = options.fetch(:from) { raise ArgumentError, ":from is required" } to = options.fetch(:to) { raise ArgumentError, ":to is required" } execute("ALTER TYPE #{quote_table_name(type_name)} RENAME VALUE #{quote(from)} TO #{quote(to)}").tap { reload_type_map } end
reset!() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 370 def reset! @lock.synchronize do return connect! unless @raw_connection unless @raw_connection.transaction_status == ::PG::PQTRANS_IDLE @raw_connection.query "ROLLBACK" end @raw_connection.query "DISCARD ALL" super end end
session_auth=(user) 链接
为本会话设置授权用户。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 624 def session_auth=(user) clear_cache! internal_execute("SET SESSION AUTHORIZATION #{user}", nil, materialize_transactions: true) end
set_standard_conforming_strings() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 411 def set_standard_conforming_strings internal_execute("SET standard_conforming_strings = on", "SCHEMA") end
supports_advisory_locks?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 419 def supports_advisory_locks? true end
supports_bulk_alter?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 188 def supports_bulk_alter? true end
supports_check_constraints?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 220 def supports_check_constraints? true end
supports_comments?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 252 def supports_comments? true end
supports_common_table_expressions?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 450 def supports_common_table_expressions? true end
supports_datetime_with_precision?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 244 def supports_datetime_with_precision? true end
supports_ddl_transactions?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 415 def supports_ddl_transactions? true end
supports_deferrable_constraints?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 236 def supports_deferrable_constraints? true end
supports_exclusion_constraints?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 224 def supports_exclusion_constraints? true end
supports_explain?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 423 def supports_explain? true end
supports_expression_index?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 208 def supports_expression_index? true end
supports_extensions?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 427 def supports_extensions? true end
supports_foreign_keys?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 216 def supports_foreign_keys? true end
supports_foreign_tables?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 435 def supports_foreign_tables? true end
supports_index_include?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 204 def supports_index_include? database_version >= 11_00_00 # >= 11.0 end
supports_index_sort_order?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 192 def supports_index_sort_order? true end
supports_insert_on_conflict?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 268 def supports_insert_on_conflict? database_version >= 9_05_00 # >= 9.5 end
supports_insert_returning?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 264 def supports_insert_returning? true end
supports_json?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 248 def supports_json? true end
supports_lazy_transactions?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 454 def supports_lazy_transactions? true end
supports_materialized_views?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 431 def supports_materialized_views? true end
supports_nulls_not_distinct?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 283 def supports_nulls_not_distinct? database_version >= 15_00_00 # >= 15.0 end
supports_optimizer_hints?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 443 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?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 200 def supports_partial_index? true end
supports_partitioned_indexes?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 196 def supports_partitioned_indexes? database_version >= 11_00_00 # >= 11.0 end
supports_pgcrypto_uuid?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 439 def supports_pgcrypto_uuid? database_version >= 9_04_00 # >= 9.4 end
supports_restart_db_transaction?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 260 def supports_restart_db_transaction? database_version >= 12_00_00 # >= 12.0 end
supports_savepoints?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 256 def supports_savepoints? true end
supports_transaction_isolation?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 212 def supports_transaction_isolation? true end
supports_unique_constraints?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 228 def supports_unique_constraints? true end
supports_validate_constraints?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 232 def supports_validate_constraints? true end
supports_views?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 240 def supports_views? true end
supports_virtual_columns?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 275 def supports_virtual_columns? database_version >= 12_00_00 # >= 12.0 end
use_insert_returning?() 链接
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 629 def use_insert_returning? @use_insert_returning end