Документировано ли отображение между таблицами системных таблиц PostgreSQL и представлениями information_schema?

dba.stackexchange https://dba.stackexchange.com/questions/5509

Вопрос

Если вы подключите Pgadminiii к серверу PostgreSQL 9.x, вы найдете два каталога, обнаруженных в пользовательском интерфейсе: ANSI (информационная схема) и PostgreSQL (pg_catalog).

Я ищу документацию, которая описывает отображение между

  • Объекты базы данных и системные таблицы
  • Системные таблицы и представления information_schema

Например, я хотел бы иметь возможность взять имя последовательности из базы данных и быстро сообщить, где сама последовательность, имя последовательности и ACL последовательности (из заявлений о гранте и обозревании) будут найдены в обоих Системные таблицы и в представлениях Information_Schema.

Это задокументировано где -нибудь? Я прошел через онлайн -документацию PostgreSQL, и я нашел подробности обоих Анси а также Postgresql Каталоги, но я не нашел документацию о отображениях.

Обновлять

Похоже, что информация, вероятно, находится в исходном файле information_schema.sql, но этот файл, похоже, не находится в онлайн -исходном коде. (См., Например, initdb.c at http://doxygen.postgresql.org/.)

Это было полезно?

Решение

Системные таблицы - это реализация объектов базы данных. Так что, если вы, скажем, назовите функцию foo(), СУБД смотрит в pg_proc Чтобы увидеть, есть ли функция foo и каковы аргументы, исходный код и так далее. Расположение и расположение каталогов систем - это просто то, как их создали различные функции с течением времени. Вы уже указали на документацию каталогов. Во многих случаях, скажем, простое отображение между функцией и pg_proc. Анкет Но в других случаях, например, для индекса, это немного сложнее. Вам придется выкопать эту информацию из документации или, возможно, множество примеров системных запросов, летящих вокруг.

Информационная схема указана стандартом SQL. Принцип, если вы введете эти команды DDL, то запрос информационной схемы должен дать эти результаты. Во многих случаях снова существует простое отображение между объектами и представлениями информационной схемы, но во всех случаях оно не просто. Таким образом, поддержание отдельной документации по картированию этой информации было бы громоздким и, вероятно, бесполезным. Принцип - DDL, информационная схема, а не то, что происходит в каталогах системы PostgreSQL.

В конечном счете, если вы хотите знать, будет ли последовательность найдена в таблице каталога или в представлении информационной схемы, вам необходимо запросить эти таблицы. Реальность слишком сложна, чтобы это было проще. (Я думаю. Отправьте патч, если у вас есть лучшая идея.)

Другие советы

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

psql -U postgres -c "\d information_schema.*" > information_schema.sql
Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top