ruby-on-rails PG::重复表格:错误:关系“posts”已存在

rm5edbpk  于 2023-02-26  发布在  Ruby
关注(0)|答案(8)|浏览(244)

When I run rake db:migrate I get following output:
== 20141219011612 CreatePost: migrating ======================================= -- create_table("posts") rake aborted! StandardError: An error has occurred, this and all later migrations canceled: == 20141219011612 Postposts: migrating ======================================= -- create_table("posts") rake aborted! StandardError: An error has occurred, this and all later migrations canceled:
PG::DuplicateTable: ERROR: relation "posts" already exists : CREATE TABLE "posts" ("id" serial primary key, "post" text, "release_date" timestamp, "created_at" timestamp, "updated_at" timestamp) /home/admin/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/connection_adapters/postgresql/database_statements.rb:128:in async_exec' /home/admin/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/connection_adapters/postgresql/database_statements.rb:128:in block in execute' /home/admin/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/connection_adapters/abstract_adapter.rb:373:in block in log' /home/admin/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.8/lib/active_support/notifications/instrumenter.rb:20:in instrument' /home/admin/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/connection_adapters/abstract_adapter.rb:367:in log' /home/admin/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/connection_adapters/postgresql/database_statements.rb:127:in execute' /home/admin/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/connection_adapters/abstract/schema_statements.rb:205:in create_table' /home/admin/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/migration.rb:649:in block in method_missing' /home/admin/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/migration.rb:621:in block in say_with_time' /home/admin/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/migration.rb:621:in say_with_time' /home/admin/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/migration.rb:641:in method_missing' ...migrate' /home/admin/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/railties/databases.rake:34:in` block (2 levels) in <top (required)>' Tasks: TOP => db:migrate (See full trace by running task with --trace)
I don't understund how this is possible, bescause In scheme file I don't have post table.

q1qsirdb

q1qsirdb1#

不知何故,您的数据库中出现了一个名为“posts”的表。可能是您在没有回滚的情况下删除了以前的迁移?如果您不关心数据库中的任何数据,可以运行

rake db:drop db:create db:migrate

使开发数据库与当前迁移保持一致。
如果您不想丢失其他表中的数据,请打开数据库控制台并手动删除posts表:

$ rails db

# drop table posts;

然后再次运行db:migrate

watbbzwu

watbbzwu2#

对于那些没有得到你的答案

在我的例子中,我一个月前一直在处理一个特性,这个字段恰好是在那个时候创建的。现在,当我尝试运行迁移rake db: migrate时,我看到了这个错误。我知道并确信这不是由于任何错误造成的。
我还尝试回滚该特定迁移

rake db:migrate:down VERSION=20200526083835

但由于某种原因,它什么也没做,为了进一步移动,我不得不注解掉该迁移文件中的up方法。

# frozen_string_literal: true

class AddColToAccounts < ActiveRecord::Migration
  def up
    # execute 'commit;'
    #
    # add_column :accounts, :col, :boolean,
    #            null: false,
    #            default: false
    

  end

  def down
    execute 'commit;'

    remove_column :accounts, :col
    
  end
end

现在,我可以运行迁移了。
最后,我撤销了评论,我完成了。
谢谢

5lhxktic

5lhxktic3#

检查您的db/schema.rb
除了db/migrate/[timestamp]your_migration中的迁移之外,您很可能还在那里创建了相同的表
如果db/migrate/[timestamp]your_migration与模式中找到的db/migrate重复,并且应该可以正常工作,则可以删除该db/migrate/[timestamp]your_migration。

lsmepo6l

lsmepo6l4#

如果这对其他人有帮助,我意识到我一直在使用一个schema.rb文件,该文件是在使用MySQL时生成的,在转换到Postgres后,我完全忘记了在使用rake db:schema:load之前需要运行rake db:migrate

dsf9zpds

dsf9zpds5#

我发现的一个黑客是在迁移文件上创建表之前放置pry。

require 'pry'
binding.pry

create_table :your_table_name

并删除该表:

drop_table :your_table_name

之后,您可以删除drop_table线,它将正常工作!

yxyvkwin

yxyvkwin6#

终止当前的postgres进程:

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

再次启动postgres:

brew services start postgres

删除、创建和迁移表:

rails db:drop db:create db:migrate
w8ntj3qf

w8ntj3qf7#

**此操作将删除您的数据,请勿在生产环境中执行此操作。**如果您有孤立迁移********** NO FILE **********,请首先通过执行以下db命令删除该孤立迁移:

delete from schema_migrations where version='<MIGRATION_ID>';

那么

rails db:schema:load

那么

rails db:migrate

这对我很有效。

332nm8kg

332nm8kg8#

我遇到了同样的问题,唯一有效的方法是从rails控制台like so中删除该表:

ActiveRecord::Migration.drop_table(:products)

相关问题