PostgreSQL“DESCRIBE TABLE”


답변:


2820

psql명령 행 도구 에서 다음을 시도하십시오 .

\d+ tablename

자세한 내용 은 설명서 를 참조하십시오.


8
나는 원래 devinmoore의 대답을 받아 들였지만 나는 이것을 더 좋아합니다. 테이블을 설명 할뿐만 아니라 열 설명 및 OID가있는 경우와 같은 메타 데이터도 표시합니다.
Mr. Muskrat

27
+당신이 할 경우에만 뷰에 대한 깊이있는 설명을 제공 포스트그레스 SQL 9로, 정말 클러치 \d+ table_name오히려 단순한보다,\d table_name
nessur

12
이 호출은 pgAdmin를 통해 PosgreSQL 9.1, 아래 Vinko의 응답을 더 경우에 적용 할 때 \ d를하지 작업을 수행
hello_earth

12
psql -E\d+psql 프롬프트 외부에서 사용하기 위해 구현 되고 비슷한 SQL을 얻는 것이 편리합니다.
bsb

17
오류 : "이름이 지정된 관계를 찾지 못했습니다". 즉, 테이블 이름을 큰 따옴표로 묶어야합니다. 분명히 postgres는 테이블 이름이 없으면 소문자로 테이블을 찾지 못합니다. 이것이 여기에 와서이 문제가있는 다른 누군가를 돕기를 바랍니다. :)
amurrell

742

PostgreSQL 방식 외에도 (\ d 'something'또는 \ dt 'table'또는 \ ds 'sequence'등)

같이 SQL 표준 방법, 여기 :

select column_name, data_type, character_maximum_length
from INFORMATION_SCHEMA.COLUMNS where table_name = '<name of table>';

많은 DB 엔진에서 지원됩니다.


23
INFORMATION_SCHEMA.COLUMNS에서 column_name, data_type, character_maximum_length를 선택하십시오. 여기서 table_name = 'table';
Dr. Person Person II

7
이것은 이전 p.4 psql과 post-8.4 서버에 갇혀있을 때 \ d보다 유용합니다. \ d 명령은 호환되지 않습니다.
beldaz

26
또한이 명령은 RedShift에 대해 실행됩니다 \d+. 이것은 최고의 답변입니다 IMO
New Alexandria

6
멋진, 내가 너무 스키마 이름을 추가 할 것 포스트 그레스에 대한 altought는
ffflabs

3
최소한의 정보가있는 열만 나열됩니다. \ d +는 기본값, Null 허용, nextval, 정밀도, 기본 키, 외래 키, 인덱스, 검사 제약 조건 및 다른 테이블의 FK를 포함하여 테이블에 대한 전체 DDL을 제공합니다.
bradw2k

70

psql 대신 쿼리에서 가져 오려면 카탈로그 스키마를 쿼리 할 수 ​​있습니다. 이를 수행하는 복잡한 쿼리는 다음과 같습니다.

SELECT  
    f.attnum AS number,  
    f.attname AS name,  
    f.attnum,  
    f.attnotnull AS notnull,  
    pg_catalog.format_type(f.atttypid,f.atttypmod) AS type,  
    CASE  
        WHEN p.contype = 'p' THEN 't'  
        ELSE 'f'  
    END AS primarykey,  
    CASE  
        WHEN p.contype = 'u' THEN 't'  
        ELSE 'f'
    END AS uniquekey,
    CASE
        WHEN p.contype = 'f' THEN g.relname
    END AS foreignkey,
    CASE
        WHEN p.contype = 'f' THEN p.confkey
    END AS foreignkey_fieldnum,
    CASE
        WHEN p.contype = 'f' THEN g.relname
    END AS foreignkey,
    CASE
        WHEN p.contype = 'f' THEN p.conkey
    END AS foreignkey_connnum,
    CASE
        WHEN f.atthasdef = 't' THEN d.adsrc
    END AS default
FROM pg_attribute f  
    JOIN pg_class c ON c.oid = f.attrelid  
    JOIN pg_type t ON t.oid = f.atttypid  
    LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = f.attnum  
    LEFT JOIN pg_namespace n ON n.oid = c.relnamespace  
    LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY (p.conkey)  
    LEFT JOIN pg_class AS g ON p.confrelid = g.oid  
WHERE c.relkind = 'r'::char  
    AND n.nspname = '%s'  -- Replace with Schema name  
    AND c.relname = '%s'  -- Replace with table name  
    AND f.attnum > 0 ORDER BY number
;

꽤 복잡하지만 PostgreSQL 시스템 카탈로그의 성능과 유연성을 보여 주므로 pg_catalog 마스터리 ;-)로 이동하십시오. 쿼리에서 % s를 변경하십시오. 첫 번째는 스키마이고 두 번째는 테이블 이름입니다.


3
이 쿼리는 여기에 더 잘 표시 됩니다. "\ d 테이블"도 제안합니다.
Flavien Volken

3
이 해결책의 하나의 장점은 format_type()예를 들어 numeric(6,2); 반면 information_schema.columns의 기본 유형 만보고합니다 numeric.
Eli Collins

3
크기에서 데이터 유형을 어떻게 분할합니까? 말 | 문자 변화 (50) | ~ 2 열 : | 다양한 캐릭터 | 50 |
ivanceras

51

psql slash 명령으로이를 수행 할 수 있습니다.

 \d myTable describe table

다른 객체에서도 작동합니다.

 \d myView describe view
 \d myIndex describe index
 \d mySequence describe sequence

출처 : faqs.org


36

psql에 해당하는 DESCRIBE TABLE것은 \d table입니다.

자세한 내용은 PostgreSQL 매뉴얼의 psql 부분을 참조하십시오.


2
또한 psql 데이터베이스 selction은 \c databasename오히려 use databasename(MySQL에서 나 자신과 같은 사람들을 위해 :-)합니다. 없이 \c databasename첫째, \d tablename생산 No relations found.메시지 아무것도 더.
Ville

27

이것이 해결책이어야합니다.

SELECT * FROM information_schema.columns
WHERE table_schema = 'your_schema'
   AND table_name   = 'your_table'

21

당신은 할 수 있습니다 \d *search pattern * 별표로 관심있는 검색 패턴과 일치하는 테이블을 찾을 수 있습니다.


이것이 내가 찾고있는 것입니다- 테이블 의 하위 집합 을 설명하는 방법 . 참고로, 테이블에 대문자가 있으면 구문은 \d *"<SubString>"*입니다. 즉, 큰 따옴표는 별표 안에 있어야합니다 . 비록 당신 이 테이블 의 목록 을 원한다면 사용하고 싶습니다\dt
Randall

이것은 테이블뿐만 아니라 시퀀스 및 인덱스와도 일치합니다.

15

\d+ <table_name>이미 찾은 명령 줄 외에도 info-schema.columns를 사용하여 정보 스키마 를 사용하여 열 데이터를 조회 할 수 있습니다.

SELECT *
FROM info_schema.columns
WHERE table_schema = 'your_schema'
AND table_name   = 'your_table'

9
FROM info_schema.columns나를 위해 작동하지 않았다. 나는 그것이 from information_schema.columns당신의 대답에 오타인지 또는 내 마지막 구현 문제인지 확실하지 않습니다.
user27874

14

다음 SQL 문을 사용하십시오.

SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_name = 'tbl_name' 
AND COLUMN_NAME = 'col_name'

tbl_name 및 col_name을 바꾸면 찾고자하는 특정 coloumn의 데이터 유형이 표시됩니다.


3
이것이 2008 년의 답변 입니다.
Quentin

@ Quentin- 두 가지에 차이가 있습니다. 위의 2008 솔루션은 전체 테이블의 column_name, data_type, character_maximum_length를 설명합니다. 여기서 언급 한 솔루션은 스키마 열의 데이터 유형 만 보여줍니다. 둘 다 실행하고 확인하십시오. 둘 다 다릅니다. 여기에있는 모든 솔루션은 문제를 해결하는 다른 방법입니다. 사용자는 여러 가지 이유로 이것을 사용할 수 있습니다
Mr.Tananki

14

이것을 사용할 수 있습니다 :

SELECT attname 
FROM pg_attribute,pg_class 
WHERE attrelid=pg_class.oid 
AND relname='TableName' 
AND attstattarget <>0; 


7

에서 MySQL을 , TABLE_NAME을 DESCRIBE


에서 의 PostgreSQL \ D TABLE_NAME


또는이 긴 명령을 사용할 수 있습니다.

SELECT
        a.attname AS Field,
        t.typname || '(' || a.atttypmod || ')' AS Type,
        CASE WHEN a.attnotnull = 't' THEN 'YES' ELSE 'NO' END AS Null,
        CASE WHEN r.contype = 'p' THEN 'PRI' ELSE '' END AS Key,
        (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid), '\'(.*)\'')
                FROM
                        pg_catalog.pg_attrdef d
                WHERE
                        d.adrelid = a.attrelid
                        AND d.adnum = a.attnum
                        AND a.atthasdef) AS Default,
        '' as Extras
FROM
        pg_class c 
        JOIN pg_attribute a ON a.attrelid = c.oid
        JOIN pg_type t ON a.atttypid = t.oid
        LEFT JOIN pg_catalog.pg_constraint r ON c.oid = r.conrelid 
                AND r.conname = a.attname
WHERE
        c.relname = 'tablename'
        AND a.attnum > 0

ORDER BY a.attnum

7

다른 답변의 SQL 쿼리를 개선하기 위해 (좋은!) 수정 된 쿼리가 있습니다. 또한 제약 조건 이름, 상속 정보 및 구성 부분으로 분류 된 데이터 유형 (유형, 길이, 정밀도, 스케일)이 포함됩니다. 또한 삭제 된 열 (여전히 데이터베이스에 존재)을 필터링합니다.

SELECT
    n.nspname as schema,
    c.relname as table,
    f.attname as column,  
    f.attnum as column_id,  
    f.attnotnull as not_null,
    f.attislocal not_inherited,
    f.attinhcount inheritance_count,
    pg_catalog.format_type(f.atttypid,f.atttypmod) AS data_type_full,
    t.typname AS data_type_name,
    CASE  
        WHEN f.atttypmod >= 0 AND t.typname <> 'numeric'THEN (f.atttypmod - 4) --first 4 bytes are for storing actual length of data
    END AS data_type_length, 
    CASE  
        WHEN t.typname = 'numeric' THEN (((f.atttypmod - 4) >> 16) & 65535)
    END AS numeric_precision,   
    CASE  
        WHEN t.typname = 'numeric' THEN ((f.atttypmod - 4)& 65535 )
    END AS numeric_scale,       
    CASE  
        WHEN p.contype = 'p' THEN 't'  
        ELSE 'f'  
    END AS is_primary_key,  
    CASE
        WHEN p.contype = 'p' THEN p.conname
    END AS primary_key_name,
    CASE  
        WHEN p.contype = 'u' THEN 't'  
        ELSE 'f'
    END AS is_unique_key,
    CASE
        WHEN p.contype = 'u' THEN p.conname
    END AS unique_key_name,
    CASE
        WHEN p.contype = 'f' THEN 't'
        ELSE 'f'
    END AS is_foreign_key,
    CASE
        WHEN p.contype = 'f' THEN p.conname
    END AS foreignkey_name,
    CASE
        WHEN p.contype = 'f' THEN p.confkey
    END AS foreign_key_columnid,
    CASE
        WHEN p.contype = 'f' THEN g.relname
    END AS foreign_key_table,
    CASE
        WHEN p.contype = 'f' THEN p.conkey
    END AS foreign_key_local_column_id,
    CASE
        WHEN f.atthasdef = 't' THEN d.adsrc
    END AS default_value
FROM pg_attribute f  
    JOIN pg_class c ON c.oid = f.attrelid  
    JOIN pg_type t ON t.oid = f.atttypid  
    LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = f.attnum  
    LEFT JOIN pg_namespace n ON n.oid = c.relnamespace  
    LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY (p.conkey)  
    LEFT JOIN pg_class AS g ON p.confrelid = g.oid  
WHERE c.relkind = 'r'::char  
    AND f.attisdropped = false
    AND n.nspname = '%s'  -- Replace with Schema name  
    AND c.relname = '%s'  -- Replace with table name  
    AND f.attnum > 0 
ORDER BY f.attnum
;

4

아래 쿼리를 사용하여 확인할 수도 있습니다

Select * from schema_name.table_name limit 0;

Expmple : 내 테이블에는 2 개의 열 이름과 암호가 있습니다. 아래 스크린 샷 제공.

이미지 추가

* PG admin3 사용


선택하고 픽업에 pgadmin에게 메타 데이터를 얻을 수있는 여유를 기대 때문에하지 "모범 사례"
미키 Perlstein

2

열, 유형, 열 수정 자 등과 같은 테이블을 설명하는 가장 좋은 방법

\d+ tablename or \d tablename

1
Use this command 

\d table name

like 

\d queuerecords

             Table "public.queuerecords"
  Column   |            Type             | Modifiers
-----------+-----------------------------+-----------
 id        | uuid                        | not null
 endtime   | timestamp without time zone |
 payload   | text                        |
 queueid   | text                        |
 starttime | timestamp without time zone |
 status    | text                        |

1
In postgres \d is used to describe the table structure.
e.g. \d schema_name.table_name;
this command will provide you the basic info of table such as, columns, type and modifiers.

If you want more info about table use
\d+ schema_name.table_name;
this will give you extra info such as, storage, stats target and description

0

1) psql을 사용한 PostgreSQL DESCRIBE TABLE

psql 명령 행 도구에서 \ d table_name 또는 \ d + table_name 을 사용하여 테이블의 열에 대한 정보를 찾으십시오.

2) information_schema를 사용한 PostgreSQL DESCRIBE TABLE

information_schema 데이터베이스에서 column_names, datatype, columns 테이블의 문자 최대 길이를 쿼리하는 SELECT 문.

INFORMATION_SCHEMA.COLUMNS에서 COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH를 선택하십시오. 여기서 table_name = 'tablename';

자세한 내용은 https://www.postgresqltutorial.com/postgresql-describe-table/


-1

/ dt는 데이터베이스에있는 모든 테이블을 나열하는 쉼표입니다. 사용
/ D 명령 / D 조 우리는 테이블의 세부 사항을 얻을 수 있습니다 +. sysntax는
* / d table_name (또는) \ d + table_name과 같습니다.


-3

get 테이블 스키마를 위해 다음 스크립트를 해결했습니다.

'CREATE TABLE ' || 'yourschema.yourtable' || E'\n(\n' ||
array_to_string(
array_agg(
'    ' || column_expr
)
, E',\n'
) || E'\n);\n'
from
(
SELECT '    ' || column_name || ' ' || data_type || 
coalesce('(' || character_maximum_length || ')', '') || 
case when is_nullable = 'YES' then ' NULL' else ' NOT NULL' end as column_expr
FROM information_schema.columns
WHERE table_schema || '.' || table_name = 'yourschema.yourtable'
ORDER BY ordinal_position
) column_list;

||연결 연산자와 같은 것으로 보입니다 (문자열을 함께 연결)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.