【发布时间】:2013-09-15 00:24:31
【问题描述】:
我是 aws 新手,谁能告诉我 redshift 与 mysql 命令的等效项是什么?
show tables -- redshift command
describe table_name -- redshift command
【问题讨论】:
标签: amazon-web-services amazon-redshift
我是 aws 新手,谁能告诉我 redshift 与 mysql 命令的等效项是什么?
show tables -- redshift command
describe table_name -- redshift command
【问题讨论】:
标签: amazon-web-services amazon-redshift
【讨论】:
所有信息都可以在PG_TABLE_DEF 表documentation 中找到。
列出 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';
更新:
正如@Kishan Pandey 的回答所指出的,如果您正在寻找与public 不同的架构的详细信息,您需要set search_path to my_schema。 (show search_path显示当前搜索路径)
列出my_schema 架构中的表:
set search_path to my_schema;
select * from pg_table_def;
【讨论】:
select distinct table_name from information_schema.columns where table_schema = 'public' 更安全。
set search_path to my_schema 并因此更新查询以过滤schemaname = 'my_schema'跨度>
快捷方式
\d 用于显示所有表格
\d 表名来描述表
\?更多关于 redshift 的快捷方式
【讨论】:
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
【讨论】:
SEARCH_PATH 相关的正确解决方案。但我只需要set search_path to my_schema_name。
我必须从信息架构中进行选择才能获取我的表和列的详细信息;如果它对任何人有帮助:
SELECT * FROM information_schema.tables
WHERE table_schema = 'myschema';
SELECT * FROM information_schema.columns
WHERE table_schema = 'myschema' AND table_name = 'mytable';
【讨论】:
pg_table_def 中的表,您必须将架构添加到您的SEARCH_PATH:SET SEARCH_PATH to '$user', public, YOUR_SCEHMA_NAME。绝对不直观...
pg_table_def 提供的信息更多。 pg_table_def 显示列是distkey 还是sortkey 及其编码,information_schema.columns 中没有显示。我猜这就是 DataGrip 等 SQL 客户端获取 DDL 的地方。
在下面的帖子中,我记录了从 Redshift 检索 TABLE 和 COLUMN cmets 的查询。 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;
【讨论】:
您可以简单地使用下面的命令来描述一个表格。
desc table-name
或
desc schema-name.table-name
【讨论】:
您可以使用 -desc / 查看 Redshift 中的视图/表定义。我一直在使用 Workbench/J 作为 Redshift 的 SQL 客户端,它在与 Result 选项卡相邻的 Messages 选项卡中给出了定义。
【讨论】:
或者简单地说:
\dt 显示表格
\d+ <table name>描述一张表
编辑:使用 psql 命令行客户端工作
【讨论】:
\dt,我会得到Error: Syntax error at or near "\"。您是否以其他方式访问 Redshift?