PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как pg_typeof() работи в PostgreSQL

В 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

В този случай върнах типа данни за всички колони в таблицата.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при създаването на пространствена база данни. ГРЕШКА:не можа да се зареди библиотеката /usr/pgsql-9.1/lib/rtpostgis-2.0.so

  2. Разгръщане и поддръжка на PostgreSQL с Ansible

  3. Импортиране на шейп файлове в postgresql в linux с помощта на pgadmin 4

  4. Java SQL ГРЕШКА:Връзка Table_Name не съществува

  5. Невъзможно е да инсталирам PG gem на моя Mac с Mavericks