Что выполняет этот запрос PostgreSQL? - PullRequest
2 голосов
/ 19 декабря 2010

Я недавно переключился с MySQL на PostgreSQL и заметил один дополнительный запрос после выполнения множества «обычных» запросов.

Сразу после этого ...

SELECT "documents".* FROM "documents" WHERE ("documents"."id" = 1) LIMIT 1

это выполнено:

SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
 FROM pg_attribute a LEFT JOIN pg_attrdef d
 ON a.attrelid = d.adrelid AND a.attnum = d.adnum
 WHERE a.attrelid = '"documents"'::regclass
 AND a.attnum > 0 AND NOT a.attisdropped
 ORDER BY a.attnum

Что выполняет этот последний запрос? Какая информация возвращается сюда?

1 Ответ

3 голосов
/ 19 декабря 2010

Запрос извлекает информацию о таблице documents.

В каталоге pg_attribute хранится информация о столбцах таблицы.

В каталоге pg_attrdef хранятся значения по умолчанию для столбца.

  • a.attrelid: таблица, к которой принадлежит этот столбец.
  • a.attname:Имя столбца.
  • a.atttypid: тип данных этого столбца.
  • a.atttypmod: записывает специфичные для типа данные, предоставляемые во время создания таблицы (например, максимальная длинаколонна варчаров).Он передается специфичным для типа функциям ввода и функциям приведения длины.Значение обычно будет равно -1 для типов, которые не нуждаются в atttypmod.
  • d.adsrc: удобочитаемое представление значения по умолчанию.
  • a.attnotnull: представляет ненулевое ограничение.

Эта информация может, например, использоваться ORM для построения отображения между классом и таблицей в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...