В PostgreSQL, pg_typeof() функцията ви позволява да получите типа данни на произволна стойност.
По-конкретно, той връща OID на типа данни на стойността, която му се предава. Връща regtype , което е тип псевдоним на OID. Следователно той е същият като OID за целите на сравнението, но се показва като име на тип.
Синтаксис
Функцията има следния синтаксис:
pg_typeof(any)
Където any е всякаква стойност.
Пример
Ето основен пример за демонстрация.
SELECT pg_typeof(100); Резултат:
integer
Произволни низове
В Postgres има повече от един тип низ (напр. char , varchar , text ). Следователно не можете просто да заобиколите аргумент в единични кавички и да очаквате той да знае какъв е неговият тип данни.
SELECT pg_typeof('Elephant'); Резултат:
unknown
Следователно ще трябва да посочите неговия действителен тип данни.
SELECT pg_typeof('Elephant'::varchar); Резултат:
character varying
В Postgres, character varying е името за varchar (всъщност, varchar е псевдонимът за character varying ).
Този последен пример беше малко излишен, тъй като изрично посочих типа на променливата, което означаваше, че вече знаех какъв ще бъде резултатът.
В реалния свят е по-вероятно да се опитвате да получите типа данни на променлива.
Тип връщане на променлива
В този пример поставям предишния низ в променлива, след което получавам неговия тип данни.
DO $$
DECLARE myString varchar(10) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$ Резултат:
NOTICE: Value: Elephant Type: character varying
Ето го отново, с изключение на това, че променям типа данни на различен тип низ (char(8) ).
DO $$
DECLARE myString char(8) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$ Резултат:
NOTICE: Value: Elephant Type: character
Булеви стойности
Ето пример за изрично предоставяне на булева стойност.
SELECT
pg_typeof(true),
pg_typeof(false); Резултат:
pg_typeof | pg_typeof -----------+----------- boolean | boolean
Тип връщане на функция
Отново е малко вероятно да предоставите изрично true или false към тази функция. По-вероятно е той да идва от променлива.
Но можете да използвате и pg_typeof() за да разберете типа връщане на функция.
Ето един пример.
SELECT pg_typeof(isfinite(date '2020-07-18')); Резултат:
boolean
В този случай предадох isfinite() функция към pg_typeof() функция като негов аргумент.
И ето още един пример. В този получавам типа данни на връщаната стойност на make_date() функция.
SELECT pg_typeof(make_date('1999', '09', '19')); Резултат:
date
Тип данни на колона
Ето пример за връщане на типа данни на колона от база данни.
SELECT pg_typeof(last_update)
FROM actor
LIMIT 1; Резултат:
timestamp without time zone
В този случай проверих типа данни на actor.last_update колона в pagila примерна база данни.
Нека проверим друга колона:
SELECT pg_typeof(name)
FROM language
LIMIT 1; Резултат:
character
Тази колона се показва като bpchar в моя интерфейс, което очевидно е вътрешното име на тип за CHAR(n) .
Между другото, можете да направите заявка за information_schema.columns за типа данни на колона.
Следователно вместо това бихме могли да използваме следната заявка:
SELECT
column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'language'; Резултат:
column_name | data_type -------------+----------------------------- language_id | integer name | character last_update | timestamp without time zone
В този случай върнах типа данни за всички колони в таблицата.