显示表,描述与redshift等价的表


79

我是AWS的新手,有人可以告诉我redshifts与mysql命令等效吗?

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

Answers:


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 2015年

是按列顺序排列的吗?
abourget 2015年

看到alberton.info/postgresql_meta_info.html为一堆简单的方法来提取塔信息,包括订单
abourget

也许他们在回答这个问题时就用了工作,但这些查询不再返回所有表(2018-07-11)。例如,我创建了自己的架构并在该架构中创建了一个表,该pg_table_def表没有有关该表的任何信息。@j_c建议的查询-可以information_schema代替查询。
jbasko '18年

82

我必须从信息模式中进行选择以获取表和列的详细信息。如果它可以帮助任何人:

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

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

1
我将所有段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。绝对不直观...
Marco Roy

33

或者简单地:

\dt 显示表格

\d+ <table name> 描述一张桌子

编辑:使用psql命令行客户端工作


这对我不起作用..它可以在Posgres中使用,但不能在Redshift中使用..最好选择托马斯的答案。
马克·巴特勒

1
我正在通过SQLWorkbench访问Redshift(按照AWS入门指南中的建议)。如果我尝试\dt我会得到Error: Syntax error at or near "\"。您是否以其他方式访问Redshift?
马克·巴特勒2014年

2
是的,使用psql命令行客户端。我将更新我的答案。
马特

2
实际上,我没有意识到您可以使用psql客户端连接到Redshift,但这在Amazon文档中。实际上非常有用。谢谢。
Mark Butler 2014年

它显示的信息与Tomasz的解决方案略有不同。例如,\ d +表名不显示排序键信息。
2014年

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视图并不得不对其进行研究时遇到了这个问题。
罗布


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;


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.