Dans PostgreSQL, le pg_typeof()
La fonction vous permet d'obtenir le type de données de n'importe quelle valeur.
Plus précisément, il renvoie l'OID du type de données de la valeur qui lui est transmise. Il renvoie un regtype
, qui est un type d'alias OID. Par conséquent, il s'agit de la même chose qu'un OID à des fins de comparaison, mais il s'affiche sous la forme d'un nom de type.
Syntaxe
La fonction a la syntaxe suivante :
pg_typeof(any)
Où any
est n'importe quelle valeur.
Exemple
Voici un exemple de base pour illustrer.
SELECT pg_typeof(100);
Résultat :
integer
Chaînes arbitraires
Dans Postgres, il existe plusieurs types de chaîne (par exemple, char
, varchar
, text
). Par conséquent, vous ne pouvez pas simplement entourer un argument de guillemets simples et vous attendre à ce qu'il sache quel est son type de données.
SELECT pg_typeof('Elephant');
Résultat :
unknown
Par conséquent, vous devrez spécifier son type de données réel.
SELECT pg_typeof('Elephant'::varchar);
Résultat :
character varying
Dans Postgres, character varying
est le nom de varchar
(en fait, varchar
est l'alias pour character varying
).
Ce dernier exemple était un peu superflu, car j'ai explicitement indiqué le type de variable, ce qui signifiait que je savais déjà quel serait le résultat.
Dans le monde réel, il est plus probable que vous essayiez d'obtenir le type de données d'une variable.
Type de retour d'une variable
Dans cet exemple, je mets la chaîne précédente dans une variable, puis j'obtiens son type de données.
DO $$
DECLARE myString varchar(10) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$
Résultat :
NOTICE: Value: Elephant Type: character varying
Le voici à nouveau, sauf que je change le type de données en un type de chaîne différent (char(8)
).
DO $$
DECLARE myString char(8) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$
Résultat :
NOTICE: Value: Elephant Type: character
Valeurs booléennes
Voici un exemple de fourniture explicite d'une valeur booléenne.
SELECT
pg_typeof(true),
pg_typeof(false);
Résultat :
pg_typeof | pg_typeof -----------+----------- boolean | boolean
Type de retour d'une fonction
Encore une fois, il est peu probable que vous fournissiez explicitement true
ou false
à cette fonction. Il est plus probable que cela provienne d'une variable.
Mais vous pouvez également utiliser pg_typeof()
pour connaître le type de retour d'une fonction.
Voici un exemple.
SELECT pg_typeof(isfinite(date '2020-07-18'));
Résultat :
boolean
Dans ce cas, j'ai passé le isfinite()
fonction à pg_typeof()
fonctionner comme son argument.
Et voici un autre exemple. Dans celui-ci, j'obtiens le type de données de la valeur de retour du make_date()
fonction.
SELECT pg_typeof(make_date('1999', '09', '19'));
Résultat :
date
Type de données d'une colonne
Voici un exemple de renvoi du type de données d'une colonne de base de données.
SELECT pg_typeof(last_update)
FROM actor
LIMIT 1;
Résultat :
timestamp without time zone
Dans ce cas, j'ai vérifié le type de données du actor.last_update
colonne dans la pagila
exemple de base de données.
Vérifions une autre colonne :
SELECT pg_typeof(name)
FROM language
LIMIT 1;
Résultat :
character
Cette colonne s'affiche sous la forme bpchar
dans mon interface, qui est apparemment le nom de type interne pour CHAR(n)
.
Au fait, vous pouvez interroger information_schema.columns
pour le type de données d'une colonne.
Par conséquent, nous pourrions utiliser la requête suivante à la place :
SELECT
column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'language';
Résultat :
column_name | data_type -------------+----------------------------- language_id | integer name | character last_update | timestamp without time zone
Dans ce cas, j'ai renvoyé le type de données pour toutes les colonnes de la table.