Информация схема является медленным и надежным способом: это стандартизированное и в значительной степени переносит на другие базы данных , которые поддерживают его. И он будет продолжать работать в основных версиях.
Однако представления в информационной схеме часто объединяются во многих таблицах из системных каталогов, чтобы соответствовать строго стандартизированному формату - многие из которых в большинстве случаев являются просто бесполезным грузом. Это делает их медленными .
Разработчики Postgres не дают обещаний, но основы (например, то, что здесь необходимо) не изменятся в основных версиях.
psql
(родной интерфейс командной строки), конечно, выбирает быструю полосу и напрямую запрашивает источник. Если вы начнете psql
с этого параметра-E
, \d
будет отображаться SQL, стоящий за командами с обратной косой чертой . Или \set ECHO_HIDDEN on
из командной строки psql. Исходя из этого, вы можете построить ответ на свой вопрос.
Учитывая одну таблицу, возможно ли иметь список имен столбцов для этой таблицы.
SELECT attrelid::regclass AS tbl
, attname AS col
, atttypid::regtype AS datatype
-- more attributes?
FROM pg_attribute
WHERE attrelid = 'myschema.mytable'::regclass -- table name, optionally schema-qualified
AND attnum > 0
AND NOT attisdropped
ORDER BY attnum;
Быстрее, чем запросыinformation_schema.columns
. Попробуйте EXPLAIN ANALYZE
убедиться в этом сами. По-прежнему вряд ли имеет значение для разового поиска. Но может иметь значение, если используется в запросе / функции, которая повторяется много раз.
Есть также тонкие различия в видимости. Детальное сравнение: