¿Cómo obtengo el tipo de datos de un campo específico de la tabla en postgres? Por ejemplo, tengo la siguiente tabla, student_details (stu_id entero, stu_name varchar (30), join_date timestamp);
Al usar el nombre del campo / o de cualquier otra forma, necesito obtener el tipo de datos del campo específico. Hay alguna posibilidad ?
postgresql
Nathan Villaescusa
fuente
fuente

Respuestas:
Puede obtener tipos de datos del esquema de información (8.4 documentos a los que se hace referencia aquí, pero esta no es una característica nueva):
fuente
where table_catalog = ? and table_schema = ? and table_name = ?;Pero esta vista de información_esquema no considera que el DDL podría haber usado dominios .pg_typeofPuede usar la función pg_typeof () , que también funciona bien para valores arbitrarios.
fuente
SELECT pg_typeof( date_part( 'year', now() ) ) AS exprprobablemente sea diferente de lo que esperarías.pg_typeoffunciona para los campos que salen de los procedimientos almacenados, para los cuales la tabla de fondo, si existe, es desconocida / no está clara.select state, qstart, pg_typeof(qstart) as ty_qstart from listconn(). información_esquema no ayudaría mucho aquí.Prueba esta solicitud:
fuente
table_name = 'YOUR_TABLE' AND column_name = 'YOUR_FIELD';correr
psql -Ey luego\d student_detailsfuente
Si te gusta la solución 'Mike Sherrill' pero no quieres usar psql, utilicé esta consulta para obtener la información que falta:
con resultado:
fuente
Las vistas de esquema de información y pg_typeof () devuelven información de tipo incompleta. De estas respuestas,
psqlproporciona la información de tipo más precisa. (El OP podría no necesitar información tan precisa, pero debería conocer las limitaciones).El uso
psqly\d public.testmuestra correctamente el uso del tipo de datostest_domain, la longitud de las columnas varchar (n) y la precisión y escala de las columnas numéricas (p, s).sandbox = # \ d public.test Tabla "public.test" Columna | Tipo | Modificadores --------- + ----------------------- + ----------- test_id | test_domain | test_vc | carácter variable (15) | prueba_n | numérico (15,3) | big_n | bigint | ip_addr | inet |Esta consulta contra una vista de información_esquema no muestra el uso de
test_domain. Tampoco informa los detalles de las columnas varchar (n) y numéricas (p, s).Es posible que pueda obtener toda esa información uniéndose a otras vistas de información_esquema o consultando directamente las tablas del sistema.
psql -Epodría ayudar con eso.La función
pg_typeof()muestra correctamente el uso detest_domain, pero no informa los detalles de las columnas varchar (n) y numéricas (p, s).fuente
information_schemaEs posible extraer el tipo de datos , pero no es conveniente (requiere unir varias columnas con unacasedeclaración). Alternativamente, uno puede usar laformat_typefunción incorporada para hacer eso, pero funciona en identificadores de tipo internos que están visiblespg_attributepero no eninformation_schema. EjemploBasado en https://gis.stackexchange.com/a/97834 .
fuente
b.relfilenodeconb.oid