postgres_rewrite

Директива `postgres_rewrite` изменяет код статуса ответа на основе результата запроса PostgreSQL.

Синтаксисpostgres_rewrite [methods] condition [=]status_code;
По умолчаниюnone
Контекстhttp, server, location, if in location
Аргументы2+

Описание

Директива postgres_rewrite — мощная возможность модуля PostgreSQL для NGINX, которая позволяет управлять кодом состояния HTTP-ответа на основе результатов, возвращаемых запросом к базе данных PostgreSQL. Она может использоваться в разных контекстах, таких как http, server, location и if внутри location. Эта директива принимает минимум два параметра: условие, при котором следует применять переписывание (например, no_changes, changes, no_rows или rows), и результирующий код состояния HTTP, который должен быть возвращён, если условие выполнено. Если код состояния предваряется =, возвращается тело исходного ответа вместо ответа об ошибке по умолчанию, что обеспечивает дополнительную гибкость при обработке ответов клиенту.

Условия, заданные с помощью postgres_rewrite, помогают определить операционную логику для разных SQL-операций. Например, no_changes означает, что операция INSERT, UPDATE или DELETE не затронула ни одной строки, тогда как changes указывает, что была затронута по крайней мере одна строка. Такое поведение особенно полезно в приложениях, которым необходимо возвращать определённые коды состояния в зависимости от взаимодействия с базой данных. Кроме того, эти директивы можно указывать несколько раз в одном и том же контексте, что позволяет тонко настраивать логику ответов в зависимости от различных результатов запросов.

Пример конфига

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

Убедитесь, что условия указаны правильно; неправильно размещённое условие может привести к неожиданному поведению.

Помните, что будет выполнена только первая совпадающая директива postgres_rewrite; последующие совпадения игнорируются.

Условия no_changes и changes применяются только к определённым SQL-командам (INSERT, UPDATE, DELETE и т.д.).

← Ко всем директивам