Necesito saber el tipo de columna en PostgreSQL (es decir, varchar(20)
). Sé que probablemente podría encontrar esto usando \d
algo en psql, pero necesito que se haga con una consulta de selección.
¿Es esto posible en PostgreSQL?¿Consultar los detalles del esquema de una tabla en PostgreSQL?
Respuesta
Puede describir completamente una tabla usando postgres con la siguiente consulta:
SELECT
a.attname as Column,
pg_catalog.format_type(a.atttypid, a.atttypmod) as Datatype
FROM
pg_catalog.pg_attribute a
WHERE
a.attnum > 0
AND NOT a.attisdropped
AND a.attrelid = (
SELECT c.oid
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname ~ '^(TABLENAME)$'
AND pg_catalog.pg_table_is_visible(c.oid)
)
Tith esto se va a recuperar nombres de columna y tipo de datos.
También es posible iniciar el cliente psql usando la opción -E
$ psql -E
Y entonces un simple salida \d mytable
voluntad las consultas utilizadas por postgres para describir la tabla. Funciona para cada psql describe los comandos.
Sí, mira el information_schema.
Hay una forma mucho más simple en PostgreSQL para obtener el tipo de una columna.
SELECT pg_typeof(col)::text FROM tbl LIMIT 1
La tabla debe contener al menos una fila, por supuesto. Y solo obtiene el tipo de base sin modificadores de tipo (si corresponde). Usa la alternativa a continuación si la necesitas también.
También puede usar la función para constantes. El manual on pg_typeof()
.
Para una tabla que puede utilizar consultar el catálogo del sistema pg_attribute
para obtener la lista completa de las columnas y sus respectivas tipo con el fin vacía (o cualquier otro):
SELECT attnum, attname AS column, format_type(atttypid, atttypmod) AS type
FROM pg_attribute
WHERE attrelid = 'myschema.mytbl'::regclass -- optionally schema-qualified
AND NOT attisdropped
AND attnum > 0
ORDER BY attnum;
El manual sobre format_type()
y en object identifier types como regclass
.
Buscando "format_type (atttypid, atttypmod)" por un tiempo, ya que parece que es lo mismo que information_schema.columns. udt_name (o similar y eso está perfectamente bien para mi caso). Gracias :). – Dolfa
- 1. PostgreSQL: tabla Nombre/esquema de confusión
- 2. Obtención del esquema para una tabla
- 3. ¿Límites en los cambios del esquema de PostgreSQL dentro de las transacciones?
- 4. Para obtener los detalles de la tabla
- 5. Consultar Postgresql usando Hibernate (JPA) no encuentra la tabla
- 6. LINQ: Obtener detalles de la tabla
- 7. Cómo consultar una tabla, en sqlalchemy
- 8. Consultar concesiones para una tabla en postgres
- 9. C#: ¿Cómo consultar los detalles de un registro de eventos con una identificación de evento determinada?
- 10. ¿Detalles de tabla en SQL Anywhere?
- 11. Postgresql: compruebe si existe el esquema
- 12. Consultar dos tablas desde un esquema diferente
- 13. SQL, ¿Cómo consultar con múltiples claves foráneas en una tabla?
- 14. ¿pivote de Postgresql? Tabla cruzada?
- 15. Tabla en memoria en PostgreSQL
- 16. Obtener detalles del certificado de una apk
- 17. ¿Cómo puedo leer los detalles del archivo?
- 18. usando información sobre herramientas para mostrar los detalles de una fila de una tabla (jQuery)
- 19. Consultar nombres de columnas de una tabla de otro usuario
- 20. Obtenga los detalles del carrito de compras en Magento
- 21. Jena: ¿cómo consultar los datos del modelo?
- 22. cómo recuperar los detalles del archivo de audio en iPhone
- 23. Número máximo (utilizable) de filas en una tabla de Postgresql
- 24. La validación del esquema Hibernate falla en los sinónimos de la tabla Oracle
- 25. Postgresql - cómo obtener entradas en una tabla que no tienen una coincidencia en otra tabla
- 26. Cómo cambiar el nombre de esquema de una tabla en todos los procedimientos almacenados
- 27. @ Html.DisplayNameFor para los detalles modelo
- 28. Creando un espacio de tabla en postgresql
- 29. ¿Hay alguna forma de exportar el esquema de PostgreSQL condensado?
- 30. Postgresql copiar datos dentro de la tabla del árbol
¡Excelente respuesta! Me encontré con otro problema, sin embargo: http://stackoverflow.com/questions/4336465/using-query-to-set-the-column-type-in-postgresql – David
No creo que necesites esa coincidencia de expresiones regulares, ' c.relname ~ '^ (TABLENAME) $' 'es equivalente a' c.relname = 'TABLENAME''. Buena respuesta. –
@mu Tienes razón, pero creo que copió esto de algo con soporte de expresiones regulares :) –