postgres_rewrite

`postgres_rewrite` 指令根据 PostgreSQL 查询的结果更改响应状态码。

语法postgres_rewrite [methods] condition [=]status_code;
默认值none
上下文http, server, location, if in location
参数2+

说明

postgres_rewrite 指令是 NGINX 的 PostgreSQL 模块的一个强大功能,允许用户根据 PostgreSQL 数据库查询返回的结果来操纵 HTTP 响应状态码。它可在多种上下文中使用,例如 httpserverlocation 以及 location 内的 if。该指令至少需要两个参数:指示在哪种条件下应用重写(例如 no_changeschangesno_rowsrows)的条件,以及在满足该条件时返回的 HTTP 状态码。如果状态码以 = 为前缀,则返回原始响应的主体,而不是默认的错误响应,从而在向客户端处理响应时提供更大的灵活性。

使用 postgres_rewrite 指定的条件有助于为不同的 SQL 操作定义操作逻辑。例如,no_changes 表示一次 INSERTUPDATEDELETE 操作未影响任何行,而 changes 表示至少影响了一行。这种行为在需要根据数据库交互返回特定状态码的应用程序中尤其有用。此外,可以在相同上下文中多次指定这些指令,从而根据不同查询结果对响应逻辑进行精细控制。

配置示例

location /query {
    postgres_pass my_upstream;
    postgres_query SELECT * FROM users;
    postgres_rewrite changes 201;
    postgres_rewrite no_changes 204;
}

请确保条件已正确指定;条件位置错误可能导致意外行为。

请记住,只有第一个匹配的 postgres_rewrite 指令会被执行;后续匹配会被忽略。

条件 no_changeschanges 仅适用于特定的 SQL 命令(INSERT、UPDATE、DELETE 等)。

← 返回所有指令