[英]Way to Get Rails to Log *All* Of Postgres Internals?
有沒有一種方法可以將SQL日志記錄設置為在Rails中超級詳細?
我對此表的primary_key字段進行了唯一性索引檢查,但似乎無法正常工作。 我想看看postgres在幕后實際上在做什么。 換句話說,我看到了INSERT語句,但是我也想看到它在插入之前執行的檢查的列表。
irb(main):006:0> SampleTable.create(primary_key: 'hi', archived_at: nil)
(0.2ms) BEGIN
SampleTable Create (0.3ms) INSERT INTO "sample_tables" ("primary_key", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["primary_key", "hi"], ["created_at", "2019-04-23 12:51:00.295952"], ["updated_at", "2019-04-23 12:51:00.295952"]]
(6.0ms) COMMIT
=> #<SampleTable id: 2, primary_key: "hi", archived_at: nil, created_at: "2019-04-23 12:51:00", updated_at: "2019-04-23 12:51:00">
如果您在談論唯一索引-檢查是postgres的內部功能,則rails會向它提供一個sql查詢,並且不知道它是如何處理的。
但是請注意, validates :some_field, uniqueness: true
是非原子性的,容易出現競爭狀況,因為在rails的檢查和實際插入之間可能會發生另一個插入:
此驗證應由數據庫上的唯一索引支持,以便在出現競爭情況時,postgres將返回錯誤並拋出ActiveRecord::RecordNotUnique
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.