Показать таблицы, описать эквивалент таблиц в красном смещении

79

Я новичок в aws, может ли кто-нибудь сказать мне, какие эквиваленты красных смещений для команд mysql?

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
Есть ли способ получить набор значений по умолчанию для соответствующих столбцов?
Бхупендер Кесвани
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
Возможно, во время этого ответа они использовали work to, но эти запросы больше не возвращают все таблицы (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
Я считаю это лучшим методом. Information_schema в Redshift - это надмножество pg_table. Кроме того, pg_table_def, похоже, страдает от какой-то проблемы с правами доступа: хотя схема / таблица будет в pg_tables, соответствующей информации в pg_table_def там НЕ будет. Все, что я получаю, это pg_catalog и общедоступные схемы. Разочарование.
Марк Геролиматос 08
3
@MarkGerolimatos Чтобы увидеть таблицы в pg_table_def, необходимо добавить схему к вашему search_path: SET SEARCH_PATH to '$user', public, YOUR_SCEHMA_NAME. Определенно не интуитивно
Марко Рой
33

Или просто:

\dt показать таблицы

\d+ <table name> описать стол

Изменить: работает с использованием клиента командной строки psql

Мэтт
источник
Это не работает для меня .. это будет работать в Posgres, но не в Redshift .. лучше пойти с ответом Томаша.
Марк Батлер
1
Я получаю доступ к Redshift через SQLWorkbench (как рекомендовано в руководстве по началу работы с AWS). Если попробую, \dtто получу Error: Syntax error at or near "\". Вы получаете доступ к Redshift каким-либо другим способом?
Марк Батлер
2
Да, с помощью клиента командной строки psql. Я обновлю свой ответ.
Мэтт
2
На самом деле я не понимал, что вы можете подключиться к Redshift с помощью клиента psql, но это есть в документации Amazon. На самом деле это очень полезно. Благодарю.
Марк Батлер
Он показывает немного другую информацию, чем решение Томаша. Например, \ d + tablename не отображает информацию о ключе сортировки.
Кирк
10

Ответ Томаша Тибулевича - хороший вариант.

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
Кишан Пандей
источник
Вы можете добавить комментарий пути поиска к ответу Томаша. У меня возникла эта проблема в первый раз, когда я использовал представления pg, и мне пришлось исследовать ее.
Роб
1

Вы можете использовать - desc /, чтобы увидеть определение представления / таблицы в Redshift. Я использовал Workbench / J в качестве SQL-клиента для Redshift, и он дает определение на вкладке «Сообщения» рядом с вкладкой «Результат».

Анирудх Сингх Раджават
источник
1
Спасибо за это! По-прежнему отсутствует способ перечисления таблиц: /
Мадхава Каррильо
1

В следующем посте я задокументировал запросы на получение комментариев TABLE и COLUMN из Redshift. 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 tablename для описания таблицы

\? для большего количества ярлыков для красного смещения

панкадж ядав E DOT TECH
источник
-6

Вы можете просто использовать приведенную ниже команду для описания таблицы.

desc table-name

или же

desc schema-name.table-name
Эндрю Эндикотт
источник