39.6. Правила и статус команд #
Сервер Postgres Pro возвращает строку состояния команды, например, INSERT 149592 1
, для каждой получаемой команды. Это довольно прозрачно, когда не задействуются правила, но что произойдёт, если правила перезапишут запрос?
Правила влияют на состояния команды следующим образом:
Если с запросом не связано безусловное правило
INSTEAD
, то выполняется заданный исходный запрос и его статус выдаётся как обычно. (Но если определены какие-то условные правилаINSTEAD
, к исходному запросу добавляется условие, обратное их условиям применения. Это может повлиять на число обрабатываемых строк и выводимый статус команды.)Если с запросом связано безусловное правило
INSTEAD
, исходный запрос не выполняется вовсе. В этом случае сервер возвратит статус команды от последнего запроса, вставленного правиломINSTEAD
(условным или безусловным), и тип команды исходного запроса (INSERT
,UPDATE
илиDELETE
). Если правила не добавили подходящего запроса, в возвращённом статусе команды показывается исходный тип запроса и нули вместо количества строк и OID.
Программист может добиться, чтобы статус команды во втором случае устанавливало нужное правило INSTEAD
, назначив ему имя, стоящее по алфавиту после других активных правил, чтобы это правило применялось последним.