48.4. Система правил Postgres Pro

Postgres Pro поддерживает мощную систему правил для создания представлений и возможности изменения представлений. Система правил Postgres Pro претерпела две реализации:

  • Первый вариант производил обработку на уровне строк и был внедрён глубоко в исполнителе. Этот обработчик правил вызывался при обращении к каждой отдельной строке. Эта реализация была ликвидирована в 1995 г., когда последний официальный выпуск Berkeley Postgres превратился в Postgres95.

  • Во втором воплощении системы правил применили так называемое переписывание запроса. Система переписывания реализована в механизме, внедрённом между анализатором и планировщиком/оптимизатором. Этот механизм работает и сегодня.

Механизм переписывания запросов подробно обсуждается в Главе 38, так что здесь мы его не рассматриваем. Мы только отметим, что и на входе, и на выходе у него деревья запросов, то есть представление или уровень семантической детализации он не меняет. Переписывание запроса можно считать формой расширения макросов.

51.98. pg_user_mappings

The view pg_user_mappings provides access to information about user mappings. This is essentially a publicly readable view of pg_user_mapping that leaves out the options field if the user has no rights to use it.

Table 51.99. pg_user_mappings Columns

Column Type

Description

umid oid (references pg_user_mapping.oid)

OID of the user mapping

srvid oid (references pg_foreign_server.oid)

The OID of the foreign server that contains this mapping

srvname name (references pg_foreign_server.srvname)

Name of the foreign server

umuser oid (references pg_authid.oid)

OID of the local role being mapped, or zero if the user mapping is public

usename name

Name of the local user to be mapped

umoptions text[]

User mapping specific options, as keyword=value strings


To protect password information stored as a user mapping option, the umoptions column will read as null unless one of the following applies:

  • current user is the user being mapped, and owns the server or holds USAGE privilege on it

  • current user is the server owner and mapping is for PUBLIC

  • current user is a superuser