2015-10-14 61 views
2

我目前有一個Rails應用程序,它使用Postgres並將其所有表格存儲在默認的public模式下。Postgres + Rails - 將所有表格從一個模式遷移到另一個模式的正確方法

我正在建立更多的多租戶體系結構,因此我想將所有這些表從public移到另一個模式foo

我用下面的Rails遷移完成此 -

class MovePublicToFoo < ActiveRecord::Migration 
    def up 
    [ 
     "ALTER SCHEMA public RENAME TO foo;", 
     "CREATE SCHEMA public;" 
    ].each { |s| ActiveRecord::Base.connection.execute(s) } 
    end 

    def down 
    [ 
     "DROP SCHEMA public;", 
     "ALTER SCHEMA foo RENAME TO public;" 
    ].each { |s| ActiveRecord::Base.connection.execute(s) } 
    end 
end 

這是Postgres的解決這個正確的方法是什麼?

我不知道什麼是危險的盲目移動默認模式,並可能對search_path什麼影響(我不太清楚這是什麼會那樣做)

謝謝!

回答

1

這種遷移的影響超出了Rails的範圍。它取決於Rails用來連接數據庫的數據庫用戶(postgres角色)以及用戶在公共模式中擁有/缺少的權限。您需要確保在重命名模式和數據庫所有權之後將保留權限。我還沒有測試過這種遷移,但我認爲它應該從Rails的應用程序數據庫用戶的角度來正常工作。如果您有其他pg用戶依賴公共架構,則可能會干擾他們的連接和權限。

重命名postgres模式,特別是默認模式,可能不應該在Rails遷移中完成,除非特定的postgres安裝專用於Rails應用程序。

儘管我的意見,Postgres的文檔不建議任何這應該是關於遷移的關注:http://www.postgresql.org/docs/9.4/static/sql-alterschema.html

+0

你說得對。我一直在嘗試它,並遇到非常微妙的問題,這讓我很頭疼。感謝您的意見。 – user2490003

+0

沒問題;祝你好運! –

相關問題