

# Aurora PostgreSQL 中的本地写入转发的限制和注意事项
<a name="aurora-postgresql-write-forwarding-limitations"></a>

 目前，Aurora PostgreSQL 中的本地写入转发有以下限制：
+  RDS 代理不支持本地写入转发。
+  在具有写入转发功能的 Aurora PostgreSQL 中不允许使用某些语句，否则可能产生过时的结果。此外，不支持用户定义的函数和用户定义的过程。因此，默认情况下，数据库集群的 `EnableLocalWriteForwarding` 设置处于关闭状态。在启用它之前，请检查以确保您的应用程序代码不受任何这些限制的影响。
+  写入转发不支持以下类型的 SQL 语句：
**注意**  
这些语句可以由您在应用程序中隐式使用，也可以由 PostgreSQL 协议推断出来。例如，PL/SQL 异常处理可能会导致使用 SAVEPOINT，但该语句不受支持。
  +  `ANALYZE` 
  +  `CLUSTER` 
  +  `COPY` 
  + 游标 - 不支持游标，因此在使用本地写入转发之前，请务必将其关闭。
  +  数据定义语言（DDL）语句 
  +  `GRANT`\$1`REVOKE`\$1`REASSIGN OWNED`\$1`SECURITY LABEL`
  +  `LISTEN / NOTIFY` 
  +  `LOCK` 
  +  `SAVEPOINT` 
  +  `SELECT INTO` 
  +  `SET CONSTRAINTS` 
  +  序列更新：`nextval()`、`setval()`
  +  `TRUNCATE` 
  +  两阶段提交命令：`PREPARE TRANSACTION`、`COMMIT PREPARED`、`ROLLBACK PREPARED`
  + 用户定义的函数和用户定义的过程。
  +  `VACUUM` 

 您可以考虑将以下 SQL 语句与写入转发一起使用：
+ DML 语句可能由多个部分组成，如 `INSERT ... SELECT` 语句或 `DELETE ... WHERE` 语句。在这种情况下，整个语句将转发到写入器数据库实例并在此处运行。
+ 数据操作语言 (DML) 语句，如 `INSERT`、`DELETE` 和 `UPDATE`。
+  `EXPLAIN` 语句和此列表中的语句。
+  `PREPARE` 和 `EXECUTE` 语句。
+  `SELECT FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE }` 语句。