亚马逊云科技近日宣布,Aurora DSQL 现在已经支持外键约束,允许应用程序直接在数据库中强制执行参照完整性,包括 CASCADE、SET NULL 及其他参照操作。这一新增功能弥补了用户长期以来明确指出阻碍他们采用的缺失环节。
Aurora DSQL 是一款无服务器、分布式且与 PostgreSQL 兼容的 SQL 数据库,专为高可用、高可扩展的应用程序而设计。根据文档,Aurora DSQL 通过事务期间的快照验证和提交时的冲突检测来强制执行参照完整性。该服务无需锁定表,即可基于一致性事务快照校验外键关系,支持并发操作;在提交时使用隐式 KEY SHARE 检查来检测存在冲突的更改;任何可能违反约束的事务都将因序列化错误而被拒绝。
应用程序应该实现重试逻辑,因为并发冲突会导致事务失败,而非进入等待状态。对于被频繁引用的行,亚马逊云科技建议避免频繁地更改键列;相反,应保持被引用的键稳定,并将变化的值移至非键列,以减少事务冲突。
亚马逊云科技副总裁兼杰出工程师 Marc Brooker 强调,Aurora DSQL 利用 Adjudicator 和 PostgreSQL 的 KEY SHARE 机制,在提交时检测相关行中的变更,同时不会阻塞并发读取:
无阻塞,非 FKC 读取的扩展性不受影响,FKC 读取器绝不会导致其他读取器中断。而且,在工作负载分布均衡的情况下,FKC 具有出色的扩展性。
在 LinkedIn 上,荷兰国家铁路公司(Nederlandse Spoorwegen)首席工程师、AWS News Feed 创建者 Luc van Donkersgoed 评论道:
他们做到了!Aurora DSQL 现在支持外键约束了。外键约束的缺失曾是 DSQL 与“普通” Postgres 之间最大的差距,阻碍了许多迁移工作。这一改动使得 DSQL 在现有系统环境中变得更加可行。
在“亚马逊开发 DSQL 是浪费时间”的讨论帖中,人们将缺乏外键约束列为阻碍这种与 PostgreSQL 兼容的分布式数据库被广泛采用的主要障碍之一。亚马逊云科技高级首席工程师 Marc Bowes 当时承认:
没错,外键功能即将推出。我们听到了大家的呼声。
当该服务在 re:Invent 2024 大会上发布时,许多从业者指出,在发布时缺失的众多功能中,外键约束的缺失尤为突出。用户 SteveTabernacle2 写道:
那么“Postgres 兼容”这一说法就具有误导性。外键是关系型数据库管理系统(RDBMS)中至关重要的一部分。没有外键,就无法真正实现“关系型”数据。
对于这项新功能,社区的反应总体积极,不过有一位用户在 Reddit 上提出了质疑:
我知道这一功能曾被列为阻碍采用的主要因素之一,但它会大大降低运行速度。考虑到 DSQL 的架构,我不确定这到底有多好。
亚马逊云科技指出,为了维护参照完整性,对被引用或引用表执行的所有 DML 操作都会产生额外的读取操作。因此,客户在向表中添加外键约束之前,应先对工作负载进行基准测试。
外键约束并非 DSQL 近期唯一的新增功能。亚马逊云科技还新增了 CloudWatch Database Insights,用于按语句进行集群级的性能监控与故障排除。
原文链接:https://www.infoq.com/news/2026/09/aurora-dsql-foreign-keys/





