테이블 표시, redshift에서 동등한 테이블 설명


79

AWS를 처음 사용하는 사람인데 mysql 명령에 대한 redshifts의 동등 항목이 무엇인지 말해 줄 수 있습니까?

show tables -- redshift command
describe table_name -- redshift command

답변:


105

모든 정보는 PG_TABLE_DEF표, 문서 에서 찾을 수 있습니다. .

public스키마의 모든 테이블 나열 (기본값)- show tables동일 :

SELECT DISTINCT tablename
FROM pg_table_def
WHERE schemaname = 'public'
ORDER BY tablename;

table_name 이라는 테이블의 모든 열에 대한 설명 - describe table동등 :

SELECT *
FROM pg_table_def
WHERE tablename = 'table_name'
AND schemaname = 'public';

1
각 열의 기본값 세트를 가져 오는 방법이 있습니까?
Bhupender Keswani 2014

4
pg_table_def는 인덱스도 반환합니다. select distinct table_name from information_schema.columns where table_schema = 'public'대신 사용하는 것이 더 안전합니다 .
j_c

그것은 열 순서입니까?
abourget

참조 alberton.info/postgresql_meta_info.html을 위해 포함 추출 컬럼 정보에 간단한 방법의 무리에 대한
abourget

아마도이 답변 당시에는 일을했지만 이러한 쿼리는 더 이상 모든 테이블을 반환하지 않습니다 (2018-07-11). 예를 들어 자체 스키마를 생성하고 해당 스키마에 테이블을 생성했는데 테이블에 해당 테이블에 pg_table_def대한 정보가 없습니다. @j_c가 제안한 쿼리- information_schema대신 쿼리 가 작동합니다.
jbasko

83

테이블과 열에 대한 세부 정보를 얻으려면 정보 스키마에서 선택해야했습니다. 누구에게나 도움이되는 경우 :

SELECT * FROM information_schema.tables
WHERE table_schema = 'myschema'; 

SELECT * FROM information_schema.columns
WHERE table_schema = 'myschema' AND table_name = 'mytable'; 

1
저는 모든 Segment SQL 데이터를 AWS Redshift에 저장하고 있으며 지금까지 이것이 저에게 도움이 된 유일한 솔루션입니다!
mgig

2
나는 이것이 더 나은 방법이라고 생각한다. Redshift의 information_schema는 pg_table의 상위 집합입니다. 또한 pg_table_def는 일종의 권한 문제로 고통받는 것 같습니다. 스키마 / 테이블은 pg_tables에 있지만 pg_table_def의 해당 정보는 없습니다. 내가 얻는 것은 pg_catalog와 공개 스키마입니다. 실망 스럽네요.
Mark Gerolimatos

3
@MarkGerolimatos에서 테이블 pg_table_def을 보려면 SEARCH_PATH :에 스키마를 추가해야합니다 SET SEARCH_PATH to '$user', public, YOUR_SCEHMA_NAME. 확실히 직관적이지 ...
마르코 로이

33

또는 간단히 :

\dt 표를 보여주기 위해

\d+ <table name> 테이블을 설명하기 위해

편집 : psql 명령 줄 클라이언트를 사용하여 작동


이것은 나를 위해 작동하지 않습니다 .. Posgres에서는 작동하지만 Redshift .. Tomasz의 대답으로 이동하는 것이 좋습니다.
Mark Butler

1
SQLWorkbench를 통해 Redshift에 액세스하고 있습니다 (AWS 시작 안내서에서 권장 됨). 내가 시도 \dt하면 Error: Syntax error at or near "\". 다른 방법으로 Redshift에 액세스하고 있습니까?
Mark Butler

2
예, psql 명령 줄 클라이언트를 사용합니다. 내 답변을 업데이트하겠습니다.
Matt

2
실제로 psql 클라이언트를 사용하여 Redshift에 연결할 수 있다는 것을 몰랐지만 Amazon 문서에 있습니다. 실제로 매우 유용합니다. 감사.
Mark Butler

Tomasz의 솔루션과는 약간 다른 정보를 보여줍니다. 예를 들어, \ d + tablename은 sortkey 정보를 표시하지 않습니다.
Kirk

10

Tomasz Tybulewicz 답변은 좋은 방법입니다.

SELECT * FROM pg_table_def WHERE tablename = 'YOUR_TABLE_NAME' AND schemaname = 'YOUR_SCHEMA_NAME';

검색 경로에 스키마 이름이 정의되지 않은 경우 해당 쿼리는 빈 결과를 표시합니다. 먼저 아래 코드로 검색 경로를 확인하십시오.

SHOW SEARCH_PATH

검색 경로에 스키마 이름이 정의되어 있지 않은 경우 검색 경로를 재설정 할 수 있습니다.

SET SEARCH_PATH to '$user', public, YOUR_SCEHMA_NAME

Tomasz의 답변에 검색 경로 주석을 추가 할 수 있습니다. pg 뷰를 처음 사용했을 때이 문제가 발생하여 조사해야했습니다.
Rob

1

-desc /를 사용하여 Redshift에서보기 / 테이블 정의를 볼 수 있습니다. Workbench / J를 Redshift 용 SQL 클라이언트로 사용해 왔으며 결과 탭 옆에있는 메시지 탭에 정의가 제공됩니다.


1
감사합니다! 여전히 테이블을 나열하는 방법이 누락되었습니다 : /
Madhava Carrillo

1

다음 게시물에서는 Redshift에서 TABLE 및 COLUMN 주석을 검색하는 쿼리를 문서화했습니다. https://sqlsylvia.wordpress.com/2017/04/29/redshift-comment-views-documenting-data/

즐겨!

테이블 설명

    SELECT n.nspname AS schema_name
     , pg_get_userbyid(c.relowner) AS table_owner
     , c.relname AS table_name
     , CASE WHEN c.relkind = 'v' THEN 'view' ELSE 'table' END 
       AS table_type
     , d.description AS table_description
     FROM pg_class As c
     LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
     LEFT JOIN pg_tablespace t ON t.oid = c.reltablespace
     LEFT JOIN pg_description As d 
          ON (d.objoid = c.oid AND d.objsubid = 0)
     WHERE c.relkind IN('r', 'v') AND d.description > ''
     ORDER BY n.nspname, c.relname ;

열 주석

    SELECT n.nspname AS schema_name
     , pg_get_userbyid(c.relowner) AS table_owner
     , c.relname AS table_name
     , a.attname AS column_name
     , d.description AS column_description
    FROM pg_class AS c
    INNER JOIN pg_attribute As a ON c.oid = a.attrelid
    INNER JOIN pg_namespace n ON n.oid = c.relnamespace
    LEFT JOIN pg_tablespace t ON t.oid = c.reltablespace
    LEFT JOIN pg_description As d 
     ON (d.objoid = c.oid AND d.objsubid = a.attnum)
    WHERE c.relkind IN('r', 'v')
     AND a.attname NOT         
     IN ('cmax', 'oid', 'cmin', 'deletexid', 'ctid', 'tableoid','xmax', 'xmin', 'insertxid')
    ORDER BY n.nspname, c.relname, a.attname;

0

지름길

\ d 모든 테이블 표시

\ d 테이블을 설명하는 테이블 이름

\? redshift에 대한 더 많은 단축키


-6

아래 명령을 사용하여 테이블을 설명 할 수 있습니다.

desc table-name

또는

desc schema-name.table-name
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.