Как перечислить все столбцы для указанной таблицы

Я ищу точную информацию в базе данных, о которой я не знаю.

Это сторонний продукт, они медленно отвечают на некоторые вопросы, и я знаю, что данные лежат внутри этого db, поэтому я хочу немного сделать ретротехнику.

Учитывая одну таблицу, возможно ли иметь список имен столбцов для этой таблицы?

Например, в SqlServer можно выгрузить таблицу в операторы многократного использования CREATE, которые в текстовом виде перечисляют все столбцы, из которых состоит таблица.

190 голосов | спросил Stephane Rolland 13 PM00000040000004431 2012, 16:44:44

4 ответа


224

В дополнение к командной строке \ d + <table_name>, которую вы уже нашли, вы также можете использовать Информационная схема , чтобы просмотреть данные столбца, используя INFORMATION_SCHEMA.COLUMNS :

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

Примечание. В соответствии с приведенным выше примером убедитесь, что значения заключены в кавычки.

ответил bhamby 13 PM00000050000005331 2012, 17:27:53
62

В качестве дополнения к другим ответам даже оператор SELECT, который не возвращает строк, будет отображать имена столбцов для вас и код приложения.

выберите *
from_name_name
где ложь;

Разрешения могут вступать в игру с любым из этих подходов.

ответил Mike Sherrill 'Cat Recall' 14 AM000000110000001931 2012, 11:13:19
57

информационная схема это медленный и верный способ: он стандартизирован и в значительной степени переносится на другие базы данных, которые его поддерживают. И он будет продолжать работать в основных версиях.

Однако представления в информационной схеме часто объединяются во многие таблицы из системные каталоги , чтобы соответствовать строго стандартизованному формату - многие из которых являются просто мертвыми фрахтами большую часть времени. Это делает их медленными .
Разработчики Postgres не дают обещаний, но основы (например, что здесь необходимо) не будут меняться в основных версиях.

psql (собственный интерфейс командной строки), конечно, берет быструю полосу и напрямую запрашивает источник. Если вы запустите psql с параметром -E , выводится SQL-код за кодами обратной косой черты, например \ d. Или \ установите ECHO_HIDDEN на из командной строки psql. Начиная с этого момента вы можете построить ответ на свой вопрос.

  

Для одной таблицы можно ли иметь список имен столбцов для этой таблицы.

SELECT attrelid :: regclass AS tbl
     , attname AS col
     , atttypid :: regtype AS datatype
       - больше атрибутов?
FROM pg_attribute
WHERE attrelid = 'myschema.mytable' :: regclass - имя таблицы, необязательно с квалификацией схемы
& Attnum> 0
И НЕ ПРИНИМАЕТСЯ
ORDER BY attnum;

Быстрее, чем запрос information_schema.columns . Попробуйте EXPLAIN ANALYZE, чтобы убедиться сами. Все еще вряд ли имеет значение для разового поиска. Но может иметь значение, если используется в запросе /функции, которая повторяется много раз.

Существуют также тонкие различия в видимости. Подробное сравнение:

ответил Erwin Brandstetter 14 AM00000030000001931 2012, 03:05:19
1

psql на PostgreSQL 11 +

Если вы ищете типы столбцов для запроса, вы можете использовать psql " s \ gdesc

SELECT
    NULL AS равно нулю,
    1 AS один,
    2.0 AS два,
    «три» AS три,
    $ 1 AS четыре,
    грех ($ 2) как пять,
    'foo' :: varchar (4) как шесть,
    CURRENT_DATE AS сейчас
\ gdesc
 Колонка | Тип
-------- + ----------------------
 ноль | текст
 один | целое число
 два | числовой
 три | текст
 четыре | текст
 пять | двойная точность
 шесть | различающийся символ (4)
 сейчас | Дата
(8 строк)
ответил Evan Carroll 6 J000000Friday18 2018, 22:08:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132