无法通过ecto在redshift中创建模式迁移表

问题描述 投票:0回答:1

我有一个数据库进行了红移的项目,并且在我的phoenix项目中使用了Postgrex适配器,在本地使用了postgresql,并且一切正常,但是当我部署并尝试运行迁移时,出现了此错误。

15:39:27.201 [error] Could not create schema migrations table. This error usually happens due to the following:

  * The database does not exist
  * The "schema_migrations" table, which Ecto uses for managing
    migrations, was defined by another library
  * There is a deadlock while migrating (such as using concurrent
    indexes with a migration_lock)

To fix the first issue, run "mix ecto.create".

To address the second, you can run "mix ecto.drop" followed by
"mix ecto.create". Alternatively you may configure Ecto to use
another table for managing migrations:

    config :my_service, MyService.Repo,
      migration_source: "some_other_table_for_schema_migrations"

The full error report is shown below.

▸  Given the following expression: Elixir.MyService.StartupTasks.init()
▸  The remote call failed with:
▸  ** (exit) %Postgrex.Error{connection_id: 5598, message: nil, postgres: %{code: :feature_not_supported, file: "/home/ec2-user/padb/src/pg/src/backend/commands/tablecmds.c", line: "3690", message: "timestamp or timestamp with time zone column do not support precision.", pg_code: "0A000", routine: "xen_type_size_from_attr", severity: "ERROR"}, query: nil}
▸      (ecto_sql) lib/ecto/adapters/sql.ex:629: Ecto.Adapters.SQL.raise_sql_call_error/1
▸      (elixir) lib/enum.ex:1336: Enum."-map/2-lists^map/1-0-"/2
▸      (ecto_sql) lib/ecto/adapters/sql.ex:716: Ecto.Adapters.SQL.execute_ddl/4
▸      (ecto_sql) lib/ecto/migrator.ex:633: Ecto.Migrator.verbose_schema_migration/3
▸      (ecto_sql) lib/ecto/migrator.ex:477: Ecto.Migrator.lock_for_migrations/4
▸      (ecto_sql) lib/ecto/migrator.ex:401: Ecto.Migrator.run/4
▸      (my_service) lib/my_service/startup_tasks.ex:11: MyService.StartupTasks.migrate/0
▸      (stdlib) erl_eval.erl:680: :erl_eval.do_apply/6

似乎redshift不支持postgres支持的某些数据类型,所以有没有更好的方法或者我可以用另一个时间戳创建自己的模式迁移表?

amazon-redshift phoenix-framework ecto phoenix
1个回答
0
投票
由于与postgres数据库相比,工作原理有所不同,因此驱动程序无法产生局限性,here是ecto适配器的文档。

在文档中注明:

我们强烈建议您阅读AWS的Designing Tables部分Redshift文档。

如果要继续在本地使用postgres,则需要创建2个单独的存储库,并分别创建迁移。 Here是可用于迁移单独存储库的命令。

但是,我建议获取redshift的dev实例并将其用于开发,因为使用诸如redshift之类的数据库的方法不同,您很容易犯错。

© www.soinside.com 2019 - 2024. All rights reserved.