복붙노트

[SQL] 어떻게 PostgreSQL을에있는 테이블의 목록 열 이름과 데이터 유형을 얻으려면?

SQL

어떻게 PostgreSQL을에있는 테이블의 목록 열 이름과 데이터 유형을 얻으려면?

다음 쿼리, 우리는 열 이름과 PostgreSQL의 테이블의 데이터 타입의 목록을 얻을 수 있습니다.

해결법

  1. ==============================

    1.열기 psql의 명령 줄을 입력 :

    열기 psql의 명령 줄을 입력 :

    \d+ table_name
    
  2. ==============================

    2.

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

    위의 쿼리 할 수 ​​있습니다 열 및 데이터 유형

  3. ==============================

    3.

    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)
            );
    

    그것은 더 많은 정보 : http://www.postgresql.org/docs/9.3/static/catalog-pg-attribute.html

  4. ==============================

    4.같은 테이블 이름을 가진 여러 스키마를해야하는 경우에 스키마 이름을 추가하는 것을 잊지 마십시오.

    같은 테이블 이름을 가진 여러 스키마를해야하는 경우에 스키마 이름을 추가하는 것을 잊지 마십시오.

    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
    
  5. ==============================

    5.업데이트 Pratik의 대답은 더 스키마와 nullables을 지원하기 :

    업데이트 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'
        );
    
  6. ==============================

    6.지원은 열 이름과 특정 스키마의 테이블의 유형을 발견하고 사용하는 버전은 하위 쿼리없이 조인

    지원은 열 이름과 특정 스키마의 테이블의 유형을 발견하고 사용하는 버전은 하위 쿼리없이 조인

    SELECT
        pg_attribute.attname AS column_name,
        pg_catalog.format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS data_type
    FROM
        pg_catalog.pg_attribute
    INNER JOIN
        pg_catalog.pg_class ON pg_class.oid = pg_attribute.attrelid
    INNER JOIN
        pg_catalog.pg_namespace ON pg_namespace.oid = pg_class.relnamespace
    WHERE
        pg_attribute.attnum > 0
        AND NOT pg_attribute.attisdropped
        AND pg_namespace.nspname = 'my_schema'
        AND pg_class.relname = 'my_table'
    ORDER BY
        attnum ASC;
    
  7. ==============================

    7.테이블의 컬럼에 대한 정보를 얻으려면, 당신은 사용할 수 있습니다 :

    테이블의 컬럼에 대한 정보를 얻으려면, 당신은 사용할 수 있습니다 :

    \dt+ [tablename]
    

    테이블의 데이터 유형에 대한 정보를 얻으려면, 당신은 사용할 수 있습니다 :

    \dT+ [datatype]
    
  8. ==============================

    8.

        SELECT DISTINCT
            ROW_NUMBER () OVER (ORDER BY pgc.relname , a.attnum) as rowid , 
            pgc.relname as table_name ,
            a.attnum as attr,
            a.attname as name,
            format_type(a.atttypid, a.atttypmod) as typ,
            a.attnotnull as notnull, 
            com.description as comment,
            coalesce(i.indisprimary,false) as primary_key,
            def.adsrc as default
        FROM pg_attribute a 
        JOIN pg_class pgc ON pgc.oid = a.attrelid
        LEFT JOIN pg_index i ON 
            (pgc.oid = i.indrelid AND i.indkey[0] = a.attnum)
        LEFT JOIN pg_description com on 
            (pgc.oid = com.objoid AND a.attnum = com.objsubid)
        LEFT JOIN pg_attrdef def ON 
            (a.attrelid = def.adrelid AND a.attnum = def.adnum)
        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = pgc.relnamespace
    
        WHERE 1=1 
            AND pgc.relkind IN ('r','')
            AND n.nspname <> 'pg_catalog'
            AND n.nspname <> 'information_schema'
            AND n.nspname !~ '^pg_toast'
    
        AND a.attnum > 0 AND pgc.oid = a.attrelid
        AND pg_table_is_visible(pgc.oid)
        AND NOT a.attisdropped
        ORDER BY rowid
        ;
    
  9. ==============================

    9.선택 COLUMN_NAME, INFORMATION_SCHEMA.COLUMNS 곳에서 DATA_TYPE TABLE_NAME = 'your_table_name'및 TABLE_CATALOG = 'your_database_name'및 TABLE_SCHEMA = 'your_schema_name';

    선택 COLUMN_NAME, INFORMATION_SCHEMA.COLUMNS 곳에서 DATA_TYPE TABLE_NAME = 'your_table_name'및 TABLE_CATALOG = 'your_database_name'및 TABLE_SCHEMA = 'your_schema_name';

  10. ==============================

    10.이 항목에 '더 완전한'확인하십시오.

    이 항목에 '더 완전한'확인하십시오.

    나는 SELECT 문 (안 테이블)에 열 이름과 데이터 형식이 필요합니다.

    대신 실제 기존 테이블의 SELECT 문에이 작업을 수행하려면 다음을 수행 할 수 있습니다 :

    DROP TABLE IF EXISTS abc;
    CREATE TEMPORARY TABLE abc AS
    -- your select statement here!
    SELECT 
        *
    FROM foo
    -- end your select statement
    ;
    
    select column_name, data_type 
    from information_schema.columns 
    where table_name = 'abc';
    DROP IF EXISTS abc;
    

    짧은 설명은, 당신의 선택 문,의 (임시) 테이블을 만드는 할 수 있습니다 (다른 사람의 사이)에 의해 제공되는 쿼리를 통해시 '전화'@a_horse_with_no_name 및 @selva.

    도움이 되었기를 바랍니다.

  11. ==============================

    11.스키마를 언급하지 않고 또한 필요한 정보를 얻을 수 있습니다 이 질의 - 시도>

    스키마를 언급하지 않고 또한 필요한 정보를 얻을 수 있습니다 이 질의 - 시도>

    선택 COLUMN_NAME, DATA_TYPE INFORMATION_SCHEMA.COLUMNS에서 여기서 TABLE_NAME가 'TABLE_NAME를';

  12. from https://stackoverflow.com/questions/20194806/how-to-get-a-list-column-names-and-datatype-of-a-table-in-postgresql by cc-by-sa and MIT license