Estoy buscando información precisa en una base de datos que no conozco.
Es un producto de terceros, tardan en responder algunas preguntas, y sé que los datos están dentro de esa base de datos, así que quiero hacer un poco de ingeniería retro.
Dada una tabla, ¿es posible tener una lista de los nombres de las columnas para esta tabla?
Por ejemplo, en SqlServer, es posible volcar una tabla en CREATE
declaraciones reutilizables , que enumera textualmente todas las columnas de las que se compone la tabla.
postgresql
information-schema
catalogs
Stephane Rolland
fuente
fuente
\dt[+] table_name
enpsql
.Respuestas:
Además de la línea de comando
\d+ <table_name>
que ya encontró, también puede usar el Esquema de información para buscar los datos de la columna, usandoinformation_schema.columns
:Nota: Según el ejemplo anterior, asegúrese de que los valores estén entre comillas.
fuente
\x on
o\pset expanded on
para hacer que los resultados de la consulta sean lineales (en lugar de tabulares) y, por lo tanto, más fáciles de leer stackoverflow.com/a/9605093/513397\d+ public.*
para obtener la descripción (esquema + indeces / fkeys / triggers) de todas sus tablas y vistas en elpublic
esquema. Lo usamos en nuestro script de enlace previo al compromiso para realizar un seguimiento de los cambios en la base de datos realizados por cada confirmación.Como complemento de las otras respuestas, incluso una instrucción SELECT que no devuelva filas expondrá los nombres de las columnas a usted y al código de la aplicación.
Los permisos pueden entrar en juego con cualquiera de estos enfoques.
fuente
El esquema de información es lento y seguro: está estandarizado y es en gran medida portátil a otras bases de datos que lo admiten. Y seguirá funcionando en las principales versiones.
Sin embargo, las vistas en el esquema de información a menudo se unen en muchas tablas de los catálogos del sistema para cumplir con un formato estrictamente estandarizado, muchas de las cuales son solo carga muerta la mayor parte del tiempo. Esto los hace lentos .
Los desarrolladores de Postgres no están haciendo promesas, pero lo básico (como lo que se necesita aquí) no va a cambiar en las versiones principales.
psql
(la interfaz de línea de comandos nativa) toma el carril rápido, por supuesto, y consulta la fuente directamente. Si comienzapsql
con el parámetro-E
,\d
se muestra el SQL detrás de los comandos de barra diagonal inversa como . O\set ECHO_HIDDEN on
desde la línea de comando psql. A partir de ahí, puede crear una respuesta a su pregunta.Más rápido que consultar
information_schema.columns
. IntentaEXPLAIN ANALYZE
verlo por ti mismo. Todavía apenas importa para una búsqueda única. Pero podría marcar la diferencia si se usa en una consulta / función que se repite muchas veces.También hay diferencias sutiles en la visibilidad. Comparación detallada:
fuente
-E
y le muestras a la gente cómo obtener el sql de psql.psql
en PostgreSQL 11+Si está buscando los tipos de columna en una consulta, puede usar
psql
's\gdesc
fuente
PostgreSQL solamente
Esto es algo raro pero podría ser un candidato si está buscando el SQL más corto posible:
o incluso más corto (suponiendo que haya al menos una fila presente en la tabla)
El listado conserva el orden. En caso de que no le interese el pedido y tenga una
hstore
extensión instalada, puede hacerlo aún más cortofuente