×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

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

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.5.19. Типы идентификаторов объектов

Идентификаторы объектов (OID) используются во внутренних механизмах Digital Q.DataBase в качестве первичных ключей различных системных таблиц. Тип oid представляет собой идентификатор объекта. Также существует несколько типов-псевдонимов для oid, каждый из которых имеет префикс regчто-либо. Таблица 2.5.26 представляет собой обзор.

Тип oid тип в настоящее время реализован как четырехбайтовое целое число без знака. Следовательно, этот объем недостаточен для обеспечения уникальности в масштабе всей базы данных при работе с большими базами данных или даже с отдельными большими таблицами.

Тип oid Сам тип поддерживает лишь несколько операций, помимо сравнения. Однако он может быть приведен к типу integer, после чего его можно обрабатывать, используя стандартные целочисленные операторы. (При выполнении данной операции следует учитывать возможную путаницу между знаковыми и беззнаковыми значениями.)

Типы-псевдонимы OID не имеют собственных операций, за исключением специализированных функций ввода-вывода. Данные процедуры позволяют принимать и отображать символьные имена системных объектов вместо необработанных числовых значений, которые использовал бы тип oid . Типы-псевдонимы позволяют упростить поиск значений OID для объектов. Например, чтобы просмотреть pg_attribute строки, относящиеся к таблице mytable, можно составить такой запрос:

SELECT * FROM pg_attribute WHERE attrelid = 'mytable'::regclass;

вместо:

SELECT * FROM pg_attribute
  WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'mytable');

Хотя само по себе это выглядит неплохо, такая схема всё же слишком упрощена. Потребуется гораздо более сложный подзапрос для выбора правильного OID в случае, если существует несколько таблиц с одинаковым именем mytable в разных схемах. Входной regclass преобразователь выполняет поиск таблицы согласно настройке пути поиска схем и, таким образом, делает «всё необходимое» автоматически. Аналогично, приведение OID таблицы к типу regclass удобно для символьного представления числового OID.

Таблица 2.5.26. Типы идентификаторов объектов

ИмяСсылкиОписаниеПример значения
oidлюбойчисловой идентификатор объекта564182
regclasspg_classимя отношенияpg_type
regcollationpg_collationимя правила сортировки"POSIX"
regconfigpg_ts_configконфигурация полнотекстового поискаenglish
regdictionarypg_ts_dictсловарь полнотекстового поискаsimple
regnamespacepg_namespaceимя пространства именpg_catalog
regoperpg_operatorимя оператора+
regoperatorpg_operatorоператор с типами аргументов*(integer,​integer) или -(NONE,​integer)
regprocpg_procимя функцииsum
regprocedurepg_procфункция с типами аргументовsum(int4)
regrolepg_authidимя ролиsmithee
regtypepg_typeимя типа данныхinteger

Все типы-псевдонимы OID для объектов, группируемых по пространствам имен, принимают имена с указанием схемы и выводят их в таком же формате, если объект не находится в текущем пути поиска без явного указания схемы. Например, myschema.mytable является допустимым входным значением для regclass (если такая таблица существует). Это значение может быть выведено как myschema.mytable, или просто mytable, в зависимости от текущего пути поиска. Типы- regproc и regoper псевдонимы принимают только уникальные (не перегруженные) входные имена, поэтому они имеют ограниченное применение; для большинства случаев regprocedure или regoperator более подходят. Для regoperator, унарные операторы идентифицируются путем записи NONE для неиспользуемого операнда.

Функции ввода для данных типов допускают наличие пробельных символов между токенами и переводят символы верхнего регистра в нижний, за исключением строк в двойных кавычках; это сделано для приведения правил синтаксиса в соответствие с правилами написания имен объектов в SQL. Напротив, функции вывода при необходимости используют двойные кавычки, чтобы результат являлся допустимым идентификатором SQL. Например, OID функции с именем Foo (с заглавной буквой F) принимающей два целочисленных аргумента, можно ввести в виде ' "Foo" ( int, integer ) '::regprocedure. Вывод будет выглядеть следующим образом "Foo"(integer,integer). Имена функций и типов аргументов также могут быть квалифицированы схемой.

Многие встроенные Digital Q.DataBase функции принимают OID таблицы или другого объекта базы данных и для удобства описаны как принимающие regclass (или соответствующий тип-псевдоним OID). Это означает, что вам не нужно искать OID объекта вручную, а можно просто ввести его имя как строковый литерал. Например, функция nextval(regclass) принимает OID отношения-последовательности, поэтому её можно вызвать так:

nextval('foo')              работает с последовательностью foo
nextval('FOO')              то же, что и выше
nextval('"Foo"')            работает с последовательностью Foo
nextval('myschema.foo')     работает с myschema.foo
nextval('"myschema".foo')   то же, что и выше
nextval('foo')              выполняет поиск в пути поиска для foo

Примечание

Когда аргумент такой функции записывается как простой строковый литерал, он становится константой типа regclass (или соответствующего типа). Поскольку фактически это просто OID, он будет отслеживать первоначально идентифицированный объект, несмотря на последующее переименование, смену схемы и т. д. Такое «раннее связывание» поведение обычно является предпочтительным для ссылок на объекты в значениях по умолчанию для столбцов и в представлениях. Но иногда может потребоваться «позднее связывание» при котором ссылка на объект разрешается во время выполнения. Чтобы обеспечить поведение позднего связывания, принудительно сохраните константу как текст константу вместо regclass:

nextval('foo'::text)      foo ищется во время выполнения

Значение to_regclass() функция и аналогичные ей функции также могут использоваться для поиска объектов во время выполнения. См. Таблица 2.6.74.

Другой практический пример использования regclass заключается в поиске OID таблицы, указанной в information_schema представлений, которые не предоставляют такие OID напрямую. Например, может возникнуть необходимость вызвать функцию pg_relation_size() , требующую OID таблицы. С учётом вышеизложенных правил, правильный способ сделать это выглядит так:

SELECT table_schema, table_name,
       pg_relation_size((quote_ident(table_schema) || '.' ||
                         quote_ident(table_name))::regclass)
FROM information_schema.tables
WHERE ...

Тип quote_ident() автоматически заключит идентификаторы в двойные кавычки, если это необходимо. Кажущийся более простым вариант

SELECT pg_relation_size(table_name)
FROM information_schema.tables
WHERE ...

не рекомендуется, так как он приведет к ошибке для таблиц, находящихся вне пути поиска (search_path) или имеющих имена, требующие использования кавычек.

Дополнительным свойством большинства типов-псевдонимов OID является создание зависимостей. Если константа одного из этих типов фигурирует в сохранённом выражении (например, в значении столбца по умолчанию или в определении представления), это создаёт зависимость от соответствующего объекта. Например, если для столбца задано выражение по умолчанию nextval('my_seq'::regclass), Digital Q.DataBase система понимает, что выражение по умолчанию зависит от последовательности my_seq, поэтому она не позволит удалить эту последовательность без предварительного удаления выражения по умолчанию. Альтернативный вариант с использованием nextval('my_seq'::text) не создает зависимости. (regrole является исключением из этого правила. Константы этого типа не допускаются в хранимых выражениях.)

Другим типом идентификатора, используемым системой, является xid, или идентификатор транзакции (сокращенно xact). Это тип данных системных столбцов xmin и xmax. Идентификаторы транзакций представляют собой 32-разрядные величины. В некоторых контекстах используется 64-разрядный вариант xid8 . В отличие от xid значений, xid8 значения увеличиваются строго монотонно и не могут быть использованы повторно в течение всего времени существования кластера баз данных. См. Раздел 7.16.1 для получения более подробной информации.

Третий тип идентификаторов, используемый системой, — это cid, или идентификатор команды. Данный тип данных используется для системных столбцов cmin и cmax. Идентификаторы команд также являются 32-разрядными величинами.

Последний тип идентификаторов, используемый системой, — это tid, или идентификатор кортежа (идентификатор строки). Данный тип данных используется для системного столбца ctid. Идентификатор кортежа (TID) представляет собой пару (номер блока, индекс кортежа внутри блока), определяющую физическое местоположение строки внутри таблицы.

(Более подробно системные столбцы описаны в Раздел 2.2.6.)

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению