Перейти к основному содержимому

Правила и статус команд

примечание

Эта страница переведена при помощи нейросети GigaChat.

Сервер PostgreSQL возвращает строку состояния команды, такую как INSERT 149592 1, для каждой полученной команды. Это достаточно просто, когда правила не задействованы, но что происходит, когда запрос переписывается правилами?

Правила влияют на состояние команды следующим образом:

  • Если нет безусловного INSTEAD правила для запроса, то исходный запрос будет выполнен, и его статус команды будет возвращен как обычно. (Но обратите внимание, что если были какие-либо условные INSTEAD правила, их отрицание было бы добавлено к исходному запросу. Это может уменьшить количество обрабатываемых им строк, и если это так, то отчет о состоянии будет затронут.)

  • Если есть какое-либо безусловное INSTEAD правило для запроса, то исходный запрос вообще не будет выполнен. В этом случае сервер вернет состояние команды для последнего запроса, который был вставлен правилом INSTEAD (условным или безусловным), и того же типа команды (INSERT, UPDATE, или DELETE), что и исходный запрос. Если ни один из запросов, удовлетворяющих этим требованиям, не добавляется каким-либо правилом, то возвращаемый статус команды показывает тип исходного запроса и нули для полей количества строк и OID.

Программист может убедиться, что любое желаемое INSTEAD правило является тем, которое устанавливает статус команды во втором случае, присвоив ему последнее имя правила в алфавитном порядке среди активных правил, чтобы оно применялось последним.