En PostgreSQL, el pg_typeof()
La función le permite obtener el tipo de datos de cualquier valor.
Más específicamente, devuelve el OID del tipo de datos del valor que se le pasa. Devuelve un regtype
, que es un tipo de alias OID. Por lo tanto, es lo mismo que un OID a efectos de comparación, pero se muestra como un nombre de tipo.
Sintaxis
La función tiene la siguiente sintaxis:
pg_typeof(any)
Donde any
es cualquier valor.
Ejemplo
Aquí hay un ejemplo básico para demostrarlo.
SELECT pg_typeof(100);
Resultado:
integer
Cadenas arbitrarias
En Postgres, hay más de un tipo de cadena (por ejemplo, char
, varchar
, text
). Por lo tanto, no puede simplemente encerrar un argumento entre comillas simples y esperar que sepa cuál es su tipo de datos.
SELECT pg_typeof('Elephant');
Resultado:
unknown
Por lo tanto, deberá especificar su tipo de datos real.
SELECT pg_typeof('Elephant'::varchar);
Resultado:
character varying
En Postgres, character varying
es el nombre de varchar
(en realidad, varchar
es el alias para character varying
).
Este último ejemplo fue un poco superfluo, ya que declaré explícitamente el tipo de variable, lo que significaba que ya sabía cuál iba a ser el resultado.
En el mundo real, es más probable que intente obtener el tipo de datos de una variable.
Tipo de retorno de una variable
En este ejemplo, coloco la cadena anterior en una variable y luego obtengo su tipo de datos.
DO $$
DECLARE myString varchar(10) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$
Resultado:
NOTICE: Value: Elephant Type: character varying
Aquí está de nuevo, excepto que cambio el tipo de datos a un tipo de cadena diferente (char(8)
).
DO $$
DECLARE myString char(8) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$
Resultado:
NOTICE: Value: Elephant Type: character
Valores booleanos
Este es un ejemplo de proporcionar un valor booleano de forma explícita.
SELECT
pg_typeof(true),
pg_typeof(false);
Resultado:
pg_typeof | pg_typeof -----------+----------- boolean | boolean
Tipo de retorno de una función
Nuevamente, es poco probable que proporcione explícitamente true
o false
a esta función. Es más probable que provenga de una variable.
Pero también podrías usar pg_typeof()
para averiguar el tipo de devolución de una función.
He aquí un ejemplo.
SELECT pg_typeof(isfinite(date '2020-07-18'));
Resultado:
boolean
En este caso pasé el isfinite()
función al pg_typeof()
funcionar como su argumento.
Y aquí hay otro ejemplo. En este obtengo el tipo de datos del valor de retorno de make_date()
función.
SELECT pg_typeof(make_date('1999', '09', '19'));
Resultado:
date
Tipo de datos de una columna
Este es un ejemplo de cómo devolver el tipo de datos de una columna de base de datos.
SELECT pg_typeof(last_update)
FROM actor
LIMIT 1;
Resultado:
timestamp without time zone
En este caso verifiqué el tipo de datos del actor.last_update
columna en la pagila
base de datos de ejemplo.
Revisemos otra columna:
SELECT pg_typeof(name)
FROM language
LIMIT 1;
Resultado:
character
Esta columna se muestra como bpchar
en mi interfaz, que aparentemente es el nombre de tipo interno para CHAR(n)
.
Por cierto, puedes consultar information_schema.columns
para el tipo de datos de una columna.
Por lo tanto, podríamos usar la siguiente consulta en su lugar:
SELECT
column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'language';
Resultado:
column_name | data_type -------------+----------------------------- language_id | integer name | character last_update | timestamp without time zone
En este caso, devolví el tipo de datos para todas las columnas de la tabla.