# 2F003 — prohibited_sql_statement_attempted

> PostgreSQL SQLSTATE 2F003 的源码与诊断参考。
---

# 2F003

## 速览 {#at-a-glance}

SQLSTATE 2F003 是 SQL Routine Exception 类别中“尝试执行被禁止 SQL 语句”的成员。固定 PostgreSQL 18.6 源码在 dblink 和 postgres_fdw 的不同连接路径中确认了该 ERROR；dblink 还覆盖了结果返回形状不符合 API 要求的路径。

<!-- BEGIN SQLSTATE FACTS: generated by scripts/generate.py; do not edit -->

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `2F003` |
| 条件名 | `prohibited_sql_statement_attempted` |
| 状态 | `有效` |
| 已知存在于 | `7.4` |
| 锁定快照 | `9.0.23, 9.1.24, 9.2.24, 9.3.25, 9.4.26, 9.5.25, 9.6.24, 10.23, 11.22, 12.22, 13.23, 14.24, 15.19, 16.15, 17.11, 18.6, 19beta3` |
| 宏 | `ERRCODE_S_R_E_PROHIBITED_SQL_STATEMENT_ATTEMPTED` |
| 别名 | `—` |

<!-- source facts: data/errcodes/2F003.json -->
<!-- END SQLSTATE FACTS -->

## 含义 {#meaning}

确认的消息包括 `statement returning results not allowed`，以及 `password or GSSAPI delegated credentials required`，后者带有 detail，有些路径还带 hint。postgres_fdw 的 detail 会说明 user mapping，有时 hint 会提到 `password_required=false`；dblink 使用自己的凭据措辞。由于同一 SQLSTATE 覆盖不同 API，必须保留实际产生者。

## 消息 {#messages}

确认的消息包括 `statement returning results not allowed`，以及 `password or GSSAPI delegated credentials required`，后者带有 detail，有些路径还带 hint。postgres_fdw 的 detail 会说明 user mapping，有时 hint 会提到 `password_required=false`；dblink 使用自己的凭据措辞。由于同一 SQLSTATE 覆盖不同 API，必须保留实际产生者。

## 诊断 {#diagnosis}

对于 dblink，确认本地调用是把会返回行的命令用于无结果 API，还是连接凭据检查。对于 postgres_fdw，若消息点名这些对象，就检查 foreign server 连接、user mapping、认证方法以及服务器的 `password_required` 策略。保留固定 detail/hint，不要把 dblink 和 postgres_fdw 合并成一个笼统 wrapper。

## 处理 {#response}

修正命令与 API 的搭配，或修正消息点名的连接凭据和 user mapping，然后验证远端操作。远端连接尝试可能尚未完成；重试前要保留远端/本地边界。不要仅因 dblink 或 postgres_fdw 报告 2F003 就改变事务策略。

## 版本 {#versions}

锁定目录将该条件的已知下界记为 PostgreSQL 7.4；事实块列出已发布快照，源码路径状态仅限于下方固定的 PostgreSQL 18.6 资料。

## 相关 {#related}

[`2F000`](../2f000/), [`38003`](../38003/)

## 来源 {#sources}

可直接阅读固定的 [dblink.c](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/contrib/dblink/dblink.c#L1488-L1490) 与 [postgres_fdw connection.c](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/contrib/postgres_fdw/connection.c#L468-L472) 路径；完整范围和未解决的运行边界见结构化[证据记录](../../data/evidence/2f003.json)。
