近日,微软低代码开发平台 Power Apps 及其自动化工具 Power Automate 被曝出在处理 PostgreSQL 数据库的标识列(Identity Column)插入操作时存在严重兼容性问题。多位开发者在微软社区论坛和 GitHub Issues 中反映,使用 Power Apps 或 Power Automate 向 PostgreSQL 数据表中写入记录时,如果目标表包含自增标识列(GENERATED ALWAYS AS IDENTITY 或 GENERATED BY DEFAULT AS IDENTITY),系统会抛出“列名或提供的值无效”或“无法插入到标识列”等错误消息,导致数据写入失败。
据悉,该问题最早于 2024 年底被部分用户报告,但近期随着更多企业级应用迁移至 PostgreSQL 并使用 Power Platform 进行自动化集成,投诉数量急剧上升。受影响用户覆盖金融、制造、零售等多个行业,部分依赖低代码快速开发的业务线甚至被迫暂停数据采集流程。
问题重现:简单插入操作即触发异常
据开发者测试,问题复现条件非常基础:在 Power Apps 中创建一个连接至 PostgreSQL 数据源的窗体,该数据表包含一个定义为 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY 的列。当用户尝试通过表单添加新记录时,Power Apps 会试图将空值或默认值传递给该标识列,而 PostgreSQL 的 GENERATED ALWAYS 模式禁止应用程序手动写入该列,因此数据库拒绝接受请求,返回错误。
同样,在 Power Automate 中使用“插入行”操作时,如果未在请求体中明确排除标识列,自动化流也会因类似原因挂起。有用户尝试在 Power Automate 的输入中将标识列字段值设为“无”或“null”,但工具仍会生成一条 INSERT 语句,包含该列的占位符,导致执行失败。
根源分析:低代码平台与数据库语义的错位
技术分析指出,导致此问题的根本在于 Power Apps 和 Power Automate 在生成 SQL 语句时,默认会遍历数据表的所有列并尝试为每一列提供值,而非按数据库定义尊重标识列的自增特性。对于 PostgreSQL 的 GENERATED BY DEFAULT AS IDENTITY 模式(允许用户在需要时覆盖自增值),当用户未提供值时,平台有时又错误地传递了一个硬编码的 0 或空字符串,同样引发冲突。
相比之下,Microsoft SQL Server 的 IDENTITY 列和 MySQL 的 AUTO_INCREMENT 列在 Power Platform 中并未出现普遍性问题,这表明连接器在 PostgreSQL 端的适配存在疏漏。部分社区开发者推测,微软可能未针对 PostgreSQL 标识列的 SQL 标准语法进行充分测试,导致其行为与主流云数据库(如 Azure SQL)不一致。
影响评估:业务连续性受威胁
该问题给采用 Power Platform + PostgreSQL 架构的企业带来直接冲击。某跨国制造企业的 IT 负责人表示,其工厂的质检数据采集应用完全基于 Power Apps 和 PostgreSQL 构建,质检表单中每一个记录的主键均为自增标识列,自问题暴露后,整个系统已停摆近两周,技术团队被迫紧急开发基于 REST API 的替代方案。
更令人担忧的是,Power Platform 的官方文档中并未明确注明 PostgreSQL 标识列的使用限制,许多用户在投入数月开发后才发现该致命缺陷。“我们在微软的 Learn 网站上找不到任何警告或说明,这让人感觉平台对 PostgreSQL 的支持停留在实验阶段。”一位用户在论坛中写道。
微软回应:已确定为已知问题,修复时间待定
截至发稿,微软已在 Power Platform 官方支持页面上将本问题列为已知问题(Known Issue),编号为 #PP-447922。微软承认“Power Apps 和 Power Automate 与 PostgreSQL 连接器在处理具有标识列的表时存在行为不一致”,但尚未提供具体的修复时间表。
目前,微软推荐的临时解决方案包括:
- 修改表设计:将标识列的定义从
GENERATED ALWAYS改为GENERATED BY DEFAULT,并在 Power Apps 中为标识列提供唯一值(如通过 UUID 或序列),但此方法在已生产环境中变更成本极高。 - 使用视图绕过:创建一个排除标识列的数据库视图,让 Power Apps 只操作非标识列字段,但这样会失去主键直接返回能力。
- 升级到高级连接器:尝试使用 Azure API Management 或自定义连接器,通过 REST API 手动构造 INSERT 语句,但这违背了低代码平台降低开发门槛的初衷。
行业观察:低代码生态的数据库兼容性短板
此次事件再次暴露了低代码平台在异构数据库支持上的短板。Power Platform 虽然在 Azure SQL、SharePoint、Excel 等微软生态内表现优异,但在开源数据库如 PostgreSQL、MySQL 上的适配往往滞后。随着 PostgreSQL 在企业级市场的份额持续增长(据 DB-Engines 2025 年 3 月排名,PostgreSQL 已跃居第四),微软需要更快地弥合这种落差。
有社区用户建议,在官方修复完成前,PostgreSQL 用户可考虑使用“计算列”或“序列+触发器”替代标识列功能,同时保持对 Power Platform 的兼容性。但长期来看,微软应尽快发布连接器更新,使 Power Apps 和 Power Automate 能够正确识别并忽略标识列,或者通过 RETURNING 子句获取生成的主键。
我们将持续关注此问题的进展,并在微软发布修复补丁后第一时间向读者报道。在此之前,建议涉及 PostgreSQL 标识列的业务场景紧急评估风险,并做好回退方案。