Как перечислить все столбцы для указанной таблицы
Я ищу точную информацию в базе данных, о которой я не знаю.
Это сторонний продукт, они медленно отвечают на некоторые вопросы, и я знаю, что данные лежат внутри этого db, поэтому я хочу немного сделать ретротехнику.
Учитывая одну таблицу, возможно ли иметь список имен столбцов для этой таблицы?
Например, в SqlServer можно выгрузить таблицу в операторы многократного использования CREATE
, которые в текстовом виде перечисляют все столбцы, из которых состоит таблица.
4 ответа
В дополнение к командной строке \ d + <table_name>
, которую вы уже нашли, вы также можете использовать Информационная схема , чтобы просмотреть данные столбца, используя INFORMATION_SCHEMA.COLUMNS
:
SELECT *
FROM information_schema.columns
WHERE table_schema = 'your_schema'
AND table_name = 'your_table'
Примечание. В соответствии с приведенным выше примером убедитесь, что значения заключены в кавычки.
В качестве дополнения к другим ответам даже оператор SELECT, который не возвращает строк, будет отображать имена столбцов для вас и код приложения.
выберите *
from_name_name
где ложь;
Разрешения могут вступать в игру с любым из этих подходов.
информационная схема это медленный и верный способ: он стандартизирован и в значительной степени переносится на другие базы данных, которые его поддерживают. И он будет продолжать работать в основных версиях.
Однако представления в информационной схеме часто объединяются во многие таблицы из системные каталоги , чтобы соответствовать строго стандартизованному формату - многие из которых являются просто мертвыми фрахтами большую часть времени. Это делает их медленными .
Разработчики 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
, чтобы убедиться сами. Все еще вряд ли имеет значение для разового поиска. Но может иметь значение, если используется в запросе /функции, которая повторяется много раз.
Существуют также тонкие различия в видимости. Подробное сравнение:
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 строк)