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.
因此,与其尝试 rails
或 rake 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
就这些了。
希望对您有所帮助
我正在尝试删除生产数据库,以便重新开始。当我从 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.
因此,与其尝试 rails
或 rake 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
就这些了。
希望对您有所帮助