¿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_typeof
Puede usar la función pg_typeof () , que también funciona bien para valores arbitrarios.
fuente
SELECT pg_typeof( date_part( 'year', now() ) ) AS expr
probablemente sea diferente de lo que esperarías.pg_typeof
funciona 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 -E
y luego\d student_details
fuente
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,
psql
proporciona 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
psql
y\d public.test
muestra 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).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 -E
podrí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_schema
Es posible extraer el tipo de datos , pero no es conveniente (requiere unir varias columnas con unacase
declaración). Alternativamente, uno puede usar laformat_type
función incorporada para hacer eso, pero funciona en identificadores de tipo internos que están visiblespg_attribute
pero no eninformation_schema
. EjemploBasado en https://gis.stackexchange.com/a/97834 .
fuente
b.relfilenode
conb.oid