2016-08-27 121 views
0

我已经在Rails应用程序上实现了ruby,我想要一个非常简单的方法来创建保存点并从此应用程序的视图加载它们。从Ruby on Rails控制器PostgresSQL转储

现在,我才实现了巨大的撤消堆栈,我想通过在轨控制方法的红宝石做一个SQL转储到一个文件中,并加载倾倒文件回数据库。我该如何执行此操作?

回答

1

最后,我工作了一个答案,如何转储和恢复,如果您使用Rails中一个PG数据库。

和pg_restore的问题是,该命令不能删除的数据库,而其他用户(如导轨服务器)访问它:

转储数据库:

cmd = "pg_dump -F c -v -U YOUR_ROLE -h localhost YOUR_DATABASE_NAME -f db/backups/hello.psql" 

恢复:

system "rake environment db:drop" 
system "rake db:create" 

system "pg_restore -C -F c -v -U YOUR_ROLE -d YOUR_DATABASE_NAME db/backups/hello.psql" 

最后得到rake environment db:drop工作,你就必须使用这个猴补丁从

# config/initializers/postgresql_database_tasks.rb 
module ActiveRecord 
    module Tasks 
    class PostgreSQLDatabaseTasks 
     def drop 
     establish_master_connection 
     connection.select_all "select pg_terminate_backend(pg_stat_activity.pid) from pg_stat_activity where datname='#{configuration['database']}' AND state='idle';" 
     connection.drop_database configuration['database'] 
     end 
    end 
    end 
end 
1

首先,我不知道你实际上是试图解决的问题是什么 - 也许像数据库事务将使意义吗?

假设他们不这样做,但是,你也需要得到数据库的完整快照,并恢复它,它要依赖于你所使用的数据库。我最熟悉Postgres,我知道存在pg_dumppg_restore命令来做这种事情。

https://coderwall.com/p/2e088w/rails-rake-tasks-to-dump-restore-postgresql-databases有实际需要的命令的演练,并执行它在一个Rake任务的形式。但是,如果您想从控制器调用它,我会将它们拖入一个新的类,控制器可以根据需要转储或恢复该类。

+0

其实我需要一个撤消堆栈,使用户可以撤消的每一个变化到数据库。但是现在这个工作太多了,我希望在实现一个节省漏洞数据库的机制的同时面对它。然后显示所有可用的版本。用户选择一个,并恢复数据库状态。我使用Postgres,我也发现了这两个命令。但是我怎么能在控制器中做到这一点,以便用户可以访问它。 – Bolic

+0

@Bolic:另一个用户在同一时间使用该应用程序会发生什么?您如何确保不重置其他用户所做的更改? – spickermann

+0

这只是一个原型。稍后会有一个工作的撤消堆栈。但是现在我正试图从一个具有给定名称的控制器中进行转储。然后用户可以选择一个,并将转储装回。 – Bolic