Как получить имена столбцов списка и тип данных таблицы в PostgreSQL?

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

6 ответов


Откройте командную строку psql и введите:

\d+ table_name

select column_name,data_type 
from information_schema.columns 
where table_name = 'table_name';

с вышеуказанным запросом вы можете столбцы и его тип данных


SELECT
        a.attname as "Column",
        pg_catalog.format_type(a.atttypid, a.atttypmod) as "Datatype"
    FROM
        pg_catalog.pg_attribute a
    WHERE
        a.attnum > 0
        AND NOT a.attisdropped
        AND a.attrelid = (
            SELECT c.oid
            FROM pg_catalog.pg_class c
                LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
            WHERE c.relname ~ '^(hello world)$'
                AND pg_catalog.pg_table_is_visible(c.oid)
        );

Change the hello world with your table name

подробнее о нем : http://www.postgresql.org/docs/9.3/static/catalog-pg-attribute.html


чтобы получить информацию о столбце таблицы, вы можете использовать:

\dt+ [tablename]

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

\dT+ [datatype]

обновленный ответ Pratik для поддержки большего количества схем и nullables:

SELECT
    "pg_attribute".attname                                                    as "Column",
    pg_catalog.format_type("pg_attribute".atttypid, "pg_attribute".atttypmod) as "Datatype",

    not("pg_attribute".attnotnull) AS "Nullable"
FROM
    pg_catalog.pg_attribute "pg_attribute"
WHERE
    "pg_attribute".attnum > 0
    AND NOT "pg_attribute".attisdropped
    AND "pg_attribute".attrelid = (
        SELECT "pg_class".oid
        FROM pg_catalog.pg_class "pg_class"
            LEFT JOIN pg_catalog.pg_namespace "pg_namespace" ON "pg_namespace".oid = "pg_class".relnamespace
        WHERE
            "pg_namespace".nspname = 'schema'
            AND "pg_class".relname = 'table'
    );

Не забудьте добавить имя схемы, если у вас есть несколько схем с одинаковыми именами таблиц.

SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'your_table_name' and table_schema = 'your_schema_name';

или с помощью psql:

\d+ your_schema_name.your_table_name