【问题标题】:Amazon RDS Postgresql not assigning primary keyAmazon RDS Postgresql 未分配主键
【发布时间】:2017-05-18 21:34:57
【问题描述】:

我使用 Amazon 的数据库迁移工具从 EC2 上的 Postgresql 数据库迁移到 RDS 实例。

我的应用程序在 Python 3.4 上使用 sqlalchemy。自迁移以来,尝试向数据库添加新数据会导致错误sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) null value in column "id" violates not-null constraint

我在 pg_admin 中检查了数据库,它显示 ALTER TABLE public.users ADD COSTRAINT users_pkey PRIMARY KEY(id); 作为表上的 users_pkey 约束。

应用程序能够正确读取数据和修改现有数据。

【问题讨论】:

  • 这不是自动分配它所需要的。有默认值吗?
  • 否,它以前在没有默认值的情况下工作。列是id = Column(Integer, primary_key=True, index=True) 索引选项是多余的,但是指定列的代码没有改变,并且之前分配了主键
  • 你能检查“旧”数据库是否有默认值吗?根据我的经验,PostgreSQL 在 AWS RDS 环境中与在本地或在 EC2 上完全相同。我们使用脚本在本地和 RDS 上创建数据库,它们“正常工作”。我觉得缺少其他东西。
  • 不错的建议......很多东西都不见了。旧的 EC2 数据库有 ALTER TABLE public.users ADD COLUMN id integer; ALTER TABLE public.users ALTER COLUMN id SET NOT NULL; ALTER TABLE public.users ALTER COLUMN id SET DEFAULT nextval('users_id_seq'::regclass); 我也缺少我所有的外键。我需要弄清楚 DMS 出了什么问题

标签: postgresql amazon-web-services amazon-ec2 amazon-rds


【解决方案1】:

@stdunbar 为我指明了正确的方向,谢谢。

我不确定这是否是一个完整的“答案”,但我花了很长时间才找到问题的解决方案。

@studunbar 让我看看 RDS 数据库中反映的内容。文档暗示了这一点,但我没有意识到——DMS 不会复制任何序列、索引或外键关系。事后我尝试使用架构迁移工具来执行此操作,但它只是清除了我的数据。使用 before 阻止了我的迁移脚本运行。

这可能是用户错误。但我的解决方法是使用 pg_dump 和 pg_restore 进行迁移,完全绕过 DMS。我意识到这仅适用于 PostgreSQL。

公平地说,AWS 文档确实简要建议尽可能使用本机工具。

【讨论】:

  • 感谢您为我指明了正确的方向!在 PGAdmin 中,我查看了“序列”部分,可以看到新数据库中没有任何内容
  • 您如何实际迁移数据?您是否在原始数据库上使用了 pg_dump?如何将其迁移到新的?
猜你喜欢
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 2021-10-09
  • 2015-08-26
  • 2017-05-26
相关资源
最近更新 更多