不幸的是,我只知道Postgresql的答案,但这似乎是你正在使用的。
简单的答案是(可能在初始值设定项中):
ActiveRecord::Base.connection.execute("SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY")
我使用它的方式是:
def with_read_only_connection(configuration)
original_connection = ActiveRecord::Base.remove_connection
ActiveRecord::Base.establish_connection(configuration)
ActiveRecord::Base.connection.execute("SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY")
yield
ensure
ActiveRecord::Base.establish_connection(original_connection)
end
下面是一个使用示例:
[5] pry(main)> with_read_only_connection(:development) do
[5] pry(main)* User.count
[5] pry(main)* end
(0.2ms) SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY
(96.6ms) SELECT COUNT(*) FROM "users"
=> 24566
[6] pry(main)> with_read_only_connection(:development) do
[6] pry(main)* User.first.update_attribute(:first_name, "Bob")
[6] pry(main)* end
(0.2ms) SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY
User Load (1.9ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1
(0.2ms) BEGIN
SQL (0.7ms) UPDATE "users" SET "first_name" = $1, "updated_at" = $2 WHERE "users"."id" = $3 [["first_name", "Bob"], ["updated_at", "2019-04-06 13:14:12.270619"], ["id", 1]]
(0.2ms) ROLLBACK
ActiveRecord::StatementInvalid: PG::ReadOnlySqlTransaction: ERROR: cannot execute UPDATE in a read-only transaction
: UPDATE "users" SET "first_name" = $1, "updated_at" = $2 WHERE "users"."id" = $3
from .../.bundle/ruby/2.2.0/gems/activerecord-4.2.11.1/lib/active_record/connection_adapters/postgresql_adapter.rb:602:in `exec_prepared'
NB-它只会调用
SET SESSION CHARACTERISTICS..
当它连接起来。