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.