Rails5 如何清除或删除生产postgres数据库

Rails 5 how to clear or delete production postgres database

我正在尝试删除生产数据库,以便重新开始。当我从 rails 4 升级到 rails 5 时,它现在正在保护生产数据库不被意外删除。当我 运行 rake db:reset.

时显示以下错误消息
/app# rake db:reset
  ActiveRecord::SchemaMigration Load (1.8ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (1.6ms)  SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" =   [["key", :environment]]
  ActiveRecord::SchemaMigration Load (0.2ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (0.3ms)  SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" =   [["key", :environment]]
  ActiveRecord::SchemaMigration Load (0.3ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (0.2ms)  SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" =   [["key", :environment]]
rake aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your 'production' database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
/usr/local/bundle/gems/activerecord-5.0.0.1/lib/active_record/tasks/database_tasks.rb:51:in `check_protected_environments!'
/usr/local/bundle/gems/activerecord-5.0.0.1/lib/active_record/railties/databases.rake:11:in `block (2 levels) in <top (required)>'
/usr/local/bundle/gems/rake-11.3.0/exe/rake:27:in `<top (required)>'
Tasks: TOP => db:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)

它说我在命令中添加环境变量 DISABLE_DATABASE_ENVIRONMENT_CHECK=1 应该可以,但没有用。我 运行 它什么也没做。

<606723-x9dh4:/app# DISABLE_DATABASE_ENVIRONMENT_CHECK=1 rake db:reset       
  ActiveRecord::SchemaMigration Load (1.6ms)  SELECT "schema_migrations".* FROM "schema_migrations"

有人知道我做错了什么吗?感谢您的帮助!

更新:

我的服务器是用kubernetes部署的。我猜我无法重置数据库,因为服务器 运行ning.

下面能给个镜头吗?

RAILS_ENV=production rake db:drop
RAILS_ENV=production rake db:create

这是一种旧方法,但我以前就是这样将数据库重置为原始级别的。

试试这个对我有用:

RAILS_ENV=production rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 

一行。

它不起作用,但你应该运行这样的命令

 bundle exec rake RAILS_ENV=production db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1

当您删除 table 时,您必须创建它 back.So 如果您无权 createdb.Here 您的答案 Postgres permission denied to create database on rake db:create:all

当您键入 psql 时,您可以通过键入 \q 从那里退出。

正如我所说,这不是答案,但我希望这会在您搜索时节省您的时间。因为我现在就在那里。 GL&HF

好吧,尽管这是旧的 post,但为了将来参考,您可以做

    rake db:migrate VERSION=0

然后

    rake db:migrate

来自 Heroku 关于 Running Rake commands 的文档:

The db:reset task is not supported. Heroku apps do not have permission to drop and create databases. Use the heroku pg:reset command instead.

因此,与其尝试 railsrake db:reset,不如试试这个:

heroku pg:reset

将生产数据库转储到本地时也会发生这种情况。如果你想在本地机器上删除它,你需要设置bin/rails db:environment:set RAILS_ENV=development,然后rake db:drop

我知道,这可能有点晚了,但是,如果它无法以标准 rails 方式删除,您可以随时使用 psql 之类的 psql --u your_user

然后输入密码 输入 \l 列出所有数据库。 在我的例子中,psql 拒绝删除单个 table,我创建了额外的数据库,比如 'testdb',输入 \c testdb 与它建立连接,然后输入 drop database 'olddb_name';,然后 create database 'olddb_name'; 完成了!

我在生产环境中使用 Rails 5.2 应用程序和 PostgreSQL 数据库时遇到了同样的问题。

我是这样解决的:

首先,停止使用数据库的每个会话以避免 database is being accessed by other users 错误。

sudo kill -9 `ps -u postgres -o pid=`

此外,注销 PGAdmin 客户端上的每个数据库连接(如果有的话)。

启动 PostgreSQL 服务器,因为上面的 kill 操作停止了 PostgreSQL 服务器。

sudo systemctl start postgresql

在生产环境中删除数据库并附加生产参数。

rails db:drop RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1

在附加生产参数的生产环境中创建数据库。

rails db:create RAILS_ENV=production

就这些了。

希望对您有所帮助