近日,多位使用微软 Power Platform 集成 PostgreSQL 数据库的开发者在技术社区反映,在通过 Power Apps 或 Power Automate 向 PostgreSQL 表插入数据时,遇到与标识列(identity column)相关的严重错误。该问题导致应用无法正常提交新记录,并可能引发数据完整性风险,引发广泛关注。

问题现象:插入操作频繁报错

据多位开发者描述,当在 Power Apps 中通过连接器向包含标识列(如 id SERIALGENERATED ALWAYS AS IDENTITY)的 PostgreSQL 表插入数据时,系统会抛出类似“重复键违反唯一约束”或“无法插入显式值到标识列”的异常。具体表现为:Power Automate 的“插入行”操作默认会尝试为所有字段赋值,包括标识列,而 PostgreSQL 在 GENERATED ALWAYS AS IDENTITY 模式下禁止用户显式插入值,从而导致操作失败。

一位来自上海的 DevOps 工程师在论坛中写道:“我使用 Power Automate 将一个 CSV 文件导入 PostgreSQL,其中主键字段使用了 GENERATED BY DEFAULT AS IDENTITY。刚开始少量数据没问题,但当表中有已有记录时,Power Automate 会尝试插入与现有 ID 重复的值,触发唯一约束错误。这让我们不得不暂停自动化流程。”

原因剖析:连接器对标识列支持不完整

经技术团队排查,问题根源在于 Power Platform 的 PostgreSQL 连接器在处理标识列时存在设计缺陷。具体而言:

  1. 自动填充标识列值:当 Power Apps 或 Power Automate 生成 INSERT 语句时,默认将表中所有字段(包括标识列)纳入语句。对于 GENERATED ALWAYS AS IDENTITY 列,PostgreSQL 要求插入时必须省略该列或使用 OVERRIDING SYSTEM VALUE 子句,而连接器未做特殊处理,导致数据库拒绝执行。

  2. 主键冲突风险:对于 GENERATED BY DEFAULT AS IDENTITY 列(允许显式插入),Power Automate 往往会传递外部系统生成的值(如从 CSV 读取的 ID),这些值可能与数据库中已有自增序列冲突,引发“重复键”错误。

  3. 缺乏显式控制选项:当前连接器的界面中,开发者无法选择是否跳过标识列,也无法指定使用数据库默认序列生成值。这让需要维护数据一致性的用户束手无策。

影响范围:涉及多条产品线

该问题波及了使用 Power Platform 与 PostgreSQL 对接的多类场景,包括:

  • 低代码应用开发:通过 Power Apps 构建的前端表单,向 PostgreSQL 提交用户注册、订单录入等包含自增主键的数据。
  • 自动化工作流:Power Automate 中的定时任务、触发器向数据库批量写入数据,如物联网设备传感器数据采集。
  • 数据迁移与集成:使用 Dataflow 或 Power Query 从其他系统同步数据至 PostgreSQL 表。

受影响用户中,约有 30% 为中小型企业,他们依赖低代码工具快速构建业务系统;另有部分教育机构及政府部门,因其使用的 SaaS 平台后端采用了 PostgreSQL。

临时解决方案与官方回应

针对上述问题,社区贡献了多种临时规避方法,以下三种被验证有效:

  1. 使用自定义 SQL 模式:在 Power Automate 中,将“插入行”操作替换为“运行 SQL 查询”操作,手动编写 INSERT 语句并省略标识列。例如:INSERT INTO users (name, email) VALUES ('John', 'john@example.com');。此方法可完全绕过连接器自动填充行为。

  2. 修改表定义:将标识列的类型从 GENERATED ALWAYS 改为 GENERATED BY DEFAULT,并配合 DEFAULT 关键字。但这需要数据库管理员权限,且可能违背原有数据模型设计。

  3. 使用存储过程:在 PostgreSQL 中创建封装插入逻辑的存储过程,然后通过 Power Automate 调用。该方法将标识列的生成逻辑完全交由数据库处理。

微软官方在技术文档中已将此问题标记为“已知限制”,并建议用户优先采用自定义 SQL 方式。截至发稿,微软技术支持团队未给出明确的修复时间表。一位微软 MVP 在私下沟通中表示,该问题与连接器底层对 ODBC 协议中标识列处理逻辑的缺失有关,预计将在未来的连接器更新中(版本号待定)得到解决。

行业观察:低代码与数据库兼容性仍需磨合

此次事件并非孤例。近年来,随着 Power Platform、OutSystems、Retool 等低代码平台的普及,开发者在享受快速构建便利的同时,也频繁遭遇与后端数据库的兼容性挑战。特别是 PostgreSQL 等开源数据库,其特有的数据类型(如标识列、枚举、JSONB)在商业化连接器中往往支持不全。

业内专家指出,低代码平台厂商应加强与数据库驱动层的适配测试,同时在文档中清晰标注已知限制。对于开发者而言,了解 SQL 底层机制、保留手动调整接口的能力,仍是保障系统稳定性的重要手段。

结语

Power Apps/Automate 与 PostgreSQL 标识列的不兼容问题,本质上是抽象层对底层差异的简化与真实需求之间的摩擦。随着更多企业将低代码工具引入关键业务,类似的技术债务需要平台方与用户共同应对。建议受影响的用户优先采用存储过程或自定义 SQL 等健壮方案,并密切关注微软官方的连接器更新日志。