Эквивалент "описать таблицу" в PgAdmin3

Вопрос спросил и ответил:

Как известно многим, PostgreSQL не поддерживает describe table или describe view. Как можно найти в google, PostgreSQL вместо этого использует \d+.

Однако, если вы обращаетесь к PostgreSQL с помощью PgAdmin (я фактически использую PgAdmin3), то \d+ не работает. Что вы делаете вместо этого?

Я подумал об этом, когда играл с инструментом запроса в PgAdmin3. У меня было "хорошо, дух!" момент, когда я подумал посмотреть на домашнее окно PgAdmin3 и на дерево слева от этого окна. В разделе

<servername>
-> <databasename>
-> Schemas
-> <schemaname>
-> Tables

был список моих таблиц, и нажатие на имя таблицы показало мне текст очень похоже на то, что \d+ показал бы мне.

Так что в интересах кого-то, кто не сразу обнаружил это, вот ответ.

Ответ 1

PostgreSQL также поддерживает стандартную информационную схему SQL для извлечения деталей объектов в базе данных.

то есть. для получения информации о столбцах вы можете запросить представление information_schema.columns:

SELECT *
FROM information_schema.columns
WHERE table_name = '????';

Отметьте здесь для конкретных сведений PostgreSQL о информационной схеме.

Ответ 2

Команда

psql\d отправляет набор запросов в базу данных для запроса схемы, затем печатает результат.

Вы можете использовать опцию '-E' psql, чтобы отображать эти запросы, если вы хотите получать подобную информацию напрямую через SQL.

Сказав это, psql использует внутренние таблицы каталога Postgresql вместо стандартизованной схемы "information_schema" (см. ответ от garethflowers). Поэтому, если вы заботитесь о переносимости или даже гарантируете, что он будет продолжать работать с одного выпуска на следующий, вы, вероятно, должны использовать information_schema.

Ответ 3

и прямой из оболочки bash:

    psql -d "$db_name" -c '
    SELECT 
    ordinal_position , table_name , column_name , data_type , is_nullable
    FROM information_schema.columns
    WHERE 1=1
    AND table_name = '\''my_table'\''
    ;'

    # or just the col names
    psql -d "$my_db" -t -c \
    "SELECT column_name FROM information_schema.columns 
    WHERE 1=1 AND table_name='my_table'"

Ответ 4

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

Ответ 5

Чтобы получить полное представление о том, что запрос описания вернется, щелкните правой кнопкой мыши на отношении/интересующей таблице и выберите Свойства..., затем используйте вкладку Столбцы в предоставленном окне.

Разница лишь в том, что окно не дает информацию об отношении внешнего ключа.