No PostgreSQL, o
pg_typeof()
A função permite que você obtenha o tipo de dados de qualquer valor. Mais especificamente, ele retorna o OID do tipo de dado do valor que é passado para ele. Ele retorna um
regtype
, que é um tipo de alias OID. Portanto, é o mesmo que um OID para fins de comparação, mas é exibido como um nome de tipo. Sintaxe
A função tem a seguinte sintaxe:
pg_typeof(any)
Onde
any
é qualquer valor. Exemplo
Aqui está um exemplo básico para demonstrar.
SELECT pg_typeof(100);
Resultado:
integer
Strings arbitrárias
No Postgres, há mais de um tipo de string (por exemplo,
char
, varchar
, text
). Portanto, você não pode simplesmente colocar um argumento entre aspas simples e esperar que ele saiba qual é seu tipo de dados. SELECT pg_typeof('Elephant');
Resultado:
unknown
Portanto, você precisará especificar seu tipo de dados real.
SELECT pg_typeof('Elephant'::varchar);
Resultado:
character varying
No Postgres,
character varying
é o nome de varchar
(na verdade, varchar
é o alias para character varying
). Este último exemplo foi um pouco supérfluo, pois declarei explicitamente o tipo de variável, o que significava que eu já sabia qual seria o resultado.
No mundo real, é mais provável que você esteja tentando obter o tipo de dados de uma variável.
Tipo de retorno de uma variável
Neste exemplo, coloco a string anterior em uma variável e, em seguida, obtenho seu tipo de dados.
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
Aqui está novamente, exceto que eu altero o tipo de dados para um tipo de string 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
Aqui está um exemplo de fornecer explicitamente um valor booleano.
SELECT
pg_typeof(true),
pg_typeof(false);
Resultado:
pg_typeof | pg_typeof -----------+----------- boolean | boolean
Tipo de retorno de uma função
Novamente, é improvável que você forneça explicitamente
true
ou false
a esta função. É mais provável que venha de uma variável. Mas você também pode usar
pg_typeof()
para descobrir o tipo de retorno de uma função. Aqui está um exemplo.
SELECT pg_typeof(isfinite(date '2020-07-18'));
Resultado:
boolean
Neste caso eu passei o
isfinite()
função para o pg_typeof()
função como seu argumento. E aqui está outro exemplo. Neste eu recebo o tipo de dados do valor de retorno do
make_date()
função. SELECT pg_typeof(make_date('1999', '09', '19'));
Resultado:
date
Tipo de dados de uma coluna
Aqui está um exemplo de retorno do tipo de dados de uma coluna de banco de dados.
SELECT pg_typeof(last_update)
FROM actor
LIMIT 1;
Resultado:
timestamp without time zone
Nesse caso, verifiquei o tipo de dados do
actor.last_update
coluna na pagila
banco de dados de exemplo. Vamos verificar outra coluna:
SELECT pg_typeof(name)
FROM language
LIMIT 1;
Resultado:
character
Esta coluna é exibida como
bpchar
na minha interface, que aparentemente é o nome do tipo interno para CHAR(n)
. A propósito, você pode consultar
information_schema.columns
para o tipo de dados de uma coluna. Portanto, poderíamos usar a seguinte consulta:
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
Nesse caso, retornei o tipo de dados para todas as colunas da tabela.