In PostgreSQL der pg_typeof()
Mit der Funktion können Sie den Datentyp eines beliebigen Werts abrufen.
Genauer gesagt gibt es die OID des Datentyps des Werts zurück, der ihm übergeben wird. Es gibt einen regtype
zurück , bei dem es sich um einen OID-Aliastyp handelt. Daher ist es zu Vergleichszwecken dasselbe wie eine OID, wird aber als Typname angezeigt.
Syntax
Die Funktion hat folgende Syntax:
pg_typeof(any)
Wobei any
ist irgendein Wert.
Beispiel
Hier ist ein einfaches Beispiel zur Veranschaulichung.
SELECT pg_typeof(100);
Ergebnis:
integer
Beliebige Zeichenfolgen
In Postgres gibt es mehr als einen String-Typ (z. B. char
, varchar
, text
). Daher können Sie ein Argument nicht einfach in einfache Anführungszeichen setzen und erwarten, dass es seinen Datentyp kennt.
SELECT pg_typeof('Elephant');
Ergebnis:
unknown
Daher müssen Sie den tatsächlichen Datentyp angeben.
SELECT pg_typeof('Elephant'::varchar);
Ergebnis:
character varying
In Postgres character varying
ist der Name für varchar
(eigentlich varchar
ist der Alias für character varying
).
Dieses letzte Beispiel war etwas überflüssig, da ich den Variablentyp explizit angegeben hatte und somit bereits wusste, was das Ergebnis sein würde.
In der realen Welt ist es wahrscheinlicher, dass Sie versuchen, den Datentyp einer Variablen abzurufen.
Rückgabetyp einer Variablen
In diesem Beispiel füge ich die vorherige Zeichenfolge in eine Variable ein und erhalte dann ihren Datentyp.
DO $$
DECLARE myString varchar(10) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$
Ergebnis:
NOTICE: Value: Elephant Type: character varying
Hier ist es wieder, außer dass ich den Datentyp in einen anderen String-Typ ändere (char(8)
).
DO $$
DECLARE myString char(8) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$
Ergebnis:
NOTICE: Value: Elephant Type: character
Boolesche Werte
Hier ist ein Beispiel für die explizite Bereitstellung eines booleschen Werts.
SELECT
pg_typeof(true),
pg_typeof(false);
Ergebnis:
pg_typeof | pg_typeof -----------+----------- boolean | boolean
Rückgabetyp einer Funktion
Auch hier ist es unwahrscheinlich, dass Sie ausdrücklich true
angeben oder false
zu dieser Funktion. Es ist wahrscheinlicher, dass es von einer Variablen kommt.
Sie könnten aber auch pg_typeof()
verwenden um den Rückgabetyp einer Funktion herauszufinden.
Hier ist ein Beispiel.
SELECT pg_typeof(isfinite(date '2020-07-18'));
Ergebnis:
boolean
In diesem Fall habe ich das isfinite()
übergeben Funktion zu pg_typeof()
Funktion als sein Argument.
Und hier ist ein weiteres Beispiel. In diesem erhalte ich den Datentyp des Rückgabewerts von make_date()
Funktion.
SELECT pg_typeof(make_date('1999', '09', '19'));
Ergebnis:
date
Datentyp einer Spalte
Hier ist ein Beispiel für die Rückgabe des Datentyps einer Datenbankspalte.
SELECT pg_typeof(last_update)
FROM actor
LIMIT 1;
Ergebnis:
timestamp without time zone
In diesem Fall habe ich den Datentyp von actor.last_update
überprüft Spalte in der pagila
Beispieldatenbank.
Sehen wir uns eine andere Spalte an:
SELECT pg_typeof(name)
FROM language
LIMIT 1;
Ergebnis:
character
Diese Spalte wird als bpchar
angezeigt in meiner Schnittstelle, die anscheinend der interne Typname für CHAR(n)
ist .
Übrigens können Sie information_schema.columns
abfragen für den Datentyp einer Spalte.
Daher könnten wir stattdessen die folgende Abfrage verwenden:
SELECT
column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'language';
Ergebnis:
column_name | data_type -------------+----------------------------- language_id | integer name | character last_update | timestamp without time zone
In diesem Fall habe ich den Datentyp für alle Spalten in der Tabelle zurückgegeben.